[HN Gopher] How the C64 Keyboard Works
       ___________________________________________________________________
        
       How the C64 Keyboard Works
        
       Author : ibobev
       Score  : 96 points
       Date   : 2023-03-04 13:30 UTC (9 hours ago)
        
 (HTM) web link (c64os.com)
 (TXT) w3m dump (c64os.com)
        
       | logbiscuitswave wrote:
       | This was a really great and well-explained article. For an
       | article that went deep into hardware internals, it somehow made
       | it all make perfect sense. Kudos to the writer.
       | 
       | It's pretty fascinating just how "dumb" the keyboard is and how
       | keyboard input is actually being polled. It seems like this could
       | easily lead to missed key presses or slow response, but I don't
       | recall the C64 keyboard suffering from either of these things.
       | (It's been some years since I last used a real C64 though.)
       | 
       | Yet, somehow on an exponentially more powerful and capable modern
       | computer it seems that things like instant input response and no
       | missed key presses is somehow asking for a lot.
        
         | tyingq wrote:
         | > somehow on an exponentially more powerful and capable modern
         | computer it seems that things like instant input response and
         | no missed key presses is somehow asking for a lot
         | 
         | I would guess there's still an 8bit CPU polling the keyboard
         | matrix, only inside the now separate keyboard. That being the
         | first layer, it can only get slower as it traverses all the
         | other, new layers.
        
       | Aldipower wrote:
       | The 6526 (CIA) was the first chip I could fix by replacing the
       | broken one to another functioning one. Those CIAs are at high
       | risks, because they are directly connected to the 2 joystick
       | ports of the C64. You just need to touch some pins at the port
       | and you probably grill your CIA with static electricity.
       | Unfortunatly the CIAs getting rarer and rarer, because the cannot
       | reproduced by FMPGs until today, so you need to get a space CIA
       | from another machine. Maybe in the future this will work with
       | replications.
        
         | Findecanor wrote:
         | One thing that people do to break the first CIA chip is to
         | connect a gamepad from a Sega Master System or for the Mega
         | Drive/Genesis. They work fine on other systems that accept
         | "Atari-compatible" joysticks, such as the Atari VCS, Atari
         | 8-bit, Amiga, etc. so you'd think they'd work fine here too,
         | but no.
         | 
         | Sega had put the pull-up resistors in the controller instead of
         | on the motherboard, thus providing positive current on each
         | input pins when a button/direction is not pressed. But for the
         | C64, the inputs are supposed to be disconnected when not
         | active, and when CIA #1 is reading the keyboard, the extra
         | current could overload the chip. You could make an adaptor
         | though with a diode on each input line. (The adaptor should
         | also route Vcc to pin 5 which is Sega's Vcc pin)
        
         | rollcat wrote:
         | Recently an entire C64 was built from scratch using modern
         | parts, I think there were some FPGAs involved. It's unfortunate
         | that the design is so brittle (maybe good idea to mod a
         | protective shutter), but I wouldn't worry about future
         | repairability.
         | 
         | Also TIL that C64OS is a thing. Maybe C64 is the design we
         | should be looking into when considering permacomputing.
        
           | Aldipower wrote:
           | https://news.ycombinator.com/item?id=34389496 Hey, if you
           | referring to this video, I made a comment there that the CIAs
           | are straight out of the eighties. It was a little bit
           | clickbait. The C64 was build from scratch, but not all parts
           | were freshly made.
           | 
           | Absolutely the C64 is a thing for permacomputing, haha.
        
       | psadri wrote:
       | I had a C64 in Iran when I was 12. After a few years, a column of
       | keys on the keyboard stopped working. So, every time I turned it
       | back on, my first task was to remap some critical keys to the
       | function row keys.
        
         | Aldipower wrote:
         | This is a typical phenom if you grilled one of your CIAs by
         | touching the joystick ports.
        
       | peter_d_sherman wrote:
       | >"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 wrote:
         | This 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)...
         | (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._
        
       | bullen wrote:
       | How does shift-lock work?
       | 
       | NM: https://twitter.com/gregnacu/status/1632080241316225027
       | 
       | What about restore?
        
         | rzzzt wrote:
         | Restore is wired to the NMI input of the CPU. It is also
         | pressure-sensitive ;)
         | 
         | https://www.c64-wiki.com/wiki/RESTORE_(Key)
        
       | ryandrake wrote:
       | Cool article that goes into a little depth on the humble, handy
       | 6526. The 6510 and 6581(SID) always win the popularity contests,
       | and there's a lot of ink spilled over them, but it's nice to deep
       | dive on the other very interesting parts of the C64!
       | 
       | I'm always amazed how fewer and fewer "computer science"
       | graduates every year have ever wire-wrapped a simple 68000
       | computer from scratch, hooked it up to RAM, ports, a bunch of
       | LEDs for output and so on. Or even an already-wired
       | microcontroller. Fewer and fewer computer professionals really
       | know how these things work and have made them work by their own
       | hands. Maybe the Raspberry Pi has re-kindled some of this
       | interest, but I wonder how many people use it as just a cool-
       | looking tiny PC and how many actually play with the GPIOs.
        
         | anon946 wrote:
         | I'm a professor at a R1 university in the CS dept. I wire-
         | wrapped a PDP-8 in school as part of a CS degree, and thought
         | it was super-interesting and fun, and part of me agrees with
         | you.
         | 
         | But the reality is that you can only cram so much into a 4-year
         | degree and wire-wrapping a 68000 seems like it would take many
         | hours. I already feel like there is so much that we are leaving
         | out. For example, our undergrads don't implement a compiler as
         | part of their degree.
         | 
         | *EDIT: Also, it's arguably more computer engineering than
         | computer science, but the my main point is that the undergrad
         | CS curriculum is already super-crowded.
        
         | zabzonk wrote:
         | > I'm always amazed how fewer and fewer "computer science"
         | graduates every year have ever wire-wrapped a simple 68000
         | computer from scratch
         | 
         | perhaps this might explain why it is no longer popular:
         | 
         | https://en.wikipedia.org/wiki/Wire_wrap#/media/File:Computer...
         | 
         | and that's for an 8-bit cpu. i can't imagine wire-wrapping a
         | 68000.
         | 
         | also, this would be computer engineering, not computer science.
        
           | galangalalgol wrote:
           | There are plenty of computer science, not engineering,
           | programs that still have required classes that involve wire
           | wrapping a uc and building something. It is less common as
           | the voracious appetite of the web and web related industry
           | for cs grads caused curriculum to become increasingly geared
           | towards meeting that need. I still find it astounding how
           | much software is required to keep all rhe websites I use
           | running. It doesn't make sense to me, but I know very little
           | about how that sort of software works, so I will simply trust
           | that some of the largest companies in the world wouldn't be
           | paying for it if there was an easier way.
        
           | hungryforcodes wrote:
           | Relevant link:
           | 
           | https://www.yikes.com/~bear/wirewrapping.htm
        
           | derriz wrote:
           | In college, we had to wire wrap an 8-bit (6809) CPU with an
           | EPROM and UART to connect a terminal. It looked nothing like
           | your image. A 16 bit address bus, 8 bit data and only
           | RAM/ROM/UART sharing the "bus" meant that the wiring was
           | actually quite neat and it was transparent what wires were
           | doing what. Inevitably, part of the work involved diagnosing
           | poor wraps which would clearly be impossible with that pile
           | of spaghetti in your image. It was one of the most fun
           | projects we had in the 4 years. I thought it very valuable as
           | it brought software (writing a simple monitor using a cross-
           | compiler) and hardware together.
        
       ___________________________________________________________________
       (page generated 2023-03-04 23:00 UTC)