So where are we up to? By the end of Part 1 I'd covered the printing of the Educator 64 Mini Case and very briefly mentioned sending a keyboard PCB of for manufacturing. This time around I'll get into the design of the keyboard and detail some additional modifications I've made to Lorenzo Herreras' Commodore PET Mini.
Mini Keyboards for Tiny LCDs
On the whole I've not diverted much from the general design of the Commodore PET MINI. The main inclusion is that of the working keyboard, I did however choose to make things slightly easier where possible in other respects.
As I was going to be ordering a PCB for the keyboard I decided I might as well design an extra PCB that would plug into the back of the LCD panel. Lorenzo's PET screen design has you dissecting a ribbon cable, then hand wiring the various bits to the back of the the Waveshare LCD screen. To much effort I thought, a nice little PCB would save all that hand rerouting trouble. I also thought mounting a reassuring yellow glowing LED at the back night add some CRT realism (or not, turned out you can't really see it once installed, oh well).
LCD Mounting PCB |
I addition to the LCD mounting PCB I took the opportunity to deign and order a Pi Zero sized prototyping board which extended the pin header out and added had just enough space to the end of the board for some diodes and the like. The board was a bit of an after thought, although as it turned out I needed it.
Keyboard Design
There's no shortage of people out there hacking old Commodore 64s and making
them work with modern equipment. One of the largest set of modifications to
dead 64s is in the re-purposing of their keyboards for use with emulators.
To this end the schematics for the 64s keyboard are well know and have been
pretty convincingly documented by Simon Inns on his page
Waiting for Friday. Simon interestingly points out that the official Commodore Keyboard
Schematic is wrong; that certainly spared me some confusion as not having a
64 myself I had nothing else to go by other than the published designs.
I made one minor change to the keyboard schematic; the inclusion of a jumper
allowing the SHIFT LOCK key to be placed on the same Column as the Restore Key, or in its normal state as an extra LEFT SHIFT key. On a Commodore 64 keyboard
the SHIFT LOCK actually locks in place if pressed, this functionality isn't possible with
the TAC switches I planned on using, so I opened the option to simulate that behaviour in
software latter (This option wasn't to be, read on).
With a known working layout for a Commodore keyboard to hand, all that need to
be done was getting all to fit onto a 105x38mm PCB. As mentioned in Part 1 I'd found
the perfectly sized switch in the
KMR431G
which has a footprint of 4.2mm x 2.8mm. The resulting layout mimics the design
of a full sized Commodore keyboard. As there are to be no keycaps, Legends
are printed on the PCB, some additional PCB styling gives the impression of
a full space bar and a silk screened separator between the main keyboard and function keys implies the existence of the metal or plastic case shroud.
The Commodore Educator 64 Mini Keyboard PCB |
Reading the Keyboard
My initial plan was to use an Arduino Proc Micro acting in HID mode for
decoding the keyboard inputs and passing key presses onto the Pi. The other option I'd considered was procuring a
Commodore USB Keyboard Kit from Tynemouth Software. Both of these methods required a spare USB port on the Raspberry PI,
being that by this time I'd decided to us a Pi 3A+ for the project (which only
has one port) I really didn't have a USB port to spare, particularly if I need
to connect another device such as a joystick.
A long time ago for the AZ15 build I'd considered connecting a ZX81 matrix
keyboard directly to a Pi, but thought the method a little to cumbersome
and unreliable. What I couldn't find at the time was a good way of sending key
presses back to the LINUX kernel, sure you could detect a keypad, but only
in the active program doing the decoding, not much use for emulators.
Fortunately time passes and things get developed and now there are off the
shelf solutions.
Enter an article in
The MagPi
Page 25 by PJ Evans, where he describes, and provides many of the
necessities required for reading a ZX Spectrum Keyboard directly, then injecting those key presses back into the LINUX kernel. This Sounded just
the ticket for the Commodore Educator keyboard, All that's needed are some software libraries,
libsuinput
for handling the kernel injection, and
wiringpi to run some
keyboard scanning code. The only possible road block being the availability of enough free GPIO
ports to handle the Commodore Keyboard.
Mapping Raspberry Pi GPIO pins to the Waveshare LCD and C64 Keyboard |
At a minimum we need 17 free GPIO ports to read the c64 keyboard (without
worrying about multiplexing), 8 Data lines, 8 Address lines and 1 for
detecting the RESTORE key. In reality I has hoping for 18 spare GPIO pins
so we could enable SHIFT LOCKing. After consulting the
Waveshare LCD manual
it appeared all requirements could be met, but appearances can be
deceptive.
Out of 28 GPIO pins the LCD panel uses 8, leaving 20 pins. Not so fast,
GPIO23 is taken when using analogue audio (which we need) and on testing I
also found GPIO27 and GPIO22 also seemed to be in use by the LCD panel.
That left 17 ports. However GPIO14 & 15 are used as serial lines,
that's now down to 15 ports. Fortunately serial can be disabled in the
/boot/config.txt file. Phew, we have just enough ports free
without having to stuff around with multiplexing.
The rather messy prototyping Board full of Diodes |
To get things moving along I wired up my prototyping PCB much as documented in The MagPi article, I adjusting the data and address lines (see earlier image above). I then downloaded the required zxscanner code by PJ Evens, modifying sufficiently to accommodate the C64 keyboard, the result a working keyboard.
Testing the tiny Commodore 64 Keyboard |
That is of course just the start, I still need to go back though the zxscanner code and turn it into c64scanner code. As it stands zxscanner is just that, it's geared towards ZX Spectrum emulators, Commodore emulators such as Vice take a somewhat different path when mapping keys from PC-like keyboards and that is something we can tackle in Part 3.
C64 Keyboard Installed and some final Decals Added to the Case |
Until the next article here's a quick preview of the keyboard in action: