diff --git a/keyboards/handwired/multistation/keyboard.json b/keyboards/handwired/multistation/keyboard.json new file mode 100644 index 00000000000..090da0dfd72 --- /dev/null +++ b/keyboards/handwired/multistation/keyboard.json @@ -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} + + ] + } + } +} \ No newline at end of file diff --git a/keyboards/handwired/multistation/keymaps/default/keymap.c b/keyboards/handwired/multistation/keymaps/default/keymap.c new file mode 100644 index 00000000000..471e42ce513 --- /dev/null +++ b/keyboards/handwired/multistation/keymaps/default/keymap.c @@ -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 . + */ + +#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 + + ) +}; diff --git a/keyboards/handwired/multistation/readme.md b/keyboards/handwired/multistation/readme.md new file mode 100644 index 00000000000..0ba54442a2a --- /dev/null +++ b/keyboards/handwired/multistation/readme.md @@ -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)