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.

OPTION 1: Wired Serial I/O Translation

With this approach, you can use a terminal program on a laptop or PC and “serialize” inputs directly into the keyboard plug on the IBM 5100/5110. This approach works with either the Arduino or ESP32.

See KBD5110 project on github for corresponding code. This will also work for the IBM 5100, but uses different scan codes on the keyboard.

Below is a reference to wiring things up using the Arduino Nano. The other larger Arduino devices can also be used (Mega and Uno).

IMPORTANT NOTE: The Arduino Nano in the diagram below is “face up” (with the white reset switch and green light facing you and the connected wires on the pins located on the opposite side).

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.

NOTE: The 330 ohm resistors are inline with the wires between the Arduino and IBM 5110 keybord connector (which is why the colors change between pins).

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). Either connection works or they can also be used at the same time.

Here is an example of setting up ZOC: (remember to close the serial connection in Arduino Monitor after a firmware upload — and vice versa, close the connection in ZOC to upload a new revision of the translation firwmare)

ZOV has a feature to “Transfer|Send Text File…” The sample program was set to connect to the serial at 38400 baud but it still may be possible to type “too fast.” ZOC has additional settings that can be used to adjust the rate that a text file is sent:

OPTION 2: Wireless Connection (ESP32 Bluetooth)

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). Install VScode and seek out ESP-IDF plugins. The Command Palette in VScode in CTRL-SHIFT-P.

Fortunately, the ESP32 device 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 this setup 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: