Restoring a Model M “Battlecruiser” (122 keys, ISO German) from 1999

tobe_b

05 Jun 2023, 21:08

For my first post on the forum, I thought I’d share how I got back into buckling spring keyboards. I bought a “Battlecruiser” (P/N 1397003 from 1999) on eBay in 2007, being fascinated by the number of keys and wanting to experience the typing feel (I forgot where I read about it, but at that time it was only talked about in some very niche corners of the internet). This terminal keyboard is a bit of a weird one, it uses the set 2 protocol (I cannot find a switch or jumper to change it) and has a detachable SDL <-> PS/2 cable. It is called Type IV here: https://sharktastica.co.uk/topics/m122_diffs#Type4. For several reasons the thing ended up stored in my parents’ attic: The F12 and F24 keys would not “click” anymore (it arrived like this), and while the letter keys and F1-F11 worked normally the rest was not recognized (correctly) by the OS. Finally, my new PC did not have PS/2 anymore at some point. I have another, more standard Model M that is fully PC compatible, but without USB and Windows keys, I found it increasingly impractical. I switched to Cherry MX Blue based keyboards and accepted my fate.

A few weeks ago I randomly learned that Soarer’s converter exists! I immediately went to find the 122 key keyboard and opened it up. [Sorry for the image quality of the photos, I only have a phone with a crappy camera here.] Here’s the label:
Spoiler:
1.jpg
1.jpg (128.92 KiB) Viewed 12989 times
The plastic rivets were broken and the F12/F24 flippers were stuck at a weird angle.
Spoiler:
2.jpg
2.jpg (176.33 KiB) Viewed 12989 times
The keyboard was a bit dusty, but apart from the broken rivets it is in quite pristine condition. No idea if it was even in use for a long time. Key soup:
Spoiler:
3.jpg
3.jpg (272.2 KiB) Viewed 12989 times
I decided on a nut and bolt mod after cleaning the parts.
Spoiler:
4.jpg
4.jpg (291.15 KiB) Viewed 12989 times
Afterwards, all keys worked immediately, emitting nice, satisfying clicks. (Yes, I did record it, but you have heard it before so I’m not attaching the sound file.)
Spoiler:
5.jpg
5.jpg (203.27 KiB) Viewed 12989 times
Now to connect it to a modern PC... I used an Arduino Micro (the official Arduino one, not Pro Micro) that I could source easily. These have an Atmega32u4 chip and can be flashed easily with the Soarer firmware. Here is my glorious converter in action. A good tip is to first try with a crappy rubber dome keyboard to check if the PS/2 wiring is correct (luckily the passive USB to PS/2 adapter worked):
Spoiler:
6.jpg
6.jpg (188.35 KiB) Viewed 12989 times
After this pointless USB -> PS/2 -> USB conversion, I could finally connect the real thing:
Spoiler:
7.jpg
7.jpg (243.17 KiB) Viewed 12989 times
It seems that the correct scancodes are not floating around on the internet (or I could not find them), so I’ll post them here. First the codes, then the names in the Soarer firmware. I only included the non-standard ones, the empty keys are just the ISO layout defaults:
Spoiler:
8-keyboard-layout-122-soarer-codes.png
8-keyboard-layout-122-soarer-codes.png (60.46 KiB) Viewed 12989 times
9-keyboard-layout-122-soarer-names.png
9-keyboard-layout-122-soarer-names.png (109.44 KiB) Viewed 12989 times
You can see that the codes are strange and seem nonstandard. I even had to use some deprecated codes in the Soarer firmware that seem to have no non-deprecated replacements listed in the docs (not a problem, since they still work just fine, but the codes seem to be very rarely used).

Finally, I was annoyed that the top of the case had a bit of wiggle room to the left and right. A quick application of tape stopped that nicely.
Spoiler:
10.jpg
10.jpg (132.98 KiB) Viewed 12989 times
Currently, I have disassembled the keyboard again, because I used M2 bolts but only drilled 1.5 mm holes. Now I worry that that might put too much stress on the plastic and am thinking about widening the holes.

Thanks to everyone in the community who shared their knowledge in forums and blog posts and special thanks to Soarer for the firmware. This is really the first time I am “restoring” something like this and it is a lot of fun. Let me know if you want to see more photos or have some questions.

***

