Add handwired/multistation

This commit is contained in:
maxgpdx 2025-06-02 20:47:56 -07:00
parent faf77f1651
commit dc24e90b27
3 changed files with 266 additions and 0 deletions

View File

@ -0,0 +1,166 @@
{
"manufacturer": "IBM Japan",
"keyboard_name": "Multistation",
"maintainer": "maxgpdx",
"url": "https://deskthority.net/viewtopic.php?t=27461",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP5", "GP0", "GP1", "GP2", "GP3", "GP4"],
"rows": ["GP26", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16"]
},
"processor": "RP2040",
"bootloader": "rp2040",
"diode_direction": "ROW2COL",
"layouts": {
"LAYOUT": {
"layout":
[
{"label":"F13", "matrix": [1, 9], "x":3, "y":0},
{"label":"F14", "matrix": [1, 8], "x":4, "y":0},
{"label":"F15", "matrix": [1, 7], "x":5, "y":0},
{"label":"F16", "matrix": [1, 6], "x":6, "y":0},
{"label":"F17", "matrix": [1, 5], "x":7.5, "y":0},
{"label":"F18", "matrix": [1, 4], "x":8.5, "y":0},
{"label":"F19", "matrix": [1, 3], "x":9.5, "y":0},
{"label":"F20", "matrix": [1, 2], "x":10.5, "y":0},
{"label":"F21", "matrix": [1, 1], "x":12, "y":0},
{"label":"F22", "matrix": [1, 0], "x":13, "y":0},
{"label":"F23", "matrix": [1, 11], "x":14, "y":0},
{"label":"F24", "matrix": [1, 12], "x":15, "y":0},
{"label":"F1", "matrix": [0, 9], "x":3, "y":1},
{"label":"F2", "matrix": [0, 8], "x":4, "y":1},
{"label":"F3", "matrix": [0, 7], "x":5, "y":1},
{"label":"F4", "matrix": [0, 6], "x":6, "y":1},
{"label":"F5", "matrix": [0, 5], "x":7.5, "y":1},
{"label":"F6", "matrix": [0, 4], "x":8.5, "y":1},
{"label":"F7", "matrix": [0, 3], "x":9.5, "y":1},
{"label":"F8", "matrix": [0, 2], "x":10.5, "y":1},
{"label":"F9", "matrix": [0, 1], "x":12, "y":1},
{"label":"F10", "matrix": [0, 0], "x":13, "y":1},
{"label":"F11", "matrix": [0, 11], "x":14, "y":1},
{"label":"F12", "matrix": [0, 12], "x":15, "y":1},
{"label":"M1", "matrix": [6, 10], "x":0, "y":2.5},
{"label":"M2", "matrix": [6, 9], "x":1, "y":2.5},
{"label":"M3", "matrix": [7, 10], "x":0, "y":3.5},
{"label":"M4", "matrix": [7, 9], "x":1, "y":3.5},
{"label":"M5", "matrix": [6, 8], "x":0, "y":4.5},
{"label":"M6", "matrix": [6, 7], "x":1, "y":4.5},
{"label":"M7", "matrix": [7, 8], "x":0, "y":5.5},
{"label":"M8", "matrix": [7, 7], "x":1, "y":5.5},
{"label":"M9", "matrix": [6, 6], "x":0, "y":6.5},
{"label":"M10", "matrix": [7, 6], "x":1, "y":6.5},
{"label":"Esc", "matrix": [2, 10], "x":2.5, "y":2.5},
{"label":"!", "matrix": [2, 9], "x":3.5, "y":2.5},
{"label":"@", "matrix": [2, 8], "x":4.5, "y":2.5},
{"label":"#", "matrix": [2, 7], "x":5.5, "y":2.5},
{"label":"$", "matrix": [2, 6], "x":6.5, "y":2.5},
{"label":"%", "matrix": [2, 5], "x":7.5, "y":2.5},
{"label":"^", "matrix": [2, 4], "x":8.5, "y":2.5},
{"label":"&", "matrix": [2, 3], "x":9.5, "y":2.5},
{"label":"*", "matrix": [2, 2], "x":10.5, "y":2.5},
{"label":"(", "matrix": [2, 1], "x":11.5, "y":2.5},
{"label":")", "matrix": [2, 0], "x":12.5, "y":2.5},
{"label":"_", "matrix": [2, 11], "x":13.5, "y":2.5},
{"label":"+", "matrix": [2, 12], "x":14.5, "y":2.5},
{"label":"`", "matrix": [0, 13], "x":15.5, "y":2.5},
{"label":"BS", "matrix": [1, 13], "x":16.5, "y":2.5},
{"label":"Tab", "matrix": [3, 10], "x":2.5, "y":3.5, "w":1.5},
{"label":"Q", "matrix": [3, 9], "x":4, "y":3.5},
{"label":"W", "matrix": [3, 8], "x":5, "y":3.5},
{"label":"E", "matrix": [3, 7], "x":6, "y":3.5},
{"label":"R", "matrix": [3, 6], "x":7, "y":3.5},
{"label":"T", "matrix": [3, 5], "x":8, "y":3.5},
{"label":"Y", "matrix": [3, 4], "x":9, "y":3.5},
{"label":"U", "matrix": [3, 3], "x":10, "y":3.5},
{"label":"I", "matrix": [3, 2], "x":11, "y":3.5},
{"label":"O", "matrix": [3, 1], "x":12, "y":3.5},
{"label":"P", "matrix": [3, 0], "x":13, "y":3.5},
{"label":"{", "matrix": [3, 11], "x":14, "y":3.5},
{"label":"}", "matrix": [3, 12], "x":15, "y":3.5},
{"label":"Enter", "matrix": [4, 13], "x":16.25, "y":3.5, "w":1.25, "h":2},
{"label":"Caps Lock", "matrix": [4, 10], "x":2.5, "y":4.5, "w":1.75},
{"label":"A", "matrix": [4, 9], "x":4.25, "y":4.5},
{"label":"S", "matrix": [4, 8], "x":5.25, "y":4.5},
{"label":"D", "matrix": [4, 7], "x":6.25, "y":4.5},
{"label":"F", "matrix": [4, 6], "x":7.25, "y":4.5},
{"label":"G", "matrix": [4, 5], "x":8.25, "y":4.5},
{"label":"H", "matrix": [4, 4], "x":9.25, "y":4.5},
{"label":"J", "matrix": [4, 3], "x":10.25, "y":4.5},
{"label":"K", "matrix": [4, 2], "x":11.25, "y":4.5},
{"label":"L", "matrix": [4, 1], "x":12.25, "y":4.5},
{"label":":", "matrix": [4, 0], "x":13.25, "y":4.5},
{"label":"\"", "matrix": [4, 11], "x":14.25, "y":4.5},
{"label":"|", "matrix": [4, 12], "x":15.25, "y":4.5},
{"label":"Shift", "matrix": [5, 10], "x":2.5, "y":5.5, "w":2.25},
{"label":"Z", "matrix": [5, 9], "x":4.75, "y":5.5},
{"label":"X", "matrix": [5, 8], "x":5.75, "y":5.5},
{"label":"C", "matrix": [5, 7], "x":6.75, "y":5.5},
{"label":"V", "matrix": [5, 6], "x":7.75, "y":5.5},
{"label":"B", "matrix": [5, 5], "x":8.75, "y":5.5},
{"label":"N", "matrix": [5, 4], "x":9.75, "y":5.5},
{"label":"M", "matrix": [5, 3], "x":10.75, "y":5.5},
{"label":"<", "matrix": [5, 2], "x":11.75, "y":5.5},
{"label":">", "matrix": [5, 1], "x":12.75, "y":5.5},
{"label":"?", "matrix": [5, 0], "x":13.75, "y":5.5},
{"label": "JIS", "matrix": [5, 11],"x":14.75, "y":5.5},
{"label":"Shift", "matrix": [5, 12], "x":15.75, "y":5.5, "w":1.75},
{"label":"Ctrl", "matrix": [6, 5], "x":2.5, "y":6.5, "w":1.5},
{"label":"Alt", "matrix": [7, 5], "x":4.75, "y":6.5, "w":1.5},
{"label":"Space1", "matrix": [6, 4], "x":6.25, "y":6.5, "w":2},
{"label":"Space2", "matrix": [7, 4], "x":8.25, "y":6.5, "w":2},
{"label":"Space3", "matrix": [6, 3], "x":10.25, "y":6.5, "w":2},
{"label":"Alt", "matrix": [7, 3], "x":12.25, "y":6.5, "w":1.5},
{"label":"Ctrl", "matrix": [6, 2], "x":16, "y":6.5, "w":1.5},
{"label":"Insert", "matrix": [1, 14], "x":18, "y":2.5},
{"label":"Delete", "matrix": [0, 14], "x":18, "y":3.5},
{"label":"Home", "matrix": [1, 15], "x":19, "y":2.5},
{"label":"End", "matrix": [0, 15], "x":19, "y":3.5},
{"label":"PgUp", "matrix": [2, 15], "x":20, "y":2.5},
{"label":"PgDn", "matrix": [3, 15], "x":20, "y":3.5},
{"label":"\u2191", "matrix": [4, 14], "x":19, "y":4.5},
{"label":"\u2190", "matrix": [5, 13], "x":18, "y":5.5},
{"label":"\u2b76", "matrix": [5, 14], "x":19, "y":5.5},
{"label":"\u2192", "matrix": [5, 15], "x":20, "y":5.5},
{"label":"\u2193", "matrix": [7, 2], "x":19, "y":6.5},
{"label":"Num Lock", "matrix": [2, 14], "x":21.5, "y":2.5},
{"label":"/", "matrix": [2, 13], "x":22.5, "y":2.5},
{"label":",", "matrix": [6, 13], "x":23.5, "y":2.5},
{"label":"-", "matrix": [6, 14], "x":24.5, "y":2.5},
{"label":"+", "matrix": [7, 14], "x":24.5, "y":3.5},
{"label":"Enter", "matrix": [6, 0], "x":24.5, "y":4.5, "h":3},
{"label":".", "matrix": [7, 15], "x":23.5, "y":6.5},
{"label":"0", "matrix": [6, 1], "x":21.5, "y":6.5, "w":2},
{"label":"1", "matrix": [7, 1], "x":21.5, "y":5.5},
{"label":"2", "matrix": [6, 12], "x":22.5, "y":5.5},
{"label":"3", "matrix": [6, 11], "x":23.5, "y":5.5},
{"label":"4", "matrix": [4, 15], "x":21.5, "y":4.5},
{"label":"5", "matrix": [7, 12], "x":22.5, "y":4.5},
{"label":"6", "matrix": [7, 11], "x":23.5, "y":4.5},
{"label":"7", "matrix": [3, 14], "x":21.5, "y":3.5},
{"label":"8", "matrix": [3, 13], "x":22.5, "y":3.5},
{"label":"9", "matrix": [7, 13], "x":23.5, "y":3.5}
]
}
}
}

