In the nineties I bought an IBM PC-XT from a classmate. 200 Francs, about 45 € or $ from 2022, for a pretty nice looking computer with his green CRT and 102 keys ISO AZERTY keyboard. I didn’t know what to do with this system and I barely started it every 10 years thinking that one day it will be useful.

Well the PC is currently still carefully stored on a shelf, but the keyboard… is currently used by me to write this text.

I have always had low-end keyboards, cheap purchases and salvaging (remember the horrible Atari 520 ST typing experience? For me the worst was the EXL100’s piece of rubber!). I had a look at the Das Keyboard when it came out but I didn’t follow up. Recently I thought I should invest in a good keyboard to have a better interaction with my computers. By consulting specialized websites and forums I realized that the IBM Model M has always been a good choice. Lucky me I have one!

When I got back the keyboard from the shelf I noticed that it made a noise when I moved it around and as I was reluctant to boot up the PC-XT I didn’t know if it worked anymore. Actually it was the chronic disease of this sort of keyboard: the curved plastic sheet was cracked and the sort of rivets were broken, hence the noise. Disassembling, cleaning, and bolt-modding with the help of this video: Model M Bolt Mod Tutorial.

Bolt-mod of my IBM Model M

Bolt-mod of my IBM Model M

There are two ways to connect an old keybord to a modern system: using a converter (usually running a Soarer firmware), or replacing the internal electronic board and I choose the second option. But there again there are multiple choices. I choose to start from the sje-mse/yacobo project because it uses a very cheap micro-controller (prices have skyrocketed in recent years), and the electronic schematic seems very basic, I told myself that I could use a generic breadboard instead of a custom-made PCB. In the end I ordered at JLCPCB (never done that before, easy process) and it was a good idea, it’s nice to have a PCB that fit well (but my bad soldering skills somewhat ruined the good look of the circuitry in the end). My keyboard don’t have the three lights to indicate wich keys are locked, so I didn’t bother to wire the corresponding connector.

By chance the STM32F103C8T6 micro-controller that I bought for about 3€ didn’t have the potential problems that was announced by the project author, so flashing the QMK firmware was very easy.

However, I had a strange problem, everything worked fine except for a few keys that were behaving erratically, for example the arrow up and the numeric keypad point. Strangely, everything worked properly when I held the assembly in my hand so I thought it was an electrical problem. I wired a conductor between the 3.3V line of the micro-controller and the metallic plate of the keyboard, and so far no more problems!

YaCoBo board for the IBM Model M with STM32F103C8T6

YaCoBo board for the IBM Model M with STM32F103C8T6

This project made me have a look to the very powerful QMK firmware, I tailored some stuff for my usage:

  • the two Ctrl keys mod-tapped are used to change audio volume (MT(MOD_LCTL,KC_AUDIO_VOL_DOWN) & MT(MOD_RCTL,KC_AUDIO_VOL_UP)), and shifted used to change the screen brightness,
  • Num lock that I don’t use is used to activate the Quantum layer (bootloader, reset, etc.) OR activate the desktop calculator (LT(1, KC_CALC)),
  • Double-tap on left shift simulate the Windows/Command key ([TD_LSFT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT,KC_LGUI)),
  • Double-tap on right shift simulate the Menu key ([TD_RSFT_APP] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT,KC_APP),),
  • Pause is used to pause the media play (KC_MEDIA_PLAY_PAUSE),
  • AltGr + F1 to F12 function keys become F13 to F24 (const key_override_t f13_key_override = ko_make_basic(MOD_BIT(KC_RALT), KC_F1, KC_F13), etc.),
  • I added a piece of code to force the numlock because without the locking lights I can’t se if the keypad is in numeric or navigation mode (and as the Num lock key has been redefined, the problem is definitely eliminated: never in navigation mode).

I didn’t found a way to replace Caps lock with Compose but as for the screen brightness I dit it at the X/Wayland/KDE level.

Thank you again sje-mse for helping me to use this wonderful keyboard in a modern way :-)