For my next steps, I’d like to ask for some hints/ideas. I would love to have the Soarer converter inside the case with some sort of USB A or C socket exposed. The SDL socket is unfortunately soldered directly onto the PCB:
Spoiler:
11.jpg
11.jpg (246.5 KiB) Viewed 12989 times
I’m not the best at soldering, so I am hesitating to attach some cables to the PCB. I could not find any posts about such a mod, many people seem to have internal connectors between SDL plug and PCB, which makes this much easier? Does anyone have experience with this and can share some ideas?

I am also not super happy with the ISO Enter key. The resistance of the spring seems quite low, especially when hitting the key on the upper half (it seems that I usually hit the Enter this way). It’s not a defect of the spring, I tried different ones that work just fine in other positions. Is this a known issue, perhaps with the stabilizer? It is hard to describe the feeling, but it is worse than any other key somehow. The rest of the keys feel great.
Last edited by tobe_b on 05 Jun 2023, 21:55, edited 1 time in total.

User avatar
Muirium
µ

05 Jun 2023, 21:31

Nice first post. Welcome to DT. And welcome to the magic that is Soarer’s converter. I remember very well my excitement at restoring my first mech, my XT, with his converter and writing all about it here, ten years ago. There’s nothing quite like a job well done. :D

Also respect for your battleship bolt mod. I did one of those as my first one too. Phew!

User avatar
dotdash

06 Jun 2023, 00:52

I got an extension socket (I used a Teensy) and ran it to the cable support bracket.
viewtopic.php?f=7&t=20977
Unicomp still has spare brackets available here https://www.pckeyboard.com/page/product/RETAINER
Can't help you with the enter, mine's not the battleship and has a sane horizontal enter key.

User avatar
Muirium
µ

06 Jun 2023, 12:47

Re: the ISO Return key. Is there a stabiliser insert correctly installed? It should be a 'vertical' one, like the numpad Enter key; not a 'horizontal' one like all the other stabilisers on your board. They're slightly different and a mistake would surely mess up the action.

tobe_b

07 Jun 2023, 19:36

Thanks for the hints and the warm welcome.

The German ISO layout including big, fat Enter keys is unfortunately(?) imprinted too deeply into my muscle memory. Typing on anything else drives me crazy now :D

I checked that the stabilizer is correct and correctly installed, I think otherwise the key wouldn’t really work at all. I switched the numpad stabilizer and the main Enter stabilizer (turning them 180°, of course). I also switched the keys with my other Model M. That helped a bit, maybe just due to reseating everything. I think I’m just too picky… No problems with the function at all.

For the USB connector, I can’t really fit an internal SDL connector. I would have to move the PCB away from the cutout on the back of the keyboard, where it is normally installed. That would also mess with the membrane connectors. In your case, dotdash, it looks much easier because there’s an internal connector between the SDL socket and the PCB. For me I would need to get an SDL plug installed internally and either sacrifice a cable (I don’t really want to) or get a brand new SDL connector (either impossible or very cumbersome here in Germany). The SDL connector is also quite big and might not fit.

So I’m still thinking about it. I already used my multimeter to find which pin on the board belongs to which PS/2 wire (numbering follows the standard PS/2 connection numbering). The lower right one is not connected to anything as far as I can see and the two top left ones are soldered together. No guarantees, this is untested:
SDL-pins-to-PS2-pincodes.jpg
SDL-pins-to-PS2-pincodes.jpg (362.98 KiB) Viewed 12829 times

tobe_b

08 Jul 2023, 15:43

So, I finally had some time again. After looking at the issue in more detail, I came to the conclusion that I needed to desolder the SDL plug. I am somewhat sad about it, but the old detachable PS/2 cables I have are quite stiff and unwieldy for my desk. I also feel that their plastic is somewhat brittle. So I really prefer a modern USB cable.

I am however not ready to work on the 122 key terminal model M. I also have a 102 key model M, so I decided to try this one first:
1.jpg
1.jpg (136.23 KiB) Viewed 12593 times
Here’s the controller board before…
2.jpg
2.jpg (102.78 KiB) Viewed 12593 times
…and after (pin usage indicated):
3.jpg
3.jpg (144.11 KiB) Viewed 12593 times
You can see a bit that one of the metal pieces of the SDL plug is still stuck in there. A victim of my rudimentary desoldering skills—I cannot get it loose. I think there is solder on both sides of the PCB and the heat transport is so high that I can only melt one side at a time. For now, it is not really in the way (it’s a ground pin and there’s two of them).

