summaryrefslogtreecommitdiffstats
path: root/keyboards/mt/mt980
diff options
context:
space:
mode:
authorpeepeetee <43021794+peepeetee@users.noreply.github.com>2022-04-19 18:06:35 +0800
committerGitHub <noreply@github.com>2022-04-19 20:06:35 +1000
commitcff489bfdb2752956292c1e9adf1b4223814c267 (patch)
tree63d822173219b5088185b10be8d62baca81ead3e /keyboards/mt/mt980
parente13aefe41d235af9e59efdefa46e2934e36eec7a (diff)
move 麦田 boards into /mt (#16095)
Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'keyboards/mt/mt980')
-rw-r--r--keyboards/mt/mt980/config.h56
-rw-r--r--keyboards/mt/mt980/info.json114
-rw-r--r--keyboards/mt/mt980/keymaps/default/keymap.c21
-rw-r--r--keyboards/mt/mt980/keymaps/walker/config.h5
-rw-r--r--keyboards/mt/mt980/keymaps/walker/keymap.c168
-rw-r--r--keyboards/mt/mt980/keymaps/walker/rules.mk1
-rw-r--r--keyboards/mt/mt980/mt980.c1
-rw-r--r--keyboards/mt/mt980/mt980.h25
-rw-r--r--keyboards/mt/mt980/readme.md14
-rw-r--r--keyboards/mt/mt980/rules.mk19
10 files changed, 424 insertions, 0 deletions
diff --git a/keyboards/mt/mt980/config.h b/keyboards/mt/mt980/config.h
new file mode 100644
index 0000000000..ff6c5807df
--- /dev/null
+++ b/keyboards/mt/mt980/config.h
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Wheat Field Peripherals
+#define PRODUCT MT980
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 9
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B7, B3, B2, B1, B0, E6, F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+#define LED_NUM_LOCK_PIN C6
+#define LED_CAPS_LOCK_PIN C7
+#define LED_SCROLL_LOCK_PIN B5
+#define LED_PIN_ON_STATE 0
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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 RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 24
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 185
+#endif
+
+/* Place bootmagic key on Esc */
+#define BOOTMAGIC_LITE_ROW 5
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/mt/mt980/info.json b/keyboards/mt/mt980/info.json
new file mode 100644
index 0000000000..be89ec8fc0
--- /dev/null
+++ b/keyboards/mt/mt980/info.json
@@ -0,0 +1,114 @@
+{
+ "keyboard_name": "mt980",
+ "url": "https://shop110310565.taobao.com",
+ "maintainer": "walkerstop",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K50", "x":0, "y":0},
+ {"label":"K52", "x":1.25, "y":0},
+ {"label":"K53", "x":2.25, "y":0},
+ {"label":"K54", "x":3.25, "y":0},
+ {"label":"K55", "x":4.25, "y":0},
+ {"label":"K57", "x":5.5, "y":0},
+ {"label":"K58", "x":6.5, "y":0},
+ {"label":"KB8", "x":7.5, "y":0},
+ {"label":"KB7", "x":8.5, "y":0},
+ {"label":"KB5", "x":9.75, "y":0},
+ {"label":"KB4", "x":10.75, "y":0},
+ {"label":"KB3", "x":11.75, "y":0},
+ {"label":"KB6", "x":12.75, "y":0},
+ {"label":"K51", "x":14, "y":0},
+ {"label":"KB2", "x":15.5, "y":0},
+ {"label":"KB1", "x":16.5, "y":0},
+ {"label":"KB0", "x":17.5, "y":0},
+ {"label":"K63", "x":18.5, "y":0},
+ {"label":"K40", "x":0, "y":1.5},
+ {"label":"K41", "x":1, "y":1.5},
+ {"label":"K42", "x":2, "y":1.5},
+ {"label":"K43", "x":3, "y":1.5},
+ {"label":"K44", "x":4, "y":1.5},
+ {"label":"K45", "x":5, "y":1.5},
+ {"label":"K46", "x":6, "y":1.5},
+ {"label":"K47", "x":7, "y":1.5},
+ {"label":"K48", "x":8, "y":1.5},
+ {"label":"KA8", "x":9, "y":1.5},
+ {"label":"KA7", "x":10, "y":1.5},
+ {"label":"KA5", "x":11, "y":1.5},
+ {"label":"KA4", "x":12, "y":1.5},
+ {"label":"KA3", "x":13, "y":1.5},
+ {"label":"KA6", "x":14, "y":1.5},
+ {"label":"KA2", "x":15.5, "y":1.5},
+ {"label":"KA1", "x":16.5, "y":1.5},
+ {"label":"KA0", "x":17.5, "y":1.5},
+ {"label":"K64", "x":18.5, "y":1.5},
+ {"label":"K30", "x":0, "y":2.5, "w":1.5},
+ {"label":"K31", "x":1.5, "y":2.5},
+ {"label":"K32", "x":2.5, "y":2.5},
+ {"label":"K33", "x":3.5, "y":2.5},
+ {"label":"K34", "x":4.5, "y":2.5},
+ {"label":"K35", "x":5.5, "y":2.5},
+ {"label":"K36", "x":6.5, "y":2.5},
+ {"label":"K37", "x":7.5, "y":2.5},
+ {"label":"K38", "x":8.5, "y":2.5},
+ {"label":"K98", "x":9.5, "y":2.5},
+ {"label":"K97", "x":10.5, "y":2.5},
+ {"label":"K95", "x":11.5, "y":2.5},
+ {"label":"K94", "x":12.5, "y":2.5},
+ {"label":"K84", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K96", "x":15.5, "y":2.5},
+ {"label":"K92", "x":16.5, "y":2.5},
+ {"label":"K91", "x":17.5, "y":2.5},
+ {"label":"K90", "x":18.5, "y":2.5},
+ {"label":"K20", "x":0, "y":3.5, "w":1.75},
+ {"label":"K21", "x":1.75, "y":3.5},
+ {"label":"K22", "x":2.75, "y":3.5},
+ {"label":"K23", "x":3.75, "y":3.5},
+ {"label":"K24", "x":4.75, "y":3.5},
+ {"label":"K25", "x":5.75, "y":3.5},
+ {"label":"K26", "x":6.75, "y":3.5},
+ {"label":"K27", "x":7.75, "y":3.5},
+ {"label":"K28", "x":8.75, "y":3.5},
+ {"label":"K88", "x":9.75, "y":3.5},
+ {"label":"K87", "x":10.75, "y":3.5},
+ {"label":"K85", "x":11.75, "y":3.5},
+ {"label":"K93", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K86", "x":15.5, "y":3.5},
+ {"label":"K82", "x":16.5, "y":3.5},
+ {"label":"K81", "x":17.5, "y":3.5},
+ {"label":"K80", "x":18.5, "y":3.5},
+ {"label":"K10", "x":0, "y":4.5, "w":1.25},
+ {"label":"K11", "x":1.25, "y":4.5},
+ {"label":"K12", "x":2.25, "y":4.5},
+ {"label":"K13", "x":3.25, "y":4.5},
+ {"label":"K14", "x":4.25, "y":4.5},
+ {"label":"K15", "x":5.25, "y":4.5},
+ {"label":"K16", "x":6.25, "y":4.5},
+ {"label":"K17", "x":7.25, "y":4.5},
+ {"label":"K18", "x":8.25, "y":4.5},
+ {"label":"K78", "x":9.25, "y":4.5},
+ {"label":"K77", "x":10.25, "y":4.5},
+ {"label":"K75", "x":11.25, "y":4.5},
+ {"label":"K74", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"K73", "x":14.25, "y":4.75},
+ {"label":"K76", "x":15.5, "y":4.5},
+ {"label":"K72", "x":16.5, "y":4.5},
+ {"label":"K71", "x":17.5, "y":4.5},
+ {"label":"K70", "x":18.5, "y":4.5},
+ {"label":"K00", "x":0, "y":5.5, "w":1.25},
+ {"label":"K01", "x":1.25, "y":5.5},
+ {"label":"K02", "x":2.25, "y":5.5, "w":1.25},
+ {"label":"K06", "x":3.5, "y":5.5, "w":6.25},
+ {"label":"K08", "x":9.75, "y":5.5},
+ {"label":"K07", "x":10.75, "y":5.5},
+ {"label":"K05", "x":11.75, "y":5.5, "w":1.25},
+ {"label":"K04", "x":13.25, "y":5.75},
+ {"label":"K03", "x":14.25, "y":5.75},
+ {"label":"K66", "x":15.25, "y":5.75},
+ {"label":"K62", "x":16.5, "y":5.5},
+ {"label":"K61", "x":17.5, "y":5.5},
+ {"label":"K60", "x":18.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mt/mt980/keymaps/default/keymap.c b/keyboards/mt/mt980/keymaps/default/keymap.c
new file mode 100644
index 0000000000..504233a983
--- /dev/null
+++ b/keyboards/mt/mt980/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ 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_NO, KC_INS, KC_PSCR, KC_PGUP, KC_PGDN,
+ 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_BSPC, KC_NLCK, 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_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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_LSFT, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+ [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_PAUSE, KC_SLCK, KC_HOME, KC_END,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/mt/mt980/keymaps/walker/config.h b/keyboards/mt/mt980/keymaps/walker/config.h
new file mode 100644
index 0000000000..0bd3959938
--- /dev/null
+++ b/keyboards/mt/mt980/keymaps/walker/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define TAPPING_TERM 200
+#define ONESHOT_TAP_TOGGLE 5
+#define ONESHOT_TIMEOUT 5000
diff --git a/keyboards/mt/mt980/keymaps/walker/keymap.c b/keyboards/mt/mt980/keymaps/walker/keymap.c
new file mode 100644
index 0000000000..83a3fb8167
--- /dev/null
+++ b/keyboards/mt/mt980/keymaps/walker/keymap.c
@@ -0,0 +1,168 @@
+#include "mt980.h"
+
+bool numlock_on = true;
+
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ DOUBLE_HOLD = 4,
+ TRIPLE_TAP = 5,
+ TRIPLE_HOLD = 6
+};
+
+enum {
+ ALT_L1 = 0
+};
+
+int cur_dance (qk_tap_dance_state_t *state);
+void alt_finished (qk_tap_dance_state_t *state, void *user_data);
+void alt_reset (qk_tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ 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_NO, KC_INS, KC_PSCR, KC_PGUP, KC_PGDN,
+ 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_BSPC, KC_NLCK, 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_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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_LSFT, 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_LGUI, TD(ALT_L1), KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+ [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_PAUSE, KC_SLCK, KC_HOME, KC_END,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
+
+int cur_dance (qk_tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->pressed) return SINGLE_HOLD;
+ else return SINGLE_TAP;
+ }
+ else if (state->count == 2) {
+ if (state->pressed) return DOUBLE_HOLD;
+ else return DOUBLE_TAP;
+ }
+ else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) return TRIPLE_TAP;
+ else return TRIPLE_HOLD;
+ }
+ else return 8;
+}
+
+static tap alttap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+void alt_finished (qk_tap_dance_state_t *state, void *user_data) {
+ alttap_state.state = cur_dance(state);
+ switch (alttap_state.state) {
+ case SINGLE_TAP: set_oneshot_layer(1, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break;
+ case SINGLE_HOLD: register_code(KC_LALT); break;
+ case DOUBLE_TAP: set_oneshot_layer(1, ONESHOT_START); set_oneshot_layer(1, ONESHOT_PRESSED); break;
+ case DOUBLE_HOLD: register_code(KC_LALT); layer_on(1); break;
+ }
+}
+
+void alt_reset (qk_tap_dance_state_t *state, void *user_data) {
+ switch (alttap_state.state) {
+ case SINGLE_TAP: break;
+ case SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case DOUBLE_TAP: break;
+ case DOUBLE_HOLD: layer_off(1); unregister_code(KC_LALT); break;
+ }
+ alttap_state.state = 0;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [ALT_L1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset)
+};
+
+void led_set_keymap(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ numlock_on = true;
+ }
+ else {
+ numlock_on = false;
+ }
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case KC_TRNS:
+ case KC_NO:
+ /* Always cancel one-shot layer when another key gets pressed */
+ if (record->event.pressed && is_oneshot_layer_active())
+ clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
+ return true;
+ case RESET:
+ /* Don't allow reset from oneshot layer state */
+ if (record->event.pressed && is_oneshot_layer_active()) {
+ clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
+ return false;
+ }
+ return true;
+ case KC_PPLS:
+ if (!numlock_on) {
+ if (is_oneshot_layer_active() || layer_state & 0x2) {
+ if (record->event.pressed)
+ register_code(KC_HOME);
+ else
+ unregister_code(KC_HOME);
+ clear_oneshot_layer_state(ONESHOT_START);
+ }
+ else {
+ if (record->event.pressed)
+ register_code(KC_PGUP);
+ else
+ unregister_code(KC_PGUP);
+ }
+ return false;
+ }
+ return true;
+ case KC_PENT:
+ if (!numlock_on) {
+ if (is_oneshot_layer_active() || layer_state & 0x2) {
+ if (record->event.pressed)
+ register_code(KC_END);
+ else
+ unregister_code(KC_END);
+ clear_oneshot_layer_state(ONESHOT_START);
+ }
+ else {
+ if (record->event.pressed)
+ register_code(KC_PGDN);
+ else
+ unregister_code(KC_PGDN);
+ }
+ return false;
+ }
+ return true;
+ case KC_NLCK:
+ /* Shift + NumLock will be treated as shift-Insert */
+ if ((keyboard_report->mods & MOD_BIT (KC_LSFT)) || (keyboard_report->mods & MOD_BIT (KC_RSFT))) {
+ if (record->event.pressed) {
+ register_code(KC_INS);
+ unregister_code(KC_INS);
+ }
+ return false;
+ }
+ else
+ return true;
+ default:
+ return true;
+ }
+ return true;
+}
diff --git a/keyboards/mt/mt980/keymaps/walker/rules.mk b/keyboards/mt/mt980/keymaps/walker/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/mt/mt980/keymaps/walker/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/mt/mt980/mt980.c b/keyboards/mt/mt980/mt980.c
new file mode 100644
index 0000000000..69f7cc491a
--- /dev/null
+++ b/keyboards/mt/mt980/mt980.c
@@ -0,0 +1 @@
+#include "mt980.h"
diff --git a/keyboards/mt/mt980/mt980.h b/keyboards/mt/mt980/mt980.h
new file mode 100644
index 0000000000..d9804b3392
--- /dev/null
+++ b/keyboards/mt/mt980/mt980.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K050, K052, K053, K054, K055, K057, K058, K118, K117, K115, K114, K113, K116, K051, K112, K111, K110, K063, \
+ K040, K041, K042, K043, K044, K045, K046, K047, K048, K108, K107, K105, K104, K103, K106, K102, K101, K100, K064, \
+ K030, K031, K032, K033, K034, K035, K036, K037, K038, K098, K097, K095, K094, K084, K096, K092, K091, K090, \
+ K020, K021, K022, K023, K024, K025, K026, K027, K028, K088, K087, K085, K093, K086, K082, K081, K080, \
+ K010, K011, K012, K013, K014, K015, K016, K017, K018, K078, K077, K075, K074, K073, K076, K072, K071, K070, \
+ K000, K001, K002, K006, K008, K007, K005, K004, K003, K066, K062, K061, K060 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008 }, \
+ { K010, K011, K012, K013, K014, K015, K016, K017, K018 }, \
+ { K020, K021, K022, K023, K024, K025, K026, K027, K028 }, \
+ { K030, K031, K032, K033, K034, K035, K036, K037, K038 }, \
+ { K040, K041, K042, K043, K044, K045, K046, K047, K048 }, \
+ { K050, K051, K052, K053, K054, K055, KC_NO, K057, K058 }, \
+ { K060, K061, K062, K063, K064, KC_NO, K066, KC_NO, KC_NO}, \
+ { K070, K071, K072, K073, K074, K075, K076, K077, K078 }, \
+ { K080, K081, K082, KC_NO, K084, K085, K086, K087, K088 }, \
+ { K090, K091, K092, K093, K094, K095, K096, K097, K098 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108 }, \
+ { K110, K111, K112, K113, K114, K115, K116, K117, K118 } \
+}
diff --git a/keyboards/mt/mt980/readme.md b/keyboards/mt/mt980/readme.md
new file mode 100644
index 0000000000..5e702de714
--- /dev/null
+++ b/keyboards/mt/mt980/readme.md
@@ -0,0 +1,14 @@
+# mt980
+
+A mechanical keyboard PCB in the same layout as the Leopold FC980M, sold by Wheat Field Peripherals on Taobao. This PCB requires soldering, except for the arrow cluster and the Escape key switches, which use Kailh hot swap sockets.
+
+Keyboard Maintainer: [walkerstop](https://github.com/walkerstop)
+Hardware Supported: mt980
+Hardware Availability: Taobao store https://shop110310565.taobao.com
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mt/mt980: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).
+
diff --git a/keyboards/mt/mt980/rules.mk b/keyboards/mt/mt980/rules.mk
new file mode 100644
index 0000000000..2ca5686493
--- /dev/null
+++ b/keyboards/mt/mt980/rules.mk
@@ -0,0 +1,19 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # 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 = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+KEY_LOCK_ENABLE = no