View File

@ -0,0 +1,45 @@
/* Copyright 2025 maxgpdx
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
** | F13 | F14 | F15 | F16 | | F17 | F18 | F19 | F20 | | F21 | F22 | F23 | F24 |
** | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 |
**
** | M1 | M2 | | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ~ | BS | | INS | HOM | PGU | | NML | / | , | - |
** | M3 | M4 | | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | ENT | | DEL | END | PGD | | 7 | 8 | 9 | + |
** | M5 | M6 | | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | \ | | | UP | | 4 | 5 | 6 | |
** | M7 | M8 | | SHIFT | Z | X | C | V | B | N | M | , | . | / | j | SHIFT | | LEF | MID | RIG | | 1 | 2 | 3 | ENT |
** | M9 | M10 | | CTRL | | ALT | SPACE | BS | SPACE | ALT | | CTRL | | DWN | | 0 | . | |
*/
[0] = LAYOUT(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, \
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
PB_1, PB_2, PB_3, PB_4, PB_5, PB_6, PB_7, PB_8, PB_9, PB_10, \
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
KC_LCTL, KC_LALT, KC_SPC, KC_BSPC, KC_SPC, KC_RALT, KC_RCTL, \
KC_INS, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, \
KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, \
KC_NUM, KC_PSLS, KC_PCMM, KC_PMNS, KC_PPLS, KC_PENT, KC_PDOT, KC_P0, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9
)
};