It is a bit tricky to position the Soarer converter in the chassis. Here was my first idea, but it becomes impossible to assemble when the cables to the Soarer converter are fixed to the bottom of the chassis. I also put a little cheat sheet inside in case I need to work on it again.
4.jpg
4.jpg (157.32 KiB) Viewed 12593 times
I ended up just putting the converter in the top right, relying on the stiff USB cable to keep it in place. Note the hacky cable strain relief. But it seems to work.
5.jpg
5.jpg (314.95 KiB) Viewed 12593 times
I just need to get a longer USB cable:
6.jpg
6.jpg (269.99 KiB) Viewed 12593 times
I’ll see how I like this before doing more work on the 122 key M. For that one, I think I have some more space to install the Soarer converter (the original controller board is installed differently and the back of the keyboard is higher). I have some quite short USB C male/USB A female adapters that I could then let hang out of the keyboard to have a detachable USB cable.

User avatar
Muirium
µ

08 Jul 2023, 16:56

That’s the biggest Soarer’s converter I’ve ever seen! Are you sure you’re not better off with an el cheapo Pro Micro? They’ll fit just about anywhere. Should work perfectly well in a Model M.

tobe_b

08 Jul 2023, 19:29

I have a bunch of those lying around and I found them more easily available here in Germany. It’s true that the USB micro B to C converter takes up even more space – maybe I didn't look hard enough, but USB C Pro Micros sometimes get sold for ~20€ in some shops I found, which makes it not worth it and I didn't feel like hunting around too long. Again, maybe I’m not looking hard enough. But in the end, what's cheaper than using what you already have :D

Seriously though, the Arduinos are pricey and somewhat big, but the soldered-on pins make them nice to prototype/play around on breadboards and I generally found them to be reliable enough. Their IDE/libraries also makes it easier to play with them (non-keyboard projects etc.) for non-experts in embedded programming. So I usually have some on hand.

User avatar
DMA

13 Jul 2023, 06:32

Welcome to the club! Try not to get sucked in too deep!

Model M is ohmic, so instead of doing triple-conversions you can flash QMK into your arduino and connect it directly to matrix. This requires some soldering though (NOT TO THE RIBBON CABLE!)

User avatar
Muirium
µ

13 Jul 2023, 14:35

Don't get sucked in too deep. Btw: here's a deep rabbit hole you might like. :D

tobe_b

13 Jul 2023, 22:40

Too late indeed to avoid the rabbit hole. It's too much fun. Would love to play around with QMK, but had no reason yet.

But it's a really good point, DMA, thanks! I do not care about the multiple conversion, that works for me. But not having to mess around with the original controller is an attractive idea – I would love to keep the one for the M 122 in original condition. It might also make the placement of the USB port/connection more customizable. And I have to solder either way.

The only problem is finding a QMK-compatible controller board that has 28 available pins for the keys (the 122 key models have a 20 pin and an 8 pin cable for a 20×8 matrix) plus 3+GND for the LEDs. At least that's my current understanding. The small Arduinos don't have that many pins, although it should suffice for the 101/102 key layouts. So now a new search begins. Maybe some STM Arm boards fit the bill, they should also have a lot more memory for macros etc. For the moment I can type happily, but will post an update/HOWTO when I try this.

User avatar
DMA

14 Jul 2023, 17:11

CY8CKIT-059 has enough GPIOs. It's not QMK-compatible, but I'm pretty happy with CommonSense (which is made to be capacitive controller, but works with electrical contacts. Doesn't have anti-ghosting, but just don't press to many keys at once :)

tobe_b

09 Sep 2023, 15:38

I got some very helpful tips on the QMK discord (thanks user "sigprof", you are my hero) and finally had time to try it out. I’ll write it down here for posterity, discord kinda sucks for documenting things.

One can indeed use "Blackpill" boards (STM32 F401 or STM23 411), which have enough GPIOs. While some of them come with caveats, it should actually work. There is already source code for 122 key Model Ms in QMK: https://github.com/qmk/qmk_firmware/tre ... /m122_3270

The only issue is that the code is made for keyboards without LED indicators. No problem however! The B2 and A9 pins are still free to use. Additionally, we can make use of two further pins (A13 and A14) which are normally used for debugging. Here is my edited info.json from the "blackpill" subdirectory:

Code: Select all

