IBM 5100 (Keyboard Replacement)


Keyboard Replacement

This is a summary of notes as originally discussed here.

The IBM 5100/5110 keyboard communicates across a parallel set of 10-wires: 8 data, 1 strobe, and 1 parity. With just a set of 330 Ohm resistors, we can use a modern Arduino Nano or ESP32 (or similar device) to replicate keyboard inputs. The following is how the Arduino Nano was used:

(see KBD5110 project on github for corresponding code; this will also work for the IBM 5100, but uses different scan codes on the keyboard)

What you have now is a “terminal translation” device. You connect a modern PC/laptop to the Nano via a USB connection. Using a terminal program (like ZOC, or the simple terminal built into the Arduino IDE), as you type in the terminal, a program on the Nano interprets the typed commands and translates them into 10-bit scan codes that get relayed into the IBM 5100/5110. Below is an example of what this looks like with a Nano (attached on A1 board side) and Mega (attached in the standard keyboard input plug). Both have the 330ohm resistors inline (except on the ground wire).

However, I did not find a stable USB support for the Nano (or Arduino Mega). I’m sure it exists, just with the time I had, no solution really came together for me (either I didn’t solder the small power jumpers correctly, or the example software didn’t cooperate with the firmware being used).

I tried a Raspberry pi, but the models I had were not 5v tolerant.

I also tried a STM32 (also called “blue pill” or “black pill” depending on variant), but the model I got did not have enough GPIO pins.

The Adafruit Trinket M0 has only 5x GPIO pins.

Thanks for forum contacts, I was eventually steered towards the ESP32 products. There is a confusing variety of them and the VScode development environment is a little intimidating at first (you just have to have faith on some online guides to step you thru the process). Fortunately, it is 5v tolerant, so it can work with the IBM 5110 power inputs. With a little tinkering, it works equally as well with the terminal connection (like the Nano), but also has a working Bluetooth support. The code for this (and corresponding pins) are in the same github reference mentioned earlier. Here is what it looks like (the green ground wire is not in the correct position in the image below, but doesn’t matter when using USB as the power source):

While it doesn’t look like much, the big deal is that the Bluetooth keyboard was paired with the ESP32, and everything on the screen was input using the wireless Bluetooth connection.


Leave a Reply

%d bloggers like this: