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,42 @@
/*
Copyright 2018 REPLACE_WITH_YOUR_NAME
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
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define AUDIO_PIN_ALT B6
#define AUDIO_PIN C6
/*
* 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,169 @@
{
"keyboard_name": "IBM Model M 122 key",
"manufacturer": "IBM",
"url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/ibm/model_m_122/ibm122m",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
"pid": "0x0000",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["E6", "B7", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "E0", "E1", "C0", "C1", "C2", "C3", "C4", "C5", "C7", "F1"],
"rows": ["F0", "B5", "B4", "B3", "B2", "B1", "B0", "E7"]
},
"diode_direction": "ROW2COL",
"processor": "at90usb1286",
"bootloader": "halfkay",
"debounce": 15,
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 9], "x": 3.25, "y": 0},
{"matrix": [1, 9], "x": 4.25, "y": 0},
{"matrix": [1, 10], "x": 5.25, "y": 0},
{"matrix": [2, 9], "x": 6.25, "y": 0},
{"matrix": [3, 9], "x": 7.25, "y": 0},
{"matrix": [3, 10], "x": 8.25, "y": 0},
{"matrix": [4, 9], "x": 9.25, "y": 0},
{"matrix": [5, 9], "x": 10.25, "y": 0},
{"matrix": [5, 10], "x": 11.25, "y": 0},
{"matrix": [6, 9], "x": 12.25, "y": 0},
{"matrix": [7, 9], "x": 13.25, "y": 0},
{"matrix": [7, 10], "x": 14.25, "y": 0},
{"matrix": [0, 10], "x": 3.25, "y": 1},
{"matrix": [0, 11], "x": 4.25, "y": 1},
{"matrix": [1, 11], "x": 5.25, "y": 1},
{"matrix": [2, 10], "x": 6.25, "y": 1},
{"matrix": [2, 11], "x": 7.25, "y": 1},
{"matrix": [3, 11], "x": 8.25, "y": 1},
{"matrix": [4, 10], "x": 9.25, "y": 1},
{"matrix": [4, 11], "x": 10.25, "y": 1},
{"matrix": [5, 11], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [7, 11], "x": 14.25, "y": 1},
{"matrix": [3, 1], "x": 0, "y": 3},
{"matrix": [3, 2], "x": 1, "y": 3},
{"matrix": [3, 4], "x": 2.25, "y": 3},
{"matrix": [2, 4], "x": 3.25, "y": 3},
{"matrix": [2, 5], "x": 4.25, "y": 3},
{"matrix": [2, 6], "x": 5.25, "y": 3},
{"matrix": [2, 7], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [2, 8], "x": 9.25, "y": 3},
{"matrix": [2, 12], "x": 10.25, "y": 3},
{"matrix": [2, 13], "x": 11.25, "y": 3},
{"matrix": [2, 14], "x": 12.25, "y": 3},
{"matrix": [3, 14], "x": 13.25, "y": 3},
{"matrix": [3, 12], "x": 14.25, "y": 3},
{"matrix": [3, 15], "x": 15.25, "y": 3, "w": 2},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3},
{"matrix": [2, 16], "x": 19.5, "y": 3},
{"matrix": [2, 15], "x": 20.75, "y": 3},
{"matrix": [2, 17], "x": 21.75, "y": 3},
{"matrix": [2, 18], "x": 22.75, "y": 3},
{"matrix": [2, 0], "x": 23.75, "y": 3},
{"matrix": [2, 1], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
{"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"matrix": [4, 4], "x": 3.75, "y": 4},
{"matrix": [4, 5], "x": 4.75, "y": 4},
{"matrix": [4, 6], "x": 5.75, "y": 4},
{"matrix": [4, 7], "x": 6.75, "y": 4},
{"matrix": [5, 7], "x": 7.75, "y": 4},
{"matrix": [5, 8], "x": 8.75, "y": 4},
{"matrix": [4, 8], "x": 9.75, "y": 4},
{"matrix": [4, 12], "x": 10.75, "y": 4},
{"matrix": [4, 13], "x": 11.75, "y": 4},
{"matrix": [4, 14], "x": 12.75, "y": 4},
{"matrix": [5, 14], "x": 13.75, "y": 4},
{"matrix": [5, 12], "x": 14.75, "y": 4},
{"matrix": [6, 15], "x": 16, "y": 4, "w": 1.25, "h": 2},
{"matrix": [1, 16], "x": 17.5, "y": 4},
{"matrix": [5, 16], "x": 18.5, "y": 4},
{"matrix": [4, 16], "x": 19.5, "y": 4},
{"matrix": [4, 15], "x": 20.75, "y": 4},
{"matrix": [4, 17], "x": 21.75, "y": 4},
{"matrix": [4, 18], "x": 22.75, "y": 4},
{"matrix": [4, 0], "x": 23.75, "y": 4},
{"matrix": [5, 1], "x": 0, "y": 5},
{"matrix": [5, 2], "x": 1, "y": 5},
{"matrix": [6, 2], "x": 2.25, "y": 5, "w": 1.75},
{"matrix": [1, 4], "x": 4, "y": 5},
{"matrix": [1, 5], "x": 5, "y": 5},
{"matrix": [1, 6], "x": 6, "y": 5},
{"matrix": [1, 7], "x": 7, "y": 5},
{"matrix": [0, 7], "x": 8, "y": 5},
{"matrix": [0, 8], "x": 9, "y": 5},
{"matrix": [1, 8], "x": 10, "y": 5},
{"matrix": [1, 12], "x": 11, "y": 5},
{"matrix": [1, 13], "x": 12, "y": 5},
{"matrix": [1, 14], "x": 13, "y": 5},
{"matrix": [0, 14], "x": 14, "y": 5},
{"matrix": [6, 14], "x": 15, "y": 5},
{"matrix": [0, 16], "x": 18.5, "y": 5},
{"matrix": [1, 15], "x": 20.75, "y": 5},
{"matrix": [1, 17], "x": 21.75, "y": 5},
{"matrix": [1, 18], "x": 22.75, "y": 5},
{"matrix": [1, 0], "x": 23.75, "y": 5},
{"matrix": [1, 1], "x": 0, "y": 6},
{"matrix": [1, 2], "x": 1, "y": 6},
{"matrix": [7, 3], "x": 2.25, "y": 6, "w": 1.25},
{"matrix": [7, 4], "x": 3.5, "y": 6},
{"matrix": [6, 4], "x": 4.5, "y": 6},
{"matrix": [6, 5], "x": 5.5, "y": 6},
{"matrix": [6, 6], "x": 6.5, "y": 6},
{"matrix": [6, 7], "x": 7.5, "y": 6},
{"matrix": [7, 7], "x": 8.5, "y": 6},
{"matrix": [7, 8], "x": 9.5, "y": 6},
{"matrix": [6, 8], "x": 10.5, "y": 6},
{"matrix": [6, 12], "x": 11.5, "y": 6},
{"matrix": [6, 13], "x": 12.5, "y": 6},
{"matrix": [7, 14], "x": 13.5, "y": 6},
{"matrix": [6, 3], "x": 14.5, "y": 6, "w": 2.75},
{"matrix": [6, 0], "x": 17.5, "y": 6},
{"matrix": [0, 19], "x": 18.5, "y": 6},
{"matrix": [1, 19], "x": 19.5, "y": 6},
{"matrix": [6, 1], "x": 20.75, "y": 6},
{"matrix": [6, 17], "x": 21.75, "y": 6},
{"matrix": [6, 18], "x": 22.75, "y": 6},
{"matrix": [7, 19], "x": 23.75, "y": 6, "h": 2},
{"matrix": [0, 2], "x": 0, "y": 7},
{"matrix": [0, 1], "x": 1, "y": 7},
{"matrix": [0, 0], "x": 2.25, "y": 7, "w": 1.5},
{"matrix": [7, 0], "x": 4.75, "y": 7, "w": 1.5},
{"matrix": [7, 1], "x": 6.25, "y": 7, "w": 7},
{"matrix": [0, 3], "x": 13.25, "y": 7, "w": 1.5},
{"matrix": [7, 2], "x": 15.75, "y": 7, "w": 1.5},
{"matrix": [0, 15], "x": 18.5, "y": 7},
{"matrix": [7, 17], "x": 20.75, "y": 7, "w": 2},
{"matrix": [7, 18], "x": 22.75, "y": 7}
]
}
}
}

View file

@ -0,0 +1,29 @@
/* Copyright 2018 andresteare
*
* 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] = {
// Programmer's Dvorak
[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,
KC_ESC, KC_NO, 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_NO, KC_NO, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, 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_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_NO, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO, KC_NO, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
};

View file

@ -0,0 +1,19 @@
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
*
* 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 below

View file

@ -0,0 +1,29 @@
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
*
* 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] = {
// Original Layer
[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,
KC_ESC, KC_NO, 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_NO, KC_NO, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, 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_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_NO, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO, KC_NO, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
};

View file

@ -0,0 +1,2 @@
# The default keymap for ibm122m2
The 10 keys to the left of the alphanumerics are unbound (other than Escape on the top-left one) as I have no idea what is supposed to go there.

View file

@ -0,0 +1,19 @@
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
*
* 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,558 @@
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
*
* 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
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE,
DVP_ESC, // Grave escape basically i think
DVP_AMPR,
DVP_LBRACKET,
DVP_LCBR,
DVP_RCBR,
DVP_LPRN,
DVP_AT,
DVP_EQUAL,
DVP_ASTERISK,
DVP_RPRN,
DVP_PLUS,
DVP_RBRACKET,
DVP_EXLM,
DVP_HASH,
SHFT_DOT,
SHFT_COMMA
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Programmer's Dvorak
[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,
KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_NO, TO(2), KC_TAB, KC_SCLN, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, MO(4),
LCTL(KC_F), KC_LALT, KC_LSFT, KC_ESC, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
LCTL(KC_C), LCTL(KC_V), KC_LCTL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
// Qwerty layer + function
[1] = 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,
KC_ESC, TO(0), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_NO, KC_NO, 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_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, MO(3), 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_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO, KC_LALT,KC_LCTL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
// Orirginal Layer
[2] = 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,
KC_ESC, TO(1), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_NO, TO(0), 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_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, 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_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO, KC_LALT,KC_LCTL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
// Function Layer
[3] = LAYOUT(
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_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
MU_TOGG,KC_NO, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
MU_NEXT,KC_NO, KC_TAB, KC_NO, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, KC_NO, KC_PGUP, KC_DEL, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS,
KC_NO, KC_NO, KC_TRNS, KC_NO, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCLN, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC,
KC_NO, KC_LALT, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
KC_NO, KC_NO, KC_LCTL, KC_LGUI, KC_SPC, KC_RALT, KC_CAPS, KC_DOWN, LSFT(KC_A), KC_PDOT
),
// Literally just the numpad is different
[4] = 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,
KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, TO(2), KC_TAB, KC_SCLN, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO,
KC_NO, KC_NO, TO(0), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_MS_L, KC_NO, KC_MS_R, KC_TRNS,
LCTL(KC_F), KC_LALT, KC_LSFT, KC_NO, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_GT, KC_MS_D, KC_GT, KC_PENT,
LCTL(KC_C), LCTL(KC_V), KC_LCTL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_BTN1, KC_PDOT
),
/*
[4] = 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,
MU_TOGG,TO(0), KC_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
MU_NEXT,KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS,
KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC,
KC_NO, KC_LALT, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
KC_NO, KC_LGUI, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, LSFT(KC_A), KC_PDOT
),*/
/*[0] = LAYOUT(
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_NO,TO(1),KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1,
KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, TO(2),KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2,
KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3,
KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_BSPC,KC_4,KC_4,KC_4, KC_4,
KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5,
KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6,
KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7,
KC_8, KC_SPC,KC_8,KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, TO(1)
),
[1] = LAYOUT(
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, TO(0),KC_NO,KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, TO(2),KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_BSPC,KC_Q,KC_R,KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
KC_A, KC_SPC,KC_C,KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, TO(0)
),
[2] = LAYOUT(
KC_LCTL, KC_LALT, KC_C, KC_RALT, KC_E, KC_F, KC_G, KC_G, KC_H, KC_J, TO(0), TO(1), KC_M, KC_N, KC_QUOT, KC_DOWN, KC_UP, KC_R, KC_S, KC_ENTER,
KC_PPLS, KC_B, KC_C, KC_D, KC_A, KC_S, KC_D, KC_F, KC_J, KC_J, KC_K, KC_NO, KC_K, KC_L, KC_SCLN, KC_P4, KC_DEL, KC_P5, KC_P6, KC_RIGHT,
KC_PMNS, KC_1, KC_C, KC_D, KC_1, KC_2, KC_3, KC_4, KC_7, KC_J, KC_K, KC_L, KC_8, KC_9, KC_0, KC_NUM, KC_PGUP,KC_PSLS, KC_PAST, KC_T,
KC_A, KC_ESC, TO(0),KC_D, KC_GRV, KC_F, KC_G, KC_5, KC_6, KC_J, KC_K, KC_L, KC_EQL, KC_N, KC_MINUS, KC_BSPC, KC_INS, KC_HOME, KC_S, KC_T,
KC_PPLS, KC_NO, KC_TAB, KC_D, KC_Q, KC_W, KC_E, KC_R, KC_U, KC_J, KC_K, KC_L, KC_I, KC_O, KC_P, KC_P7, KC_PGDN,KC_P8, KC_P9, KC_T,
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_T, KC_Y, KC_J, KC_K, KC_L, KC_RBRC, KC_N, KC_LBRC, KC_P, KC_END, KC_R, KC_S, KC_T,
KC_LEFT, KC_P1, KC_CAPS, KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_M, KC_J, KC_K, KC_L, KC_COMMA, KC_DOT, KC_BSLS, KC_PENT, KC_Q, KC_P2, KC_P3, KC_T,
KC_LGUI, KC_SPACE, KC_RCTL, KC_LSFT, KC_E, KC_F, KC_G, KC_B, KC_N, KC_J, KC_K, KC_L, KC_M, KC_N, KC_SLSH, KC_P, KC_Q, KC_P0, KC_PDOT, KC_KP_ENTER
),*/
};
bool left_shift_down = false;
bool right_shift_down = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LEFT_SHIFT:
if (record->event.pressed)
{
left_shift_down = true;
return true;
}
else
{
left_shift_down = false;
return true;
}
break;
case KC_RIGHT_SHIFT:
if (record->event.pressed)
{
right_shift_down = true;
return true;
}
else
{
right_shift_down = false;
return true;
}
break;
case DVP_ESC:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
SEND_STRING("~");
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("$");
return false;
}
break;
case DVP_AMPR:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
SEND_STRING("%");
}
}
else
{
if(record->event.pressed)
SEND_STRING("&");
return false;
}
break;
case DVP_LBRACKET:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_7);
unregister_code(KC_7);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("[");
return false;
}
break;
case DVP_LCBR:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_5);
unregister_code(KC_5);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("{");
return false;
}
break;
case DVP_RCBR:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_3);
unregister_code(KC_3);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("}");
return false;
}
break;
case DVP_LPRN:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_1);
unregister_code(KC_1);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("(");
return false;
}
break;
//
case DVP_AT:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_LEFT_SHIFT);
register_code(KC_6);
unregister_code(KC_6);
unregister_code(KC_LEFT_SHIFT);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("@");
return false;
}
break;
case DVP_EQUAL:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_9);
unregister_code(KC_9);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("=");
return false;
}
break;
case DVP_ASTERISK:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_0);
unregister_code(KC_0);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING("*");
return false;
}
break;
case DVP_RPRN:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_2);
unregister_code(KC_2);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
return false;
}
else
{
if(record->event.pressed)
SEND_STRING(")");
return false;
}
break;
case DVP_PLUS:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_4);
unregister_code(KC_4);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
}
else
{
if(record->event.pressed)
SEND_STRING("+");
}
return false;
break;
case DVP_RBRACKET:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_6);
unregister_code(KC_6);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
}
else
{
if(record->event.pressed)
SEND_STRING("]");
}
return false;
break;
case DVP_EXLM:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_8);
unregister_code(KC_8);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
}
else
{
if(record->event.pressed)
SEND_STRING("!");
}
return false;
break;
case DVP_HASH:
if (left_shift_down || right_shift_down)
{
if(record->event.pressed)
{
if(left_shift_down)
unregister_code(KC_LEFT_SHIFT);
if(right_shift_down)
unregister_code(KC_RIGHT_SHIFT);
register_code(KC_GRAVE);
unregister_code(KC_GRAVE);
if(left_shift_down)
register_code(KC_LEFT_SHIFT);
if(right_shift_down)
register_code(KC_RIGHT_SHIFT);
}
}
else
{
if(record->event.pressed)
SEND_STRING("#");
}
return false;
break;
case SHFT_DOT:
if(record->event.pressed)
SEND_STRING(">");
break;
case SHFT_COMMA:
if(record->event.pressed)
SEND_STRING("<");
break;
}
return true;
}
void led_set_user(uint8_t usb_led) {
}

