IBM Model M USB Controller - antonizoon/antonizoon.github.io GitHub Wiki
A drop-in Teensy USB replacement controller for the aging IBM Model M, F/AT/XT/Terminal, and Wheelwriter Buckling Spring Keyboards.
The IBM Buckling Spring keyboards are widely regarded as the best keyboards ever built. They were designed to emulate the feel and sounds of an IBM Selectric typewriter, and were bundled with every IBM PC (AT, XT, PS/2) as well as IBM Terminals.
However, the Model M's PS/2 keyboard socket is an aging format, long since superseded by the all-purpose USB port. You need an active PS/2 converter to USB, a passive one will not work. The Model Ms are getting rarer and more expensive with every passing year. And that's if your keyboard is lucky enough to have a PS/2 socket:
- The AT Model F keyboards require a special adapter to PS/2 jacks. They also have a secret full NKRO ability, that simply cannot be realized through the PS/2 jack.
- The Model M Terminal RJ-45 keyboards (which can be found for dirt cheap at $10-25) use an RJ-45 plug that is totally unusable with modern computers and cannot be converted.
- The IBM Wheelwriter Series of typewriters don't even have keyboard output of any kind. They're typewriters.
Most importantly, the old keyboard controller inside is beginning to show it's age, and the keymaps are not customizable.
Thus, this project aims to build, test, and mass produce a Teensy/Arduino USB Keyboard controller, for use as a drop in replacement into any IBM Buckling Spring keyboard. Not to mention that a modern controller board removes all the overhead of a PS/2 converter, and allows customizable key layouts (especially useful if you have a F13-F24 row!).
This way, you can buy a dirt cheap RJ-45 IBM Terminal keyboard for $10-25, and pop in this $40 USB controller board, giving you a buckling spring keyboard for half the price of a comparable Model M.
A custom USB Controller board for the Model M ranks as one of the top 10 most wanted mods for the IBM Buckling Spring Keyboards.
Inspirations
The user Phosphorglow from Deskthority made a similar complete controller (with matrix) for the IBM Model M. It's just a matter of wiring together the membrane and a Teensy dev chip, using a breadboard and off-the-shelf Trio-mate membrane socket. You can even set your own custom keys by modifying the firmware.
I modified his controller to work with a gutted IBM Personal Wheelwriter 2, that I bought for $10 and gutted for an Accurate Emulation Arcade.
Model M and Wheelwriter Keyboards
This controller is for IBM Buckling Spring keyboards that use a membrane Trio-mate connector. No soldering required, just unplug it from the old controller and plug it into our USB Controller.
Supported Models:
- IBM Model M (PS/2 Port) - The standard Model M keyboard that everyone knows and loves. It was bundled with the IBM Personal/System 2.
- IBM Model M (RJ-45 Port) - A Terminal variant of the Model M which looks exactly the same, but has a RJ-45 jack that cannot be used with a computer, and has no Caps Lock/Num Lock LEDs. But just plug in this USB Controller and it's rescued from obsolescence. You can usually find one of these for $10-25, since nobody wants them.
- IBM Wheelwriter - The best typewriter ever made in the 80's and 90's. It's keyboard uses the same kind of Trio-mate membrane connector, with 14 pins and 8pins (and two 15 pin sockets due to useless loopback leads). I grabbed a broken Wheelwriter, stripped out the broken parts, and used the massive space within as a base for an Accurate Emulation Arcade. I could even convert it into a gaming rig case, with lots of room; and put the monitor on top of it.
- PLEASE, FOR THE LOVE OF GOD, DO NOT RIP OPEN A WORKING WHEELWRITER. If you find a working one at a thrift shop, sell it on eBay for $100-250. Don't reduce the supply of these valuable typewriters. You can get a broken one for dirt cheap on eBay, and the keyboard will always work, regardless of whether the carriage is broken or the silicon is toast.
How it works
Basically, all we do is wire up the membrane to the Teensy. Then we upload Soarer's keyboard controller and a custom configuration to the Teensy. Yes, that's all you need to do; the magic of the Arduino.
The membrane on the IBM Model M and Wheelwriter keyboards use Flexible Flat Cables for output. They are 0.1 in (2.54 mm)
in spacing, perfect for breadboards or perf boards!)
There's no need to desolder the FFC sockets from the original controller, just buy some new ones. These sockets are known as "Trio-Mate connectors", and are extremely easy and cheap to find.
Parts
The components should cost about $40:
- $15 - Teensy 2.0 (Arduino Clone) - A cheap, tiny, and simple Arduino board with GPIO headers. The Teensy is used because it can report to the computer as a USB HID device, so it works just like any USB keyboard.
- $3 - Pro Micro (Arduino Clone) - Alternatively, we could use a Pro Micro, which is significantly cheaper than a Teensy. However, you get what you pay for; there's fewer outputs and it requires some pin shorting and command line tools to program with. But it's good for cost cutting.
- $3 - Trio-mate 16pin (2.54mm Pitch)
6-520315-6
or6-520415-6
- The keyboard membrane connects to the controller using these common, cheap Trio-Mate sockets. You can find them on Mouser: 315 / 415 or RS-Components.- The socket is one pin bigger than you need, so just push the ribbon cable toward the left and leave the 16th pin unconnected. Unfortunately, even though the IBM Keyboards use 15-pin, TE Connectivity no longer produces them. Mouser's lead time for them is 17 weeks! You might as well use a 16-pin socket instead, and just leave the extra pin unconnected. Alternatively, if you have a Wheelwriter, you can slice off the first (unused) pin and connect it to a 14-pin socket.
- Also, if you're using a breadboard, you might want to hot glue the Trio-mate to the board, since the PCB pins are too short to sit well on a breadboard. Hot glue is easy to apply, easy to remove.
- For a more permanent fit, buy and solder on some angle header pins to the Trio-mate connector.
- $2 - Triomate 8pin (2.54mm Pitch) - The second segment of the keyboard plugs into an 8-pin Trio-mate socket. These come in
5-120628-8
locking and5-520314-8
non-locking variants. Note that on most Wheelwriters, there are 7 extra pins on the right which uselessly loop back: just carefully cut them off (or use another full 15-pin socket).- These are produced by TE Connectivity and can be found on Mouser, RS-Components, or Master Components.
- Electronics - For quick and dirty prototyping, I first designed and debugged the setup on a solderless breadboard. Later on, I can use Adafruit's solder board, or I can get a PCB printed for $9 apiece.
- $5 - Breadboard - A simple plastic setup where all the vertical wires are connected. Unfortunately, the Trio-mate connectors have very short header pins, so use some kind of IC Socket to raise them up.
- $5 - Adafruit PCB Breadboard (Alternative) - A more permanent, thinner, professional looking PCB-style breadboard, where you solder in the wires. All the thin permanence of a PCB, with the freedom of a solderless breadboard.
- $9 apiece - Custom-printed PCB (Alternative) - This is beyond my ability, but you can send a PCB design to small-run manufacturers for resale. I might actually try to sell some IBM Model M USB controllers if I figure everything out. Though it might just be better to use the Adafruit PCB, since the wiring is so simple...
- Breadboard Jumper Wires - Easy to use; just plug them in and go.
- Resistors - Not sure how many, but these are used to modify the strength of electronic signals.
- $5 - Breadboard - A simple plastic setup where all the vertical wires are connected. Unfortunately, the Trio-mate connectors have very short header pins, so use some kind of IC Socket to raise them up.
Plugging it in
Photo Credit: Sethstorm, should probably make my own
Teensy 3.0 Pinout:
(to the cable socket, in left to right order)
Strobe pins, 13 pin strip (1 = leftmost pin as pictured above)
1 : D0
2 : D1
3 : D2
4 : D3
5 : D4
6 : C0
7 : C1
8 : C2
9 : C3
10: C4
11: C5
12: C6
13: C7
Sense pins, 8 pin strip (1 = left most pin)
1: F0
2: F1
3: F2
4: F3
5: F4
6: F5
7: F6
8: F7
Teensy 2.0 Pinout
Since I only had a Teensy 2.0 on hand (which has fewer pins), I had to make do with this layout:
Strobe pins, 13 pin strip (1 = leftmost pin as pictured above)
1 : D0
2 : D1
3 : D2
4 : D3
5 : D4
6 : C0
7 : C1
8 : C2
9 : C3
10: C4
11: C5
12: C6
13: C7
Sense pins, 8 pin strip (1 = left most pin)
1: F0
2: F1
3: F2
4: F3
5: F4
6: F5
7: F6
8: F7
Since the Teensy 2.0 is very short, some pins are placed in inconvenient locations. I simply solder a header pin pointing up, and use a F-M jumper pin to
Creating the Teensy Firmware
[Sethstorm from Geekhack already made a Wheelwriter to Teensy Matrix map for Soarer's Firmware here](http://geekhack.org/index.php?topic=55676.msg1372033#msg1372033).
- First, install the Teensy Loader, and check if you can load firmware to the Teensy.
- Next, download and extract a copy of Soarer's Firmware. Just paste this as the configuration and go.
#
# Wheelwriter 5 Matrix (ISO Enter)
# A sane, yet minimalist layout.
#
# Layout Notes:
# Layout mostly follows AT(Ctrl between Tab/Left Shift, Caps Lock below Right Shift) aside from ISO Enter/F11/F12.
#
# Top two keys in the 5-key vertical block are PgUp/PgDn respectively.
# Bottom two keys in the 5-key vertical block are F11/F12 respectively.
#
# The middle key in the 5-key vertical block on the right can be used as follows:
# [Modifier]-WASD : Cursor keys (Up/Left/Down/Right)
# [Modifier]-[Number key] : Equivalent numpad key
# [Modifier]-[Backspace] : Del (for those wishing to perform Ctrl-Alt-Del, use Ctrl-Alt-Modifier-Backspace)
# [Modifier]-[PgDn] : Left Win/GUI key
# [Modifier]-[`] : Escape key
#
matrix
scanrate 1
debounce 5
blocking 0
sense PF0 PF1 PF2 PF3 PF4 PF5 PF6 PF7
strobe PD0 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED LALT
strobe PD1 F10 F7 F1 F3 F4 F5 F11 SPACE
strobe PD2 F9 F8 F2 UNASSIGNED TAB F6 LCTRL CAPS_LOCK
strobe PD3 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED LSHIFT
strobe PD4 UNASSIGNED A BACK_QUOTE 1 Q UNASSIGNED Z 8
strobe PC0 UNASSIGNED S UNASSIGNED 2 W UNASSIGNED X I
strobe PC1 UNASSIGNED D UNASSIGNED 3 E UNASSIGNED C K
strobe PC2 G F 5 4 R T V B
strobe PC3 H J 6 7 U Y M N
strobe PC4 UNASSIGNED K EQUAL_SIGN 8 I RIGHT_BRACE COMMA I
strobe PC5 UNASSIGNED L 3 9 O 5 PERIOD 6
strobe PC6 QUOTE SEMICOLON MINUS 0 P LEFT_BRACE BACKSLASH SLASH
strobe PC7 UNASSIGNED FN2 BACKSPACE PAGE_UP PAGE_DOWN 6 ENTER F12
end
macroblock
endblock
layerblock
FN2 2
endblock
remapblock
layer 2
W UP
A LEFT
S DOWN
D RIGHT
BACKSPACE DELETE
BACK_QUOTE ESC
PAGE_DOWN LGUI
1 PAD_1
2 PAD_2
3 PAD_3
4 PAD_4
5 PAD_5
6 PAD_6
7 PAD_7
8 PAD_8
9 PAD_9
0 PAD_0
endblock
Mass Production
If I felt like mass-producing these Model M USB controller boards, I could choose to hand-wire and solder onto a bunch of Adafruit PCB Breadboards. One great coincidental feature of these breadboards is that they slide right into the existing Model M standoffs.
Alternatively, I could have silicon PCB boards with the wires custom printed. This way, I don't have to use any large wires, and it takes less work. Just solder in the Triomates, plug in a Teensy with header, and you're good to go.
I bet they will be popular around geekhack for a definitive and easy USB conversion for IBM Model M devices.
IBM Model F
The IBM Model F does not use a flat membrane Trio-mate connector, unlike the Model M and Wheelwriter boards. Unfortunately, it's keyboard ribbon is soldered directly to the board itself.
XWhatit has a Grand Unified IBM Capsense USB Controller board just for this purpose. Just desolder the Model F membrane connector, solder it to this connector, and you're done. Though that's if you can even obtain one, or if you can build one (through the difficult processor of soldering tiny resistors).
There has to be a Teensy-based Alternative... It replaces all the little electronics with just one $15 board.
Schematic
- Should be very similar to the Retroconnector, just using a Teensy 2.0 instead, and Triomate sockets.
Advanced NKRO Mod
The earliest IBM Buckling Spring keyboards, the Model F, had full NKRO; you could press every key on the keyboard and it would register. (nowadays, it requires this USB controller to unlock that ability)
Unfortunately, with the Model M keyboard, IBM decided to cut costs and only allow two to three characters to be printed at a time, regardless of how many keys you press.
While most typists won't notice the difference, the lack of NKRO can hamper the fastest typists. NKRO is also incredibly important for gamers, who use the WASD combination to move around.
If you already have a Model M, and really want to get deep into the workings of the keyboard for a difficult, but rewarding mod; the No-key RollOver Mod (NKRO) is for you. But if you're just a random guy wanting a buckling spring keyboard with NKRO, just buy a Terminal Model F RJ-45 board, and drop in our USB Controller.
Sources
- Deskthority Forums - Model M Matrix Teensy
- Deskthority Forums - Matt3o: Workshop Threads
- Deskthority Forums - Soarer's Controller
- Deskthority Forums - Need a part for a connector on IBM Model M Controller Board
- Deskthority Forums - Converting IBM Wheelwriter 5000 for PS/2
- Adafruit - Convert IBM Model M Keyboard to Bluetooth
- YouTube - MrInterface Tutorial - Soarer's Protocol Conversion