{
    "usb": {
        "device_version": "0.0.2"
    },
    "matrix_pins": {
        "cols": ["B0", "B1", "B10", "B12", "B13", "B14", "B15", "A8", "A7", "A10", "A6", "A5", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9"],
        "rows": ["C13", "C14", "C15", "A0", "A1", "A2", "A3", "A4"]
    },
    "indicators": {
        "on_state": 1,
        "num_lock": "B2",
        "caps_lock": "A9",
        "scroll_lock": "A13",
    },
    "diode_direction": "ROW2COL",
    "processor": "STM32F401",
    "bootloader": "stm32-dfu",
    "board": "BLACKPILL_STM32_F401"
}
I currently do not have the connectors for the membrane, so I could only test the LEDs. Those work without any problems or any special treatment. I assume that the rest works, too, given that it has been merged into QMK proper. I will have to get some parts and report later on how well that works when actually using the custom controller to drive my keyboard.

tobe_b

08 Oct 2023, 20:20

OK, I finished my replacement controller for the battleship. Hooray! The Blackpill-based setup works. There are some hurdles, but they can be overcome.

If using GPIO A10 for the matrix, it needs an additional external pull-up resistor. This has already been planned into the schematics for the replacement controller I based this on (https://github.com/jmaynard/tronguylabs-m122-blackpill), so no problem. Just put 4.7 kΩ between A10 and +3V, for example.

For the indicator LEDs, some non-optimal GPIOs must be used. I finally chose A9, A13, and A14. A13/A14 would be used for debugging, but are not required at all. A9 has an internal pull-down resistor, forcing me to connect the LEDs between the GPIOs and ground, lighting them with a high signal. No problem, except that the original LEDs are connected to +5V and light on a low signal. They are thus installed the wrong way around. This means that the original LEDs are not usable with this new controller. That meant installing my own replacement LEDs (pictures below, it looks like a hack when the keyboard is open, but when it’s closed no one’s the wiser).

I decided to hand solder onto one of those epoxy boards with premade hole grids and copper contacts (no idea what they are called in English). Here’s the rough plan:
Spoiler:
replacement-controller-M122.png
replacement-controller-M122.png (581.23 KiB) Viewed 10815 times
I also fixed a short male USB C to female A cable on the controller board and thus had to rearrange the parts for the LEDs on the right side. Improvised it a bit:
Spoiler:
1.jpg
1.jpg (175.79 KiB) Viewed 10815 times
2.jpg
2.jpg (206.28 KiB) Viewed 10815 times
I did install potentiometers for the LEDs to be able to control the brightness to my liking. I also used 100 Ω resistors as fail-safes to avoid burning out the LEDs if turning the potentiometers too far (that did happen to me more than once on different projects).

I used some spare parts to make the LED “daughterboard”:
Spoiler:
3.jpg
3.jpg (138.46 KiB) Viewed 10815 times
And when it’s closed, you can’t see the mess anymore 🙂:
Spoiler:
4.jpg
4.jpg (155.35 KiB) Viewed 10815 times
Since I had to use replacement LEDs anyway, I went with red for the novelty. I also made daughterboards with green, yellow, and blue LEDs so I can change this if I feel like it later.
Spoiler:
5.jpg
5.jpg (114.45 KiB) Viewed 10815 times
It also turns out that the matrix of my keyboard (which is the PC compatible one, called PS/2 Host Connected Keyboard by IBM, and Type IV by sharktastica) is different than the one used in the model that’s upstream in QMK. I assume that those are for the more common terminal models. I attached the modified info.json if anybody has a similar keyboard.

Code: Select all

{
    "usb": {
        "device_version": "0.0.2"
    },
    "matrix_pins": {
        "cols": ["B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A5", "A6", "A10", "A7", "A8", "B15", "B14", "B13", "B12", "B10", "B1", "B0"],
        "rows": ["C13", "C14", "C15", "A0", "A1", "A2", "A3", "A4"]
    },
    "indicators": {
        "on_state": 1,
        "num_lock": "A13",
        "caps_lock": "A9",
        "scroll_lock": "A14"
    },
    "diode_direction": "ROW2COL",
    "processor": "STM32F401",
    "bootloader": "stm32-dfu",
    "board": "BLACKPILL_STM32_F401",
    "layouts": {
        "LAYOUT_type4": {
            "layout": [
                {"matrix": [7,  9], "x": 3.25, "y": 0},
                {"matrix": [6,  9], "x": 4.25, "y": 0},
                {"matrix": [6,  8], "x": 5.25, "y": 0},
                {"matrix": [5,  9], "x": 6.25, "y": 0},
                {"matrix": [4,  9], "x": 7.25, "y": 0},
                {"matrix": [4,  8], "x": 8.25, "y": 0},
                {"matrix": [3,  9], "x": 9.25, "y": 0},
                {"matrix": [2,  9], "x": 10.25, "y": 0},
                {"matrix": [2,  8], "x": 11.25, "y": 0},
                {"matrix": [1,  9], "x": 12.25, "y": 0},
                {"matrix": [0,  9], "x": 13.25, "y": 0},
                {"matrix": [0,  8], "x": 14.25, "y": 0},

                {"matrix": [7,  8], "x": 3.25, "y": 1},
                {"matrix": [7, 10], "x": 4.25, "y": 1},
                {"matrix": [6, 10], "x": 5.25, "y": 1},
                {"matrix": [5,  8], "x": 6.25, "y": 1},
                {"matrix": [5, 10], "x": 7.25, "y": 1},
                {"matrix": [4, 10], "x": 8.25, "y": 1},
                {"matrix": [3,  8], "x": 9.25, "y": 1},
                {"matrix": [3, 10], "x": 10.25, "y": 1},
                {"matrix": [2, 10], "x": 11.25, "y": 1},
                {"matrix": [1,  8], "x": 12.25, "y": 1},
                {"matrix": [1, 10], "x": 13.25, "y": 1},
                {"matrix": [0, 10], "x": 14.25, "y": 1},

                {"matrix": [4,  1], "x": 0, "y": 3},
                {"matrix": [3, 14], "x": 1, "y": 3},

                {"matrix": [4,  2], "x": 2.25, "y": 3},
                {"matrix": [5,  2], "x": 3.25, "y": 3},
                {"matrix": [5,  3], "x": 4.25, "y": 3},
                {"matrix": [5,  4], "x": 5.25, "y": 3},
                {"matrix": [5,  6], "x": 6.25, "y": 3},
                {"matrix": [4,  6], "x": 7.25, "y": 3},
                {"matrix": [4,  7], "x": 8.25, "y": 3},
                {"matrix": [5,  7], "x": 9.25, "y": 3},
                {"matrix": [5, 13], "x": 10.25, "y": 3},
                {"matrix": [5, 11], "x": 11.25, "y": 3},
                {"matrix": [5, 12], "x": 12.25, "y": 3},
                {"matrix": [4, 12], "x": 13.25, "y": 3},
                {"matrix": [4, 13], "x": 14.25, "y": 3},
                {"matrix": [5, 14], "x": 15.25, "y": 3, "w": 2},

                {"matrix": [4, 16], "x": 17.5, "y": 3},
                {"matrix": [4, 18], "x": 18.5, "y": 3},
                {"matrix": [4, 19], "x": 19.5, "y": 3},

                {"matrix": [1, 17], "x": 20.75, "y": 3},
                {"matrix": [1, 16], "x": 21.75, "y": 3},
                {"matrix": [1, 19], "x": 22.75, "y": 3},
                {"matrix": [0, 19], "x": 23.75, "y": 3},

                {"matrix": [4,  3], "x": 0, "y": 4},
                {"matrix": [3,  1], "x": 1, "y": 4},

                {"matrix": [2,  2], "x": 2.25, "y": 4, "w": 1.5},
                {"matrix": [3,  2], "x": 3.75, "y": 4},
                {"matrix": [3,  3], "x": 4.75, "y": 4},
                {"matrix": [3,  4], "x": 5.75, "y": 4},
                {"matrix": [3,  6], "x": 6.75, "y": 4},
                {"matrix": [2,  6], "x": 7.75, "y": 4},
                {"matrix": [2,  7], "x": 8.75, "y": 4},
                {"matrix": [3,  7], "x": 9.75, "y": 4},
                {"matrix": [3, 13], "x": 10.75, "y": 4},
                {"matrix": [3, 11], "x": 11.75, "y": 4},
                {"matrix": [3, 12], "x": 12.75, "y": 4},
                {"matrix": [2, 12], "x": 13.75, "y": 4},
                {"matrix": [2, 13], "x": 14.75, "y": 4},
                {"matrix": [5, 17], "x": 16, "y": 4, "w": 1.25, "h": 2},

                {"matrix": [4, 17], "x": 17.5, "y": 4},
                {"matrix": [5, 18], "x": 18.5, "y": 4},
                {"matrix": [5, 19], "x": 19.5, "y": 4},

                {"matrix": [3, 17], "x": 20.75, "y": 4},
                {"matrix": [3, 16], "x": 21.75, "y": 4},
                {"matrix": [3, 19], "x": 22.75, "y": 4},
                {"matrix": [3, 18], "x": 23.75, "y": 4},

                {"matrix": [2,  1], "x": 0, "y": 5},
                {"matrix": [2, 14], "x": 1, "y": 5},

                {"matrix": [2,  3], "x": 2.25, "y": 5, "w": 1.75},
                {"matrix": [6,  2], "x": 4, "y": 5},
                {"matrix": [6,  3], "x": 5, "y": 5},
                {"matrix": [6,  4], "x": 6, "y": 5},
                {"matrix": [6,  6], "x": 7, "y": 5},
                {"matrix": [7,  6], "x": 8, "y": 5},
                {"matrix": [7,  7], "x": 9, "y": 5},
                {"matrix": [6,  7], "x": 10, "y": 5},
                {"matrix": [6, 13], "x": 11, "y": 5},
                {"matrix": [6, 11], "x": 12, "y": 5},
                {"matrix": [6, 12], "x": 13, "y": 5},
                {"matrix": [7, 12], "x": 14, "y": 5},
                {"matrix": [1, 12], "x": 15, "y": 5},

                {"matrix": [5, 15], "x": 18.5, "y": 5},

                {"matrix": [2, 17], "x": 20.75, "y": 5},
                {"matrix": [2, 16], "x": 21.75, "y": 5},
                {"matrix": [2, 19], "x": 22.75, "y": 5},
                {"matrix": [2, 18], "x": 23.75, "y": 5},

                {"matrix": [6,  1], "x": 0, "y": 6},
                {"matrix": [6, 14], "x": 1, "y": 6},

                {"matrix": [2,  5], "x": 2.25, "y": 6, "w": 1.25},
                {"matrix": [7,  3], "x": 3.5, "y": 6},
                {"matrix": [1,  2], "x": 4.5, "y": 6},
                {"matrix": [1,  3], "x": 5.5, "y": 6},
                {"matrix": [1,  4], "x": 6.5, "y": 6},
                {"matrix": [1,  6], "x": 7.5, "y": 6},
                {"matrix": [0,  6], "x": 8.5, "y": 6},
                {"matrix": [0,  7], "x": 9.5, "y": 6},
                {"matrix": [1,  7], "x": 10.5, "y": 6},
                {"matrix": [1, 13], "x": 11.5, "y": 6},
                {"matrix": [1, 11], "x": 12.5, "y": 6},
                {"matrix": [0, 12], "x": 13.5, "y": 6},
                {"matrix": [1,  5], "x": 14.5, "y": 6, "w": 2.75},

                {"matrix": [0, 18], "x": 17.5, "y": 6},
                {"matrix": [7, 18], "x": 18.5, "y": 6},
                {"matrix": [0, 16], "x": 19.5, "y": 6},

                {"matrix": [6, 17], "x": 20.75, "y": 6},
                {"matrix": [6, 16], "x": 21.75, "y": 6},
                {"matrix": [6, 19], "x": 22.75, "y": 6},
                {"matrix": [6, 18], "x": 23.75, "y": 6, "h": 2},

                {"matrix": [7, 14], "x": 0, "y": 7},
                {"matrix": [7,  1], "x": 1, "y": 7},

                {"matrix": [3,  0], "x": 2.25, "y": 7, "w": 1.5},
                {"matrix": [7, 15], "x": 4.75, "y": 7, "w": 1.5},
                {"matrix": [0,  1], "x": 6.25, "y": 7, "w": 7},
                {"matrix": [0, 15], "x": 13.25, "y": 7, "w": 1.5},
                {"matrix": [1,  0], "x": 15.75, "y": 7, "w": 1.5},

                {"matrix": [0, 17], "x": 18.5, "y": 7},

                {"matrix": [7, 16], "x": 20.75, "y": 7, "w": 2},
                {"matrix": [7, 19], "x": 22.75, "y": 7}
            ]
        }
    }
}
That was fun. I will probably also do something similar for my 102 key Model M at some point. I have to disassemble it anyway, the left Ctrl flipper jumped out of its position somehow. I am thinking of getting a speaker and installing it in the speaker hole (because why not, it clearly was meant like this at some point in the 80s 🙃). The matrix is smaller, so I have more GPIOs left over. QMK does support playing some sounds, so it might be nice for annoying people at least.

Edit: BTW, the connectors for the membrane are TE Connectivity / AMP Nos. 5-520315-4 (4 pin), 5-520315-8 (8 pin), 6-520315-6 (16 pin), and 7-520315-0 (20 pin). Maybe that saves someone some time, I didn’t know what they were called and spent some hours searching.

Post Reply

Return to “Workshop”