3 ms·
>"The C64's keyboard, by comparison, is absolutely dumb. It has no electronics at all. Just switches in an 8x8 matrix. The actual matrix switches themselves are
by peter_d_sherman 4y ago
>"The C64's keyboard, by comparison, is absolutely dumb. It has no electronics at all. Just switches in an 8x8 matrix. The actual matrix switches themselves are fed down the keyboard cable and into the computer. And the C64's own CPU needs to spend precious time scanning the matrix."
While "unfortunate" from the perspective that a C64 requires some of its CPU time to actively scan/poll the keyboard -- it also is quite possibly one of the simplest (simple = positive, beneficial, educational, etc.) keyboard designs that could exist for a microcomputer (and for that reason, educationally valuable!) perhaps only short of a "dumb" keyboard connected to an RS-232 interface...
Anyway, great article!
- masswerk 4y agoThis is also what enables nearly latency-free keyboard response at 60Hz polling, something most modern implementations can only dream of. (The latency of modern keyboard communications is also an issue with emulation.) BTW, this architecture really goes back to the PET 2001 (1977), which even comes with a detailed keyboard matrix diagram in the manual. [0] https://www.masswerk.at/pet/manuals/PET_User_Manual_(2001-8).pdf https://www.masswerk.at/pet/manuals/PET_User_Manual_(2001-8)... (p 12) Commodore does a good job there (just before and after the diagram) of selling the advantages and disadvantages: > Until that key is released, no other keyboard scans are acknowledged unless a later scanned key is struck. The later scanned key is then considered to be the next key closure. The algorithm does not give classical N key roll over but does allow for legitimate rejection of noise and trapping of the keys in the order that they are struck. > The keyboard is left scanning the last row, which contains the stop key. This allows the routine in BASIC, that checks for the stop key to sample the input I/O device, without having to perform any of the normal functions of scanning. The user can take advantage of this by reading the input character for that row.