View File

@ -0,0 +1,55 @@
# Multistation
![multistation](https://i.imgur.com/Vkb3qoN.jpeg)
This is the firmware I used for my IBM 5556 Multistation Keyboard to convert it to USB using QMK. This is done through the MCU swap method, replacing the keyboard controller with a Raspberry Pi Pico wired into the keyboard matrix. This is unlikely to work with the later 2nd gen PCBs found on keyboards with PBT cylindrical keycaps. Note: buzzer is not implemented.
* Keyboard Maintainer: [maxgpdx](https://github.com/maxgpdx)
* Hardware Supported: Raspberry PI Pico, IBM 5556 Multistation keyboards with first gen PCB
* Hardware Availability: Yahoo Auctions JP
Make example for this keyboard (after setting up your build environment):
make handwired/multistation:default
Flashing example for this keyboard:
make handwired/multistation:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader:
* **Physical reset button**: Hold down the reset button while plugging in the Pi Pico
## Instructions:
* Desolder all components (resistors, capactiors, MCU, etc.) from original logic section of the keyboard
* Wire pins of Pi Pico to the matrix pins shown in the below table and matrix map
* Flash and test firmware
### Wiring:
| Row: | GPIO: | Col: | GPIO: |
| -------- | ------- | ------- | ------- |
| 0 | gp27 | 0 | gp6 |
| 1 | gp28 | 1 | gp7 |
| 2 | gp26 | 2 | gp8 |
| 3 | gp22 | 3 | gp9 |
| 4 | gp21 | 4 | gp10 |
| 5 | gp20 | 5 | gp11 |
| 6 | gp19 | 6 | gp12 |
| 7 | gp18 | 7 | gp13 |
| | | 8 | gp14 |
| | | 9 | gp15 |
| | | 10 | gp5 |
| | | 11 | gp0 |
| | | 12 | gp1 |
| | | 13 | gp2 |
| | | 14 | gp3 |
| | | 15 | gp4 |
![wiring](https://i.imgur.com/7PAu3PK.jpeg)