My “Battlecruiser” Keyboard
My latest acquisition is a genuine IBM Model M 122 built in Scotland in 1997.
The nickname of this model is “Battlecruiser”, and you can see why. It is a large keyboard with the famous “Buckling Spring” keybed. I have a couple of Unicomp buckling spring keyboard, but this very much original model is different; the springs simply “sing” when used.
Now, this keyboard was purchased off of eBay as both “New and unused” and sold “as-is”. The truth is that is was, for the most part, unused, but it did have some damage. A few spots on it are, unfortunately, scratched and probably would be very difficult to repair. These spots are on the top of the keyboard case. Best bet would be to luck into a replace top shell. Also, a couple of the switches didn’t work so well, some keycaps had been pillaged, and one keycap broke during shipment.
Because I have the Unicomp keyboards mentioned before, I knew I could use the keycaps from those, although they are not “vintage” nor are the quite the right color, to replace those that I needed for the Battlecruiser.
I also use a couple of the switches from the Unicomps to replace original switches that were not working as well as they could be. For the most part, all problems are solved; I don’t mind the mis-matched key colors, but I do wish I could do something about the scratches on the case.
Now, using this vintage keyboard with Windows 10 (I know, I know; I use Windows 10 as an acceptable platform for my mostly UNIX-experience through WSL 2, VMs, etc.) is a challenge; there is no “logo” key, and this keyboard as intended to be a terminal keyboard.
So, in additional to moving keycaps around, I had to invest in an RJ45-to-USB Soarer’s Converter to get it to work. This genius device doesn’t just make a terminal keyboard work with modern USB, it also has an EEPROM that can store and translate a simple config file using a Teensy-based set of electronics. All housed in the converter!
So, if you are having to map your IBM Modem M 122 “Battlecruiser” keyboard, the following is my *.sc file, note follow that:
ifset set3
layerblock
FN1 1
FN2 2
endblock
remapblock
ifset set3
layer 0
F13 MEDIA_MUTE
F14 MEDIA_VOLUME_UP
F15 MEDIA_VOLUME_DOWN
F16 UNASSIGNED
F17 MEDIA_PLAY_PAUSE
F18 MEDIA_PREV_TRACK
F19 MEDIA_NEXT_TRACK
F20 PRINTSCREEN
F21 UNASSIGNED
F22 UNASSIGNED
F23 PAUSE
F24 SCROLL_LOCK
EXTRA_F6 UNASSIGNED
EXTRA_F7 UNASSIGNED
EXTRA_F8 UNASSIGNED
EXTRA_F9 UNASSIGNED
EXTRA_F10 LGUI
ESC NUM_LOCK
NUM_LOCK PAD_SLASH
SCROLL_LOCK PAD_ASTERIX
EXTRA_SYSRQ PAD_MINUS
PAD_ASTERIX PAD_PLUS
PAD_MINUS PAD_PLUS
PAD_PLUS PAD_ENTER
LANG_4 END
EUROPE_1 BACKSLASH
EUROPE_2 UNASSIGNED
endblock
macroblock
macro EXTRA_F1
PUSH_META CLEAR_META all
MAKE LCTRL
PRESS C
BREAK LCTRL
POP_ALL_META
endmacro
macro EXTRA_F2
PUSH_META CLEAR_META all
MAKE LCTRL
PRESS E
BREAK LCTRL
POP_ALL_META
endmacro
macro EXTRA_F3
PUSH_META CLEAR_META all
MAKE LSHIFT
PRESS ESC
BREAK LSHIFT
POP_ALL_META
endmacro
macro EXTRA_F4
PUSH_META CLEAR_META all
MAKE LCTRL
PRESS LEFT_BRACE
BREAK LCTRL
POP_ALL_META
endmacro
macro EXTRA_F5
PUSH_META CLEAR_META all
MAKE LCTRL
PRESS V
BREAK LCTRL
POP_ALL_META
endmacro
endblock

…on this layout, you can see (referencing the Soarer’s documentation) the custom key mapping I am using. One curious thing that I haven’t figured out yet: since I am a VI user, the ESC key is important to me. I have to institute an alternative, as a “normal” ESC isn’t doing the trick. As you can see from EXTRA_F2, I had to essentially use a macro to do a CTRL-[ instead of ESC. It seems to work fine in VI and in VI-mode for WSL, Code, etc. I also had to use macros for copy, cut and paste, but this is alluded to in the Soarer’s documentation.
Update, 2/2021
…recently, I’ve figured out how to emulate the ESC referenced above. Since I use AutoHotkey I thought that there must be a way to do this using both AutoHotkey and Soarer’s. There was.
Using the Soarer’s code above (notice the macro for EXTRA_F2) and the following AutoHotkey outtake:
; jwinn, 2/2021
^e::Send, {ESC}
…I as able to map CTRL-e to ESC through AutoHotkey and then map CTRL-e to EXTRA_F2 in Soarer’s. Note that I moved EXTRA_F2 to EXTRA_F4, just in case. So far, it works well!
Also, if you want to use this with Linux (as I do, as well), you’ll likely need to map things using xbindkeys and xvkbd.
As an example, my ~/.xbindkeysrc contains:
#Escape from EXTRA_F2
"xvkbd -no-jump-pointer -xsendevent -text '\e'"
m:0x14 + c:26
Control+Mod2 + e
…this calls ESC from the mapping already set up (remember that the Soarer’s is hardware) on the EXTRA_F2 key.