Alps / Genovation KPX-17
Posted: 04 Oct 2020, 04:05
Following on the recent conversion of some external numpads built by Mitsumi for Toshiba and Compaq that minimized space by only having a mono sub-mini audio jack, I dug around in the work pile for other interesting approaches from around the same time, the early '90s. One such is to use connectors that the laptop already had: almost all PCs around then would have had serial and parallel ports. And so did the super-heavy laptops.
Here are two variations of the Alps / Genovation KPX-17, one serial and one parallel. Each variant came in two colors, black and ivory, making for a total of four products.
The switches are complicated cream Alps. The matrix is a separate module, KP-17, manufactured by Alps. With its convenient connector, it's easy enough to interface directly to the switch module. I used a Pololu AStar Micro, since it has ten data pins on one side, making it easy to solder on a compatible header. The combination would fit back into the original case, if one wanted.
Other than using RS-232 levels instead of TTL, the serial version is like many other keyboards of the time. Each key sends a unique 7-bit code which also changes depending on the state of the Num Lock LED. Num Lock both toggles this LED and sends a code. There does not appear to be any way to change the LED state using the serial line. Which means that it might be more convenient to assign Num Lock to a layer of its own if the main keyboard also has a Num Lock key + LED. There are no break codes.
A converter needs a level converter like the MAX232 or MAX3232. These are available as breakout boards with a D-sub connector, which works nicely with a smaller ATMEGA32U4 like the Piksey Atto. The parallel version is much more interesting. The controller board is made by Genovation. The whole external keypad was also sold with Genovation branding as the Micropad 621.
A DB-25 has eight more conductors than the keypad has keys. Even if you allow that eight of those are all ground, that's still one more. So if it weren't for the parallel port interface, they could be separate switch signals.
The board was evidently designed to work with an original output-only parallel port. Which makes sense from the date and that it was not associated with any specific laptop model.
The first issue is power. A parallel port does not have any supply voltages, expecting that both the computer and the printer are powered. Oddly enough, this is very much the same problem as the "one-wire" Mitsumi keypads had. The solution here is to connect each of the data lines to a diode and current-limiting resistor and connect all of those to a common Vcc for the circuit. Provided that a majority of the data lines are kept high all the time, the small bit of logic is powered. That will inform the protocol.
Someone had the job during manufacture of using a rotary tool to deface the tops of the active chips, which are presumably 74-series TTL. This makes it hard to say exactly what the part numbers are, but not what they do. They clearly include a de-mux and a counter. Two of the counter signals go to parallel data pins. Several others go to the de-mux. Which suggests that one strobes a data line to advance a row or column number. Likewise several other data pins go to the matrix, making them the column or row. (Turns out, by experimentation, that they are column and row, respectively.)
Only two parallel status lines are connected back to the parallel port, SELECT and ERROR. So one of those, or both, is how you tell when the key at the current position is pressed. (Turns out it's ERROR. SELECT seems to signal that any key was pressed, but that's not important if there is a scanning loop.)
The converter just needs a Teensy and a DB-25, with an output data port PORTB and the two input pins. Keeping those separate from RX means that a single board with enough connectors could do both KPX-17S and KPX-17P. The predefined QMK firmware variants build them separately, though.
Here are two variations of the Alps / Genovation KPX-17, one serial and one parallel. Each variant came in two colors, black and ivory, making for a total of four products.
The switches are complicated cream Alps. The matrix is a separate module, KP-17, manufactured by Alps. With its convenient connector, it's easy enough to interface directly to the switch module. I used a Pololu AStar Micro, since it has ten data pins on one side, making it easy to solder on a compatible header. The combination would fit back into the original case, if one wanted.
Other than using RS-232 levels instead of TTL, the serial version is like many other keyboards of the time. Each key sends a unique 7-bit code which also changes depending on the state of the Num Lock LED. Num Lock both toggles this LED and sends a code. There does not appear to be any way to change the LED state using the serial line. Which means that it might be more convenient to assign Num Lock to a layer of its own if the main keyboard also has a Num Lock key + LED. There are no break codes.
A converter needs a level converter like the MAX232 or MAX3232. These are available as breakout boards with a D-sub connector, which works nicely with a smaller ATMEGA32U4 like the Piksey Atto. The parallel version is much more interesting. The controller board is made by Genovation. The whole external keypad was also sold with Genovation branding as the Micropad 621.
A DB-25 has eight more conductors than the keypad has keys. Even if you allow that eight of those are all ground, that's still one more. So if it weren't for the parallel port interface, they could be separate switch signals.
The board was evidently designed to work with an original output-only parallel port. Which makes sense from the date and that it was not associated with any specific laptop model.
The first issue is power. A parallel port does not have any supply voltages, expecting that both the computer and the printer are powered. Oddly enough, this is very much the same problem as the "one-wire" Mitsumi keypads had. The solution here is to connect each of the data lines to a diode and current-limiting resistor and connect all of those to a common Vcc for the circuit. Provided that a majority of the data lines are kept high all the time, the small bit of logic is powered. That will inform the protocol.
Someone had the job during manufacture of using a rotary tool to deface the tops of the active chips, which are presumably 74-series TTL. This makes it hard to say exactly what the part numbers are, but not what they do. They clearly include a de-mux and a counter. Two of the counter signals go to parallel data pins. Several others go to the de-mux. Which suggests that one strobes a data line to advance a row or column number. Likewise several other data pins go to the matrix, making them the column or row. (Turns out, by experimentation, that they are column and row, respectively.)
Only two parallel status lines are connected back to the parallel port, SELECT and ERROR. So one of those, or both, is how you tell when the key at the current position is pressed. (Turns out it's ERROR. SELECT seems to signal that any key was pressed, but that's not important if there is a scanning loop.)
The converter just needs a Teensy and a DB-25, with an output data port PORTB and the two input pins. Keeping those separate from RX means that a single board with enough connectors could do both KPX-17S and KPX-17P. The predefined QMK firmware variants build them separately, though.