This is not finished project and still work in progress as of 2020-03-02. Test in the field and feedback from users are needed to improve firmware code.
- IBM Terminal converter: http://geekhack.org/index.php?topic=27272.0
Keyboard supported
------------------
- PC XT keyboard of IBM 5150 5160
- 83-key: 1501100 1501105
- PC AT keyboard of IBM 5170
- 84-key: 6450200 6450225
- PC Terminal keyboard of IBM 5271(3270 PC)
- 122-key: 6110344 6110345 1397000
- 102-key: 1390680 1395764 1392595
- PS/2 keyboards(AT+CodeSet2)
- Clones of above models
Hardware
--------
Firmware supports ATMega32u4 and ATMega32u2 by default, Teensy2 or ProMicro can be used.
Wire controller pins below to keyboard signals, besides VCC and GND. This is compatible for Soarer's converter.
- Data PD0
- Clock PD1
- Reset PB6 or PB7 (For some of XT keyboards. Not needed for AT, PS/2 and Terminal)
Pull up resistors of 1-4.7K Ohm on both Data and Clock line are recommended, without them it won't work in some cases.
### Reset
Old Type-1 IBM XT keyboard and some of XT clones need this to reset its controller on startup. Many of IBM XT keyboards available are Type-2 and don't need the reset pin.
This section explains how the converter determines proper protocol and scan code set for keyboard. The converter need to do that before starting to receive and translate scan codes from keyboard.
### Keyboard ID
After startup the converter sends 0xF2 command to get keyboard ID and sees how the keyboard responds to the command.
Response from keyboard:
- XT keyboard doesn't support any command and returns no response.
- AT keyboard should respond with 0xFA to the command but returns no keyboard ID.
- PS/2 keyboard should respond with 0xFA to the command, followd by keyboard ID, such as 0xAB86.
- Terminal keyboard should respond with 0xFA to the command, followed by keyboard ID, such as 0xBFBF.
Now we can dscriminate the keyboard and determine suitable protocol and scan code set as described below.
### Protocol
- Signals from XT keyboard are recognized by XT protocol.
- Signals from AT, PS/2 and Terminal keyboard are recognized by AT protocol.
### Scan code Set
- Scan codes from XT keyboard are handled as CodeSet1.
- Scan codes from AT and PS/2 keyboard are handled as CodeSet2.
- Scan codes from Terminal keyhboard are handled as CodeSet3.
Debug
-----
Use hid_listen to see debug outputs from the converter.
https://www.pjrc.com/teensy/hid_listen.html
Resources
---------
IBM PC Keyboard Protocol Resources:
[a] [Microsoft USB HID to PS/2 Translation Table - Scan Code Set 1 and 2](