1
0
Fork 0

Consolidate modelm v2 (#14996)

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
nuess0r 2023-05-27 15:12:36 +02:00 committed by GitHub
parent e759230706
commit f98f8eedf0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
89 changed files with 293 additions and 105 deletions

View file

@ -0,0 +1,37 @@
/*
Copyright 2019 iw0rm3r
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/>.
*/
#pragma once
/* The Model M has no diodes */
#define MATRIX_HAS_GHOST
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View file

@ -0,0 +1,145 @@
{
"keyboard_name": "IBM Model M 101/102",
"manufacturer": "iw0rm3r",
"url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/ibm/model_m/teensypp",
"maintainer": "iw0rm3r",
"usb": {
"vid": "0xFEED",
"pid": "0x0000",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["C7", "C6", "C5", "C4", "C3", "C2", "C1", "C0", "E1", "E0", "D7", "D6", "D5", "D4", "D3", "D2"],
"rows": ["F7", "F6", "F5", "F4", "F3", "F2", "F1", "F0"]
},
"diode_direction": "ROW2COL",
"processor": "at90usb1286",
"bootloader": "halfkay",
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 2], "x": 0, "y": 0},
{"matrix": [2, 3], "x": 2, "y": 0},
{"matrix": [2, 4], "x": 3, "y": 0},
{"matrix": [1, 4], "x": 4, "y": 0},
{"matrix": [0, 4], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 8], "x": 7.5, "y": 0},
{"matrix": [1, 9], "x": 8.5, "y": 0},
{"matrix": [2, 9], "x": 9.5, "y": 0},
{"matrix": [2, 6], "x": 11, "y": 0},
{"matrix": [3, 6], "x": 12, "y": 0},
{"matrix": [3, 11], "x": 13, "y": 0},
{"matrix": [3, 12], "x": 14, "y": 0},
{"matrix": [3, 15], "x": 15.25, "y": 0},
{"matrix": [4, 15], "x": 16.25, "y": 0},
{"matrix": [6, 14], "x": 17.25, "y": 0},
{"matrix": [2, 2], "x": 0, "y": 1.5},
{"matrix": [3, 2], "x": 1, "y": 1.5},
{"matrix": [3, 3], "x": 2, "y": 1.5},
{"matrix": [3, 4], "x": 3, "y": 1.5},
{"matrix": [3, 5], "x": 4, "y": 1.5},
{"matrix": [2, 5], "x": 5, "y": 1.5},
{"matrix": [2, 7], "x": 6, "y": 1.5},
{"matrix": [3, 7], "x": 7, "y": 1.5},
{"matrix": [3, 8], "x": 8, "y": 1.5},
{"matrix": [3, 9], "x": 9, "y": 1.5},
{"matrix": [3, 10], "x": 10, "y": 1.5},
{"matrix": [2, 10], "x": 11, "y": 1.5},
{"matrix": [2, 8], "x": 12, "y": 1.5},
{"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2},
{"matrix": [2, 12], "x": 15.25, "y": 1.5},
{"matrix": [2, 14], "x": 16.25, "y": 1.5},
{"matrix": [2, 13], "x": 17.25, "y": 1.5},
{"matrix": [6, 11], "x": 18.5, "y": 1.5},
{"matrix": [6, 12], "x": 19.5, "y": 1.5},
{"matrix": [6, 13], "x": 20.5, "y": 1.5},
{"matrix": [7, 13], "x": 21.5, "y": 1.5},
{"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5},
{"matrix": [4, 2], "x": 1.5, "y": 2.5},
{"matrix": [4, 3], "x": 2.5, "y": 2.5},
{"matrix": [4, 4], "x": 3.5, "y": 2.5},
{"matrix": [4, 5], "x": 4.5, "y": 2.5},
{"matrix": [1, 5], "x": 5.5, "y": 2.5},
{"matrix": [1, 7], "x": 6.5, "y": 2.5},
{"matrix": [4, 7], "x": 7.5, "y": 2.5},
{"matrix": [4, 8], "x": 8.5, "y": 2.5},
{"matrix": [4, 9], "x": 9.5, "y": 2.5},
{"matrix": [4, 10], "x": 10.5, "y": 2.5},
{"matrix": [1, 10], "x": 11.5, "y": 2.5},
{"matrix": [1, 8], "x": 12.5, "y": 2.5},
{"matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5},
{"matrix": [2, 11], "x": 15.25, "y": 2.5},
{"matrix": [3, 14], "x": 16.25, "y": 2.5},
{"matrix": [3, 13], "x": 17.25, "y": 2.5},
{"matrix": [4, 11], "x": 18.5, "y": 2.5},
{"matrix": [4, 12], "x": 19.5, "y": 2.5},
{"matrix": [4, 13], "x": 20.5, "y": 2.5},
{"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2},
{"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5},
{"matrix": [5, 2], "x": 1.75, "y": 3.5},
{"matrix": [5, 3], "x": 2.75, "y": 3.5},
{"matrix": [5, 4], "x": 3.75, "y": 3.5},
{"matrix": [5, 5], "x": 4.75, "y": 3.5},
{"matrix": [0, 5], "x": 5.75, "y": 3.5},
{"matrix": [0, 7], "x": 6.75, "y": 3.5},
{"matrix": [5, 7], "x": 7.75, "y": 3.5},
{"matrix": [5, 8], "x": 8.75, "y": 3.5},
{"matrix": [5, 9], "x": 9.75, "y": 3.5},
{"matrix": [5, 10], "x": 10.75, "y": 3.5},
{"matrix": [0, 10], "x": 11.75, "y": 3.5},
{"matrix": [6, 10], "x": 12.75, "y": 3.5},
{"matrix": [6, 6], "x": 13.75, "y": 3.5, "w": 1.25},
{"matrix": [1, 11], "x": 18.5, "y": 3.5},
{"matrix": [1, 12], "x": 19.5, "y": 3.5},
{"matrix": [1, 13], "x": 20.5, "y": 3.5},
{"matrix": [1, 1], "x": 0, "y": 4.5, "w": 1.25},
{"matrix": [0, 3], "x": 1.25, "y": 4.5},
{"matrix": [6, 2], "x": 2.25, "y": 4.5},
{"matrix": [6, 3], "x": 3.25, "y": 4.5},
{"matrix": [6, 4], "x": 4.25, "y": 4.5},
{"matrix": [6, 5], "x": 5.25, "y": 4.5},
{"matrix": [7, 5], "x": 6.25, "y": 4.5},
{"matrix": [7, 7], "x": 7.25, "y": 4.5},
{"matrix": [6, 7], "x": 8.25, "y": 4.5},
{"matrix": [6, 8], "x": 9.25, "y": 4.5},
{"matrix": [6, 9], "x": 10.25, "y": 4.5},
{"matrix": [7, 10], "x": 11.25, "y": 4.5},
{"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75},
{"matrix": [0, 14], "x": 16.25, "y": 4.5},
{"matrix": [5, 11], "x": 18.5, "y": 4.5},
{"matrix": [5, 12], "x": 19.5, "y": 4.5},
{"matrix": [5, 13], "x": 20.5, "y": 4.5},
{"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5},
{"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5},
{"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7},
{"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5},
{"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5},
{"matrix": [7, 14], "x": 15.25, "y": 5.5},
{"matrix": [7, 11], "x": 16.25, "y": 5.5},
{"matrix": [7, 12], "x": 17.25, "y": 5.5},
{"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
{"matrix": [0, 13], "x": 20.5, "y": 5.5}
]
}
}
}

View file

@ -0,0 +1,27 @@
/* Copyright 2019 iw0rm3r
*
* 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] = {
[0] = LAYOUT( /* Base layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
};

View file

@ -0,0 +1 @@
# The default keymap for modelm101

View file

@ -0,0 +1,19 @@
/* Copyright 2019 iw0rm3r
*
* 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/>.
*/
#pragma once
// place overrides here

View file

@ -0,0 +1,43 @@
/* Copyright 2019 iw0rm3r
*
* 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] = {
[0] = LAYOUT( /* Base layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_CAPS,
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_APP, KC_PDOT
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}

View file

@ -0,0 +1,5 @@
# This is my personal keymap for modelm101
Caps Lock is mapped as LGUI (Windows key).
Num Enter is mapped as Caps Lock.
Num0 is mapped as App key (context menu).

View file

@ -0,0 +1,42 @@
# modelm101
![IBM Model M 101 ANSI/102 ISO](https://i.imgur.com/DAE3W7g.jpg)
This is a configuration for the QMK firmware for reversible conversion of IBM's Model M keyboards (common 101-key ANSI and 102-key ISO models) from stock, power-hungry controller, to a modern one, running the USB bus.
Configuration is build for the Atmel AT90USB1286 controller, which you can easily use on the Teensy++ 2.0 board (produced by PJRC).
Project is heavely based on 2 other projects:
1. Teensy++ 2.0-based custom Model M controller running TMK firmware ('modelm" by [lmorchard](https://blog.lmorchard.com/2016/02/21/modelm-controller/)); - had a few issues.
2. Teensy++ 2.0-based custom Model M 122-key controller running QMK firmware ("ibm122m" by [lukexorz](https://github.com/lukexorz)); - had wrong layout for 101/102-key boards and no status LED support.
For this conversion you will need:
1. Teensy++ 2.0 dev board itself (can be used a different dev board, but it will require some changes in configuration);
2. Ribbon connectors to connect the membrane to a dev board. Depending on your Model M variation, you will need 1 Trio-mate 16pin connector (6-520315-6 or 6-520415-6) and 1 Trio-mate 8pin connector (5-120628-8 or 5-520314-8), or 2 Trio-mate 16pin connectors;
3. Full-sized breadboard (without power rails; half-size should do, but full-sized one looks more native) or a PCB to wire everything up;
4. A bunch of jumper wires;
5. mini-USB male cable with any USB socket you want to use to connect Teensy inside the keyboard to your PC (I use short mini-USB male to mini-USB female cable);
6. (optional) Resistors for connecting status LEDs if your LED PCB doesn't have any;
7. (optional) Double-sided tape to fix USB socket on or inside the keyboard case.
Pins of the Teensy board you should use by default:
```
Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pins: C7 C6 C5 C4 C3 C2 C1 C0 E1 E0 D7 D6 D5 D4 D3 D2
--------------------------------------------------------
Rows: 1 2 3 4 5 6 7 8
Pins: F7 F6 F5 F4 F3 F2 F1 F0
--------------------------------------------------------
Status LEDs: CapsLock +5V ScrollLock NumLock
Pins: B6 5V B5 B4
```
Please note that some versions of Model M have LED connected with a ribbon cable, and not with separate wires.
* Keyboard Maintainer: [iw0rm3r](https://github.com/iw0rm3r)
* Hardware Supported: Teensy++ 2.0 board by PJRC
* Hardware Availability: https://www.pjrc.com/store/teensypp.html
Make example for this keyboard (after setting up your build environment):
make ibm/model_m/teensypp:default:teensy
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).

View file

@ -0,0 +1,12 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = no # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output

View file

@ -0,0 +1,36 @@
/* Copyright 2019 iw0rm3r
*
* 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 "quantum.h"
void led_init_ports(void) {
/* Setting status LEDs pins to output and +5V (off) */
setPinOutput(B4);
setPinOutput(B5);
setPinOutput(B6);
writePinHigh(B4);
writePinHigh(B5);
writePinHigh(B6);
}
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
writePin(B4, !led_state.num_lock);
writePin(B6, !led_state.caps_lock);
writePin(B5, !led_state.scroll_lock);
}
return res;
}