View file

@ -0,0 +1,2 @@
# Lukaus' for ibm122m2
Programmer's Dvorak as the default layer with a Qwerty layer that can access a function layer. Also includes the default layout, slightly modified

View file

@ -0,0 +1,63 @@
/* Copyright 2018 andresteare
*
* 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] = {
// Programmer's Dvorak
[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,
KC_ESC, KC_NO, 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_NO, KC_NO, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, 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_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_NO, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO, KC_NO, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
// Qwerty layer + function
[1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
// Orirginal Layer
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
// Function Layer
[3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View file

@ -0,0 +1 @@
VIA_ENABLE = yes

View file

@ -0,0 +1,31 @@
# ibm122m
![IBM Model M 122 key](https://i.imgur.com/Oo3Ozqz.jpg)
This is a keymap for the IBM Model M 122 key terminal keyboard running on a Teensy++ 2.0
I wired it to weird pins on mine (mainly to accomodate two speakers), so make sure to update the pin arrays.
* Keyboard Maintainer: [Luke Stanley](https://github.com/lukexorz)
* Hardware Supported: Teensy++ 2.0
* Hardware Availability: https://www.pjrc.com/store/teensypp.html
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 17 18 19 20
Pins: E6 B7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 C0 C1 C2 C3 C4 C5 C7 F1
--------------------------------------------------------
Rows: 1 2 3 4 5 6 7 8
Pins: F0 B5 B4 B3 B2 B1 B0 E7
--------------------------------------------------------
Status LEDs: CapsLock +5V ScrollLock NumLock
Pins: N/A 5V N/A N/A
--------------------------------------------------------
Speaker: 1+ 1- 2+ 2-
Pins: C6 GND B6 GND
```
Make example for this keyboard (after setting up your build environment):
make ibm/model_m_122/ibm122m:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.

View file

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

View file

@ -0,0 +1,13 @@
{
"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"]
},
"diode_direction": "ROW2COL",
"processor": "STM32F411",
"bootloader": "stm32-dfu",
"board": "BLACKPILL_STM32_F411"
}

View file

@ -0,0 +1,3 @@
# BlackPill controller for m122-3270
This directory contains the BlackPill-specific definitions for the M122-3270 keyboard.

View file

@ -0,0 +1,12 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # 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,12 @@
{
"usb": {
"device_version": "0.0.3"
},
"matrix_pins": {
"cols": ["B1", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "B0", "A10", "A7", "A6", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9"],
"rows": ["C13", "C14", "C15", "A1", "A2", "A3", "A4", "A5"]
},
"diode_direction": "ROW2COL",
"processor": "STM32F103",
"bootloader": "stm32duino"
}

View file

@ -0,0 +1,2 @@
# BluePill controller for m122-3270
This directory contains the BluePill-specific definitions for the M122-3270 keyboard.

View file

@ -0,0 +1,161 @@
{
"keyboard_name": "Model M PC/3270 122 key",
"manufacturer": "IBM",
"url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/ibm/model_m_122/m122_3270",
"maintainer": "jmaynard",
"usb": {
"vid": "0x1209",
"pid": "0x3270",
"max_power": 100
},
"debounce": 15,
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 9], "x": 3.25, "y": 0},
{"matrix": [1, 9], "x": 4.25, "y": 0},
{"matrix": [1, 10], "x": 5.25, "y": 0},
{"matrix": [2, 9], "x": 6.25, "y": 0},
{"matrix": [3, 9], "x": 7.25, "y": 0},
{"matrix": [3, 10], "x": 8.25, "y": 0},
{"matrix": [4, 9], "x": 9.25, "y": 0},
{"matrix": [5, 9], "x": 10.25, "y": 0},
{"matrix": [5, 10], "x": 11.25, "y": 0},
{"matrix": [6, 9], "x": 12.25, "y": 0},
{"matrix": [7, 9], "x": 13.25, "y": 0},
{"matrix": [7, 10], "x": 14.25, "y": 0},
{"matrix": [0, 10], "x": 3.25, "y": 1},
{"matrix": [0, 11], "x": 4.25, "y": 1},
{"matrix": [1, 11], "x": 5.25, "y": 1},
{"matrix": [2, 10], "x": 6.25, "y": 1},
{"matrix": [2, 11], "x": 7.25, "y": 1},
{"matrix": [3, 11], "x": 8.25, "y": 1},
{"matrix": [4, 10], "x": 9.25, "y": 1},
{"matrix": [4, 11], "x": 10.25, "y": 1},
{"matrix": [5, 11], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [7, 11], "x": 14.25, "y": 1},
{"matrix": [3, 1], "x": 0, "y": 3},
{"matrix": [3, 2], "x": 1, "y": 3},
{"matrix": [3, 4], "x": 2.25, "y": 3},
{"matrix": [2, 4], "x": 3.25, "y": 3},
{"matrix": [2, 5], "x": 4.25, "y": 3},
{"matrix": [2, 6], "x": 5.25, "y": 3},
{"matrix": [2, 7], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [2, 8], "x": 9.25, "y": 3},
{"matrix": [2, 12], "x": 10.25, "y": 3},
{"matrix": [2, 13], "x": 11.25, "y": 3},
{"matrix": [2, 14], "x": 12.25, "y": 3},
{"matrix": [3, 14], "x": 13.25, "y": 3},
{"matrix": [3, 12], "x": 14.25, "y": 3},
{"matrix": [3, 15], "x": 15.25, "y": 3, "w": 2},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3},
{"matrix": [2, 16], "x": 19.5, "y": 3},
{"matrix": [2, 15], "x": 20.75, "y": 3},
{"matrix": [2, 17], "x": 21.75, "y": 3},
{"matrix": [2, 18], "x": 22.75, "y": 3},
{"matrix": [2, 0], "x": 23.75, "y": 3},
{"matrix": [2, 1], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
{"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
{"matrix": [4, 4], "x": 3.75, "y": 4},
{"matrix": [4, 5], "x": 4.75, "y": 4},
{"matrix": [4, 6], "x": 5.75, "y": 4},
{"matrix": [4, 7], "x": 6.75, "y": 4},
{"matrix": [5, 7], "x": 7.75, "y": 4},
{"matrix": [5, 8], "x": 8.75, "y": 4},
{"matrix": [4, 8], "x": 9.75, "y": 4},
{"matrix": [4, 12], "x": 10.75, "y": 4},
{"matrix": [4, 13], "x": 11.75, "y": 4},
{"matrix": [4, 14], "x": 12.75, "y": 4},
{"matrix": [5, 14], "x": 13.75, "y": 4},
{"matrix": [5, 12], "x": 14.75, "y": 4},
{"matrix": [6, 15], "x": 16, "y": 4, "w": 1.25, "h": 2},
{"matrix": [1, 16], "x": 17.5, "y": 4},
{"matrix": [5, 16], "x": 18.5, "y": 4},
{"matrix": [4, 16], "x": 19.5, "y": 4},
{"matrix": [4, 15], "x": 20.75, "y": 4},
{"matrix": [4, 17], "x": 21.75, "y": 4},
{"matrix": [4, 18], "x": 22.75, "y": 4},
{"matrix": [4, 0], "x": 23.75, "y": 4},
{"matrix": [5, 1], "x": 0, "y": 5},
{"matrix": [5, 2], "x": 1, "y": 5},
{"matrix": [6, 2], "x": 2.25, "y": 5, "w": 1.75},
{"matrix": [1, 4], "x": 4, "y": 5},
{"matrix": [1, 5], "x": 5, "y": 5},
{"matrix": [1, 6], "x": 6, "y": 5},
{"matrix": [1, 7], "x": 7, "y": 5},
{"matrix": [0, 7], "x": 8, "y": 5},
{"matrix": [0, 8], "x": 9, "y": 5},
{"matrix": [1, 8], "x": 10, "y": 5},
{"matrix": [1, 12], "x": 11, "y": 5},
{"matrix": [1, 13], "x": 12, "y": 5},
{"matrix": [1, 14], "x": 13, "y": 5},
{"matrix": [0, 14], "x": 14, "y": 5},
{"matrix": [6, 14], "x": 15, "y": 5},
{"matrix": [0, 16], "x": 18.5, "y": 5},
{"matrix": [1, 15], "x": 20.75, "y": 5},
{"matrix": [1, 17], "x": 21.75, "y": 5},
{"matrix": [1, 18], "x": 22.75, "y": 5},
{"matrix": [1, 0], "x": 23.75, "y": 5},
{"matrix": [1, 1], "x": 0, "y": 6},
{"matrix": [1, 2], "x": 1, "y": 6},
{"matrix": [7, 3], "x": 2.25, "y": 6, "w": 1.25},
{"matrix": [7, 4], "x": 3.5, "y": 6},
{"matrix": [6, 4], "x": 4.5, "y": 6},
{"matrix": [6, 5], "x": 5.5, "y": 6},
{"matrix": [6, 6], "x": 6.5, "y": 6},
{"matrix": [6, 7], "x": 7.5, "y": 6},
{"matrix": [7, 7], "x": 8.5, "y": 6},
{"matrix": [7, 8], "x": 9.5, "y": 6},
{"matrix": [6, 8], "x": 10.5, "y": 6},
{"matrix": [6, 12], "x": 11.5, "y": 6},
{"matrix": [6, 13], "x": 12.5, "y": 6},
{"matrix": [7, 14], "x": 13.5, "y": 6},
{"matrix": [6, 3], "x": 14.5, "y": 6, "w": 2.75},
{"matrix": [6, 0], "x": 17.5, "y": 6},
{"matrix": [0, 19], "x": 18.5, "y": 6},
{"matrix": [1, 19], "x": 19.5, "y": 6},
{"matrix": [6, 1], "x": 20.75, "y": 6},
{"matrix": [6, 17], "x": 21.75, "y": 6},
{"matrix": [6, 18], "x": 22.75, "y": 6},
{"matrix": [7, 19], "x": 23.75, "y": 6, "h": 2},
{"matrix": [0, 2], "x": 0, "y": 7},
{"matrix": [0, 1], "x": 1, "y": 7},
{"matrix": [0, 0], "x": 2.25, "y": 7, "w": 1.5},
{"matrix": [7, 0], "x": 4.75, "y": 7, "w": 1.5},
{"matrix": [7, 1], "x": 6.25, "y": 7, "w": 7},
{"matrix": [0, 3], "x": 13.25, "y": 7, "w": 1.5},
{"matrix": [7, 2], "x": 15.75, "y": 7, "w": 1.5},
{"matrix": [0, 15], "x": 18.5, "y": 7},
{"matrix": [7, 17], "x": 20.75, "y": 7, "w": 2},
{"matrix": [7, 18], "x": 22.75, "y": 7}
]
}
}
}

View file

@ -0,0 +1,214 @@
/* Copyright 2021 James R. Maynard III <jaymaynard@gmail.com>
*
* 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
enum custom_keycodes {
JM_DOT = SAFE_RANGE, // . both shifted and unshifted
JM_COMM, // , both shifted and unshifted
JM_GRLS, // < and > on one key
JM_CBRC, // { and } on one key
JM_CENT, // cent sign and ! on one key
JM_DPA1, // DUP/PA1,
JM_FPA2, // FldMk/PA2,
JM_JUMP, // JUMP/PA3,
JM_DEL, // Delete
JM_NSLC // NumLock/ScrollLock on one key
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// PC/3270 layout: PC legends (blue)
[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,
KC_NO, KC_NO, 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_NO, KC_PGUP, KC_PGDN, KC_ESC, JM_NSLC, KC_PAST, KC_PSLS,
KC_NO, KC_PAUS, 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_END, KC_INS, KC_DEL, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO, KC_NO, 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_UP, KC_P4, KC_P5, KC_P6, KC_PMNS,
KC_PSCR, KC_NO, KC_LSFT, JM_GRLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_HOME, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
MO(2), KC_LGUI, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
),
// PC/3270 layout: 3270 legends (black), with x3270 keycodes
[1] = LAYOUT(
A(KC_F1), A(KC_F2), A(KC_F3), A(KC_F4), A(KC_F5), A(KC_F6), A(KC_F7), A(KC_F8), A(KC_F9), A(KC_F10), A(KC_F11), A(KC_F12),
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
A(KC_A), A(KC_C), 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, JM_DPA1, JM_FPA2, JM_JUMP, KC_ESC, JM_NSLC, KC_PCMM, KC_SPC,
KC_CRSEL, KC_PAUS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JM_CENT, KC_BSLS, S(KC_ENT), S(KC_TAB), KC_INS, JM_DEL, KC_P7, KC_P8, KC_P9, KC_TAB,
KC_EXSEL, A(KC_E), KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, JM_CBRC, KC_UP, KC_P4, KC_P5, KC_P6, KC_PMNS,
A(KC_B), C(KC_C), KC_LSFT, JM_GRLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JM_COMM, JM_DOT, KC_SLSH, KC_RSFT, KC_LEFT, A(KC_H), KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
MO(2), KC_LGUI, A(KC_R), KC_LALT, KC_SPC, KC_RALT, KC_ENT, KC_DOWN, KC_P0, KC_PDOT
),
// Function layer, accessed by the Zoom key
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
DF(0), DF(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, MO(3), _______, _______, _______, _______, _______
),
// Firmware layer, accessed by the Zoom/Space key pair (hold both down)
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, EE_CLR, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
bool left_shift_down = false;
bool right_shift_down = false;
bool left_alt_down = false;
bool right_alt_down = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LSFT:
left_shift_down = record->event.pressed;
break;
case KC_RSFT:
right_shift_down = record->event.pressed;
break;
case KC_LALT:
left_alt_down = record->event.pressed;
break;
case KC_RALT:
right_alt_down = record->event.pressed;
break;
case JM_GRLS:
if (left_shift_down || right_shift_down) {
if(record->event.pressed) {
SEND_STRING(">");
}
} else {
if(record->event.pressed) {
SEND_STRING("<");
}
}
return false;
case JM_CBRC:
if (left_shift_down || right_shift_down) {
if (record->event.pressed) {
SEND_STRING("}");
}
} else {
if(record->event.pressed) {
SEND_STRING("{");
}
}
return false;
case JM_CENT:
if (left_shift_down || right_shift_down) {
if (record->event.pressed) {
SEND_STRING("!");
}
} else { // This assumes that the Linux Compose has been set to Scroll Lock
if (record->event.pressed) {
tap_code16(KC_SCRL);
SEND_STRING("c/");
}
}
return false;
case JM_COMM:
if (record->event.pressed){
SEND_STRING(",");
}
return false;
case JM_DOT:
if (record->event.pressed) {
SEND_STRING(".");
}
return false;
case JM_DPA1:
if (left_shift_down || right_shift_down) {
if (record->event.pressed) {
tap_code16(C(KC_D));
}
return false;
} else {
if(record->event.pressed) {
tap_code16(A(KC_1));
}
return false;
}
break;
case JM_FPA2:
if (left_shift_down || right_shift_down) {
if (record->event.pressed) {
tap_code16(C(KC_F));
}
return false;
} else {
if(record->event.pressed) {
tap_code16(A(KC_2));
}
return false;
}
break;
case JM_JUMP:
if (record->event.pressed) {
if (left_alt_down || right_alt_down) {
SEND_STRING("3");
}
}
return false;
case JM_DEL:
if (record->event.pressed) {
if (left_alt_down || right_alt_down) {
unregister_code(KC_LALT);
unregister_code(KC_RALT);
tap_code16(C(KC_W));
if (left_alt_down) {
register_code(KC_LALT);
}
if (right_alt_down) {
register_code(KC_RALT);
}
} else {
tap_code16(KC_DEL);
}
}
return false;
case JM_NSLC:
if (left_shift_down || right_shift_down) {
if (record->event.pressed) {
register_code(KC_NUM_LOCK);
}
else {
unregister_code(KC_NUM_LOCK);
}
} else {
if (record->event.pressed) {
register_code(KC_SCRL);
}
else {
unregister_code(KC_SCRL);
}
}
return false;
}
return true;
}

View file

@ -0,0 +1,35 @@
# Default keymap for m122-3270
This keymap is intended to make the PC/3270 122-key IBM keyboard work as closely as possible to the standard
PC/3270 keyboard's (part number 1397000) original mapping. Two layers are defined: layer 0 is the PC layout,
using the blue legends on the PC/3270 keys (as shipped by Unicomp; I don't have the original keycaps, and I
know there are a few differences), while layer 1 is the 3270 layout, with keycodes selected to make the `x3270`
suite do the right thing with each key as pressed. The idea here is, eventually, to get `x3270` to
automatically shift the keyboard to layer 1 when it gains focus.
When layer 0 is active, the upper left key of the 10-key pad is Escape, the Reset and Enter keys are Control, and
the comma and dot keys act like normal PC keys (< and >, repectively, when shifted). The Ctrl key (bottom right
of the left-side 10-key cluster) is always the left GUI key. PA2 and Jump/PA3 are PgUp and PgDn, respectively,
and the backtab key is End. The Rule/Home key is Home. The key next to the Escape key is Scroll Lock when unshifted,
and Num Lock when shifted.
When layer 1 is active, the keys do their labeled functions. The only keys that don't do anything are CrSel,
ExSel, and Jump, though only a few of the alternate functions (on the front of the keys) work: left/right/delete
word and PA3. The rest aren't emulated by x3270. Many of the keys that have function in PC mode will *not* have
that same function in 3270 mode, since x3270 uses different keystrokes to accomplish the same function.
To manually switch to layer 1, hold the Zoom key (the one on the far lower left of the keyboard) and press Clear
(the one at the top right of that same block of 10 keys); to switch back to layer 0, hold the Zoom key and hit
Attn (the one at the top left of that block of 10). Holding the Zoom key and the spacebar gets you to keys that
control QMK itself: Zoom-space-R resets to the bootloader, Zoom-space-E erases the EEPROM (which currently does
nothing), and Zoom-space-D turns the debugger on and off.
Note that you need to set your Linux system to use the Scroll Lock key as the Compose key in order to get the
cent sign to register as intended, and add the following lines to a file in your home directory named `.x3270pro`
to make Dup and Field Mark work:
```
x3270.keymap.m122: #override \
Ctrl<Key>F: FieldMark()\n\
Ctrl<Key>D: Dup()
```
You need to then invoke `x3270` with the parameter `-keymap m122` to activate those definitions.

View file

@ -0,0 +1,33 @@
# m122-3270
![IBM Model M 122 key](https://i.imgur.com/Oo3Ozqzh.jpg)
This is a replacement controller for the IBM Model M 122 key terminal keyboard
running on a STM32F411 BlackPill, intended to act as closely to the 3270
keyboard's functioning as possible while still being usable on a PC.
* Keyboard Maintainer: [Jay Maynard](https://github.com/jmaynard)
* Hardware Supported: BlackPill STM32F411, Teensy++ 2.0
* Hardware Availability: [BlackPill](https://www.adafruit.com/product/4877), [Teensy](https://www.pjrc.com/store/teensypp.html)
Make example for this keyboard (after setting up your build environment):
make ibm/model_m_122/m122_3270/blackpill:default
make ibm/model_m_122/m122_3270/bluepill:default
make ibm/model_m_122/m122_3270/teensy:default
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).
A schematic and Gerber files are publicly available for those wishing to have
carrier boards made professionally instead of handwiring things. The M122
matrix connectors plug right into it. It can be found at
https://github.com/jmaynard/tronguylabs-m122-blackpill.
This is derived from Luke Stanley's handwired/ibm122m keyboard, with my own
keymapping and rework of the I/O for the BlackPill. There's also a version for
the Teensy++ 2.0, since that was my original design and I still use one on one
board, even though I switched to the BlackPill for future-proofing.
The Teensy++ 2.0 is not recommended for new designs.

View file

@ -0,0 +1,12 @@
{
"usb": {
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["B5", "B6", "B7", "D0", "D1", "D2", "D3", "D4", "D5", "D7", "E0", "E1", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7"],
"rows": ["F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7"]
},
"diode_direction": "ROW2COL",
"processor": "at90usb1286",
"bootloader": "halfkay"
}

View file

@ -0,0 +1,3 @@
# Teensy controller for m122-3270
This directory contains the Teensy++ 2.0-specific definitions for the M122-3270 keyboard.

View file

@ -0,0 +1,12 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # 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,24 @@
# IBM Model M Terminal with 122 keys
This is the parent directory for all projects that replace the controller
of IBM's Model M terminal keyboard with 122 keys and then run QMK on it.
These controllers differ in their use of microcontrollers, connection (mainly
USB) optional speakers etc.
Some of them can be bought fully assembled others are do-it-yourself.
## Warning - Model M Variants
**Not all of these projects will fit into your keyboard!**
As the Model M was produced over several years there are many variants of the
controller PCB. Check what fits your keyboard before you build/order one.
The variants built for PCs differ in:
* PCB size
* Connectors (8/12 pin flex, location)
* Ground wire connector location
Additionally IBM built Model M variants with 101/102 keys, the
space saving keyboard (SSK, 84-key) etc.