Jeffrey Winn's Blog

Assorted thoughts and information of nominal value

View on GitHub

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

My 1997 IBM Modem M 122 "Battlecruiser"

…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.

…Get back