Published on 20 May 2025 by Jing Huang.
After roughly 2 months wait, my IBM Beam Spring keyboard reproduction from Model F Labs finally arrived. I opted for the Round 1 version because I like the Space Saver compact case which is not available in the Round 2 products, though they have arguably better QC and a press fit top which eliminates quiet a few minor issues when tuning each module.
Satisfied with the hardware, I was eager to see what I could do to reveal the true power of its built-in controller, and that’s exactly where this article begins.
Don’t forget to check out this article written by LdBeth. The author is also grateful for his invaluable guidance in addressing numerous issues encountered.
The keyboard comes with the pre-flashed Vial firmware, which is a QMK fork for configuring your keyboard in
real time
. Sounds good, but what are the costs? It stores all configurable options into the 1kb EEPROM, including
your keyboard layout. This makes the storage rather limited, restricting you to just 3 layers and 10 macros.
Despite that, you miss out on those fancy features that are only available in the latest QMK, like dynamic macros, deferred execution, and more. If you want more granularity, QMK is the clear choice. Anyway, there’s not much to gain from the real-time configuring capabilities, especially when your configuration is settled.
In the best situations, your package manager might have packaged QMK for you. However, for me on Darwin using
pkgsrc, things started to get a bit more complicated. For this specific keyboard, I needed avr-gcc which
is part of the AVR MCU toolchain available on Microchip’s website1 and
dfu-programmer for flashing firmware.
Fortunately, Purdea Andrei has worked on an old QMK fork which provides support for wcass2 controllers. We should use the 9e92bbf commit. Essentially, these patches override the
default matrix initialize and scan function for capacitive sensing.
After successfully building your very first QMK firmware, you should assign a key for QK_BOOT. This
will save you from having to unscrew 12 screws and open the back-lid just to short PROG to enter the
bootloader for flashing.
In fact, no substantial modification to the patch or to the QMK side is required, though the userspace for QMK has
changed a lot. qmk lint will guide you through updating the legacy config.h and
rules.mk. When incorporating the new features like boot magic, keep SRAM usage in mind or you will
soft-brick your controller.
The only thing that doesn’t work is the raw hid, which I chose to drop. Thus, to squeeze space for those more useful features, some global variables solely used by it can be declared local. Note that the Pandrew utility can no longer be used, so make sure your keyboard is detecting the signals beforehand.