Porting the Latest QMK to BSSK R1

With Atmel AVR Controller from Model F Labs

Published on 20 May 2025 by Jing Huang.

1. Background

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.

2. Vial or QMK

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.

3. Where to Start

3.1. QMK Environment

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.

3.2. Obtaining Patches

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.

4. Customization

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.