소스 검색

[Keyboard] Add 5 boards by the OverNumpad Controller (#14382)

* Add initial implementation of 5 keyboards supported by the OverNumpad Controller.

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Apply changes similar to other code review suggestions.

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Apply changes similar to other code review suggestions.

* overnumpad controller info.jsons: update maintainer and url.

* classic_ultracl_pre_2013: added support for the default 'fullsize_ansi' layout

* classic_ultracl_pre_2013: moved the order of the iso enter key in the layout macro to be considered to be on the bottom row, like in the default fullsize_iso layout. Rename the iso layout to fullsize_iso, and enable it in rules.mk

* Removed QMKBEST and QMKURL

* Apply suggestions from code review

Co-authored-by: Ryan <fauxpark@gmail.com>

* Deleting empty files

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Purdea Andrei 3 년 전
부모
커밋
376968ade4
40개의 변경된 파일1455개의 추가작업 그리고 0개의 파일을 삭제
  1. 6 0
      keyboards/ibm/model_m_4th_gen/info.json
  2. 33 0
      keyboards/ibm/model_m_4th_gen/keymaps/default/keymap.c
  3. 1 0
      keyboards/ibm/model_m_4th_gen/keymaps/default/readme.md
  4. 74 0
      keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h
  5. 28 0
      keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.c
  6. 91 0
      keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.h
  7. 26 0
      keyboards/ibm/model_m_4th_gen/overnumpad_1xb/readme.md
  8. 25 0
      keyboards/ibm/model_m_4th_gen/overnumpad_1xb/rules.mk
  9. 6 0
      keyboards/unicomp/classic_ultracl_post_2013/info.json
  10. 33 0
      keyboards/unicomp/classic_ultracl_post_2013/keymaps/default/keymap.c
  11. 1 0
      keyboards/unicomp/classic_ultracl_post_2013/keymaps/default/readme.md
  12. 73 0
      keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h
  13. 28 0
      keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.c
  14. 88 0
      keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.h
  15. 28 0
      keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md
  16. 25 0
      keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/rules.mk
  17. 6 0
      keyboards/unicomp/classic_ultracl_pre_2013/info.json
  18. 33 0
      keyboards/unicomp/classic_ultracl_pre_2013/keymaps/default/keymap.c
  19. 1 0
      keyboards/unicomp/classic_ultracl_pre_2013/keymaps/default/readme.md
  20. 73 0
      keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h
  21. 28 0
      keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.c
  22. 88 0
      keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.h
  23. 26 0
      keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md
  24. 26 0
      keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/rules.mk
  25. 6 0
      keyboards/unicomp/spacesaver_m_post_2013/info.json
  26. 42 0
      keyboards/unicomp/spacesaver_m_post_2013/keymaps/default/keymap.c
  27. 1 0
      keyboards/unicomp/spacesaver_m_post_2013/keymaps/default/readme.md
  28. 72 0
      keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h
  29. 45 0
      keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c
  30. 88 0
      keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.h
  31. 25 0
      keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/readme.md
  32. 25 0
      keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/rules.mk
  33. 6 0
      keyboards/unicomp/spacesaver_m_pre_2013/info.json
  34. 42 0
      keyboards/unicomp/spacesaver_m_pre_2013/keymaps/default/keymap.c
  35. 1 0
      keyboards/unicomp/spacesaver_m_pre_2013/keymaps/default/readme.md
  36. 73 0
      keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h
  37. 44 0
      keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c
  38. 88 0
      keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.h
  39. 25 0
      keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/readme.md
  40. 25 0
      keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/rules.mk

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
keyboards/ibm/model_m_4th_gen/info.json


+ 33 - 0
keyboards/ibm/model_m_4th_gen/keymaps/default/keymap.c

@@ -0,0 +1,33 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT_all(
+        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_SLCK, 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_BSPC,  KC_INS,  KC_HOME, KC_PGUP,  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_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_PPLS,
+        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_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL,          KC_LALT, KC_NO,             KC_SPC,                             KC_RALT,          KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    )
+};

+ 1 - 0
keyboards/ibm/model_m_4th_gen/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for ibm/model_m_4th_gen/$(CONTROLLER)

+ 74 - 0
keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h

@@ -0,0 +1,74 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER IBM/Purdea Andrei
+#define PRODUCT IBM Model M (4th generation)
+#define SERIAL_NUMBER "purdea.ro:overnumpad_controller"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+// All pins in order from left-to-right, as seen on the keyboard:
+// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10,
+// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible.
+
+// On this keyboard the right-most pin is not used, A10 can be ignored.
+// On this keyboard the pins are ordered in the following way: (top/bottom meaning where the trace is routed on the membranes)
+// top, top, top, top, top, top, top, top, bottom, top, bottom, top, bottom, top, bottom, top, bottom, bottom, top, top, top, top, bottom, bottom
+
+#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, C4, B0, B10, B13, C6, C7, C8, C9 }
+#define MATRIX_ROW_PINS { A7, C5, B1, B12, B14, B15, A8, A9 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+#define MATRIX_HAS_GHOST
+
+#define STM32_HSECLK 16000000
+
+#define SOLENOID_PIN B5
+#define SOLENOID_DEFAULT_DWELL 4
+#define SOLENOID_MIN_DWELL 4
+#define NO_HAPTIC_MOD
+
+#define LED_NUM_LOCK_PIN C12
+#define LED_CAPS_LOCK_PIN C11
+#define LED_SCROLL_LOCK_PIN C10
+#define LED_ON_STATE 1

+ 28 - 0
keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.c

@@ -0,0 +1,28 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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 "overnumpad_1xb.h"
+
+void keyboard_post_init_kb(void)
+{
+    // Solenoid enable:
+    setPinOutput(C13);
+    writePin(C13, 1);
+
+    //debug_enable=true;
+    //debug_matrix=true;
+}
+

+ 91 - 0
keyboards/ibm/model_m_4th_gen/overnumpad_1xb/overnumpad_1xb.h

@@ -0,0 +1,91 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+
+#define LAYOUT_all( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl,         k_lalt, k_code,                      k_space,                    k_ralt,      k_rctrl,  k_left,  k_down, k_right,    kp_0_hidden, kp_0,   kp_dot,  kp_enter_hidden  \
+) \
+{ \
+    /*        0       1      2      3                4         5              6             7         8            9         A         B               C                D        E      F     */ \
+    /* 0 */ { k_esc,  k_g,   k_h,   k_f6,            KC_NO,    k_singlequote, k_f5,         KC_NO,    kp_0_hidden, kp_0,     kp_dot,   k_up,           k_lalt,          KC_NO,   k_f4,  k_nubs  }, \
+    /* 1 */ { k_tab,  k_t,   k_y,   k_squarebrcl,    k_f7,     k_squarebrop,  k_backspace,  k_lshift, kp_4,        kp_5,     kp_6,     kp_plus_hidden, KC_NO,           KC_NO,   k_f3,  k_caps  }, \
+    /* 2 */ { k_tild, k_5,   k_6,   k_equals,        k_f8,     k_minus,       k_f9,         KC_NO,    k_del,       k_ins,    k_pgup,   k_home,         KC_NO,           k_lctrl, k_f2,  k_f1    }, \
+    /* 3 */ { k_1,    k_4,   k_7,   k_8,             k_9,      k_0,           k_f10,        KC_NO,    k_f11,       k_f12,    k_pgdn,   k_end,          k_prscr,         KC_NO,   k_3,   k_2     }, \
+    /* 4 */ { k_q,    k_r,   k_u,   k_i,             k_o,      k_p,           k_bsp_hidden, KC_NO,    kp_7,        kp_8,     kp_9,     kp_plus,        k_scrl,          KC_NO,   k_e,   k_w     }, \
+    /* 5 */ { k_a,    k_f,   k_j,   k_k,             k_l,      k_semicolon,   k_backsl,     KC_NO,    kp_1,        kp_2,     kp_3,     kp_enter,       kp_enter_hidden, KC_NO,   k_d,   k_s     }, \
+    /* 6 */ { k_z,    k_v,   k_m,   k_cm,            k_period, k_nuhs,        k_return,     k_rshift, kp_nl,       kp_div,   kp_mult,  k_pause,        KC_NO,           k_rctrl, k_c,   k_x     }, \
+    /* 7 */ { KC_NO,  k_b,   k_n,   k_rshift_hidden, KC_NO,    k_fwslash,     k_space,      KC_NO,    k_down,      k_right,  kp_minus, k_left,         k_ralt,          KC_NO,   KC_NO, k_code  }  \
+}
+
+// the following three key mappings are informed guesses, based on similarity of the gen4 membrane to previous-gen membranes: kp_plus, k_ins, kp_0_hidden
+
+#define LAYOUT_ansi( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote,        k_return,                               kp_4,        kp_5,   kp_6,                     \
+    k_lshift,       k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl,         k_lalt,                              k_space,                    k_ralt,      k_rctrl,  k_left,  k_down, k_right,          kp_0,          kp_dot                    \
+) \
+{ \
+    /*        0       1      2      3                4         5              6             7         8            9         A         B               C                D        E      F     */ \
+    /* 0 */ { k_esc,  k_g,   k_h,   k_f6,            KC_NO,    k_singlequote, k_f5,         KC_NO,    KC_NO,       kp_0,     kp_dot,   k_up,           k_lalt,          KC_NO,   k_f4,  KC_NO   }, \
+    /* 1 */ { k_tab,  k_t,   k_y,   k_squarebrcl,    k_f7,     k_squarebrop,  k_backspace,  k_lshift, kp_4,        kp_5,     kp_6,     KC_NO,          KC_NO,           KC_NO,   k_f3,  k_caps  }, \
+    /* 2 */ { k_tild, k_5,   k_6,   k_equals,        k_f8,     k_minus,       k_f9,         KC_NO,    k_del,       k_ins,    k_pgup,   k_home,         KC_NO,           k_lctrl, k_f2,  k_f1    }, \
+    /* 3 */ { k_1,    k_4,   k_7,   k_8,             k_9,      k_0,           k_f10,        KC_NO,    k_f11,       k_f12,    k_pgdn,   k_end,          k_prscr,         KC_NO,   k_3,   k_2     }, \
+    /* 4 */ { k_q,    k_r,   k_u,   k_i,             k_o,      k_p,           KC_NO,        KC_NO,    kp_7,        kp_8,     kp_9,     kp_plus,        k_scrl,          KC_NO,   k_e,   k_w     }, \
+    /* 5 */ { k_a,    k_f,   k_j,   k_k,             k_l,      k_semicolon,   k_backsl,     KC_NO,    kp_1,        kp_2,     kp_3,     kp_enter,       KC_NO,           KC_NO,   k_d,   k_s     }, \
+    /* 6 */ { k_z,    k_v,   k_m,   k_cm,            k_period, KC_NO,         k_return,     k_rshift, kp_nl,       kp_div,   kp_mult,  k_pause,        KC_NO,           k_rctrl, k_c,   k_x     }, \
+    /* 7 */ { KC_NO,  k_b,   k_n,   KC_NO,           KC_NO,    k_fwslash,     k_space,      KC_NO,    k_down,      k_right,  kp_minus, k_left,         k_ralt,          KC_NO,   KC_NO, KC_NO   }  \
+}
+
+#define LAYOUT_iso( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl,      k_return,  k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,                                        kp_4,        kp_5,   kp_6,                     \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl,         k_lalt,                              k_space,                    k_ralt,      k_rctrl,  k_left,  k_down, k_right,          kp_0,          kp_dot                    \
+) \
+{ \
+    /*        0       1      2      3                4         5              6             7         8            9         A         B               C                D        E      F     */ \
+    /* 0 */ { k_esc,  k_g,   k_h,   k_f6,            KC_NO,    k_singlequote, k_f5,         KC_NO,    KC_NO,       kp_0,     kp_dot,   k_up,           k_lalt,          KC_NO,   k_f4,  k_nubs  }, \
+    /* 1 */ { k_tab,  k_t,   k_y,   k_squarebrcl,    k_f7,     k_squarebrop,  k_backspace,  k_lshift, kp_4,        kp_5,     kp_6,     KC_NO,          KC_NO,           KC_NO,   k_f3,  k_caps  }, \
+    /* 2 */ { k_tild, k_5,   k_6,   k_equals,        k_f8,     k_minus,       k_f9,         KC_NO,    k_del,       k_ins,    k_pgup,   k_home,         KC_NO,           k_lctrl, k_f2,  k_f1    }, \
+    /* 3 */ { k_1,    k_4,   k_7,   k_8,             k_9,      k_0,           k_f10,        KC_NO,    k_f11,       k_f12,    k_pgdn,   k_end,          k_prscr,         KC_NO,   k_3,   k_2     }, \
+    /* 4 */ { k_q,    k_r,   k_u,   k_i,             k_o,      k_p,           KC_NO,        KC_NO,    kp_7,        kp_8,     kp_9,     kp_plus,        k_scrl,          KC_NO,   k_e,   k_w     }, \
+    /* 5 */ { k_a,    k_f,   k_j,   k_k,             k_l,      k_semicolon,   KC_NO,        KC_NO,    kp_1,        kp_2,     kp_3,     kp_enter,       KC_NO,           KC_NO,   k_d,   k_s     }, \
+    /* 6 */ { k_z,    k_v,   k_m,   k_cm,            k_period, k_nuhs,        k_return,     k_rshift, kp_nl,       kp_div,   kp_mult,  k_pause,        KC_NO,           k_rctrl, k_c,   k_x     }, \
+    /* 7 */ { KC_NO,  k_b,   k_n,   KC_NO,           KC_NO,    k_fwslash,     k_space,      KC_NO,    k_down,      k_right,  kp_minus, k_left,         k_ralt,          KC_NO,   KC_NO, KC_NO   }  \
+}

+ 26 - 0
keyboards/ibm/model_m_4th_gen/overnumpad_1xb/readme.md

@@ -0,0 +1,26 @@
+# ibm/model_m_4th_gen/overnumpad_1xb
+
+![ibm/model_m_4th_gen/overnumpad_1xb](https://deskthority.net/wiki/images/thumb/1/11/IBM_Model_M_1391406_--_top.jpg/499px-IBM_Model_M_1391406_--_top.jpg)
+
+This firmware is intended to support 4th generation IBM Model M keyboards (the ones that have their controllers under the locklights header).
+* Confirmed to be working with:
+  * PN: 1391412 Date: 20-03-97 Made in United Kingdom by IBM United Kingdom Limited, Greenock, Scotland, UK
+
+* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
+* Hardware Supported: OverNumpad controller v1.Xb
+* Hardware Availability:
+  * [controller](https://github.com/purdeaandrei/overnumpad_controller_1xb)
+
+To place the keyboard into bootloader mode in order to flash it, hold the ESC key while plugging the board in.
+It's possible to make this feature not work, by flashing the wrong firmware onto the keyboard.
+If that happens, open up the keyboard, and press the RST&PROG button to enter bootloader mode.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ibm/model_m_4th_gen/overnumpad_1xb:default
+
+Flashing example for this keyboard:
+
+    make ibm/model_m_4th_gen/overnumpad_1xb:default: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).

+ 25 - 0
keyboards/ibm/model_m_4th_gen/overnumpad_1xb/rules.mk

@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F446 # STM32F446RET6
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enter bootloader mode when holding the ESC key.
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+ENCODER_ENABLE = no         # Enable rotary encoder support
+AUDIO_ENABLE = no           # Audio output
+KEYBOARD_SHARED_EP = yes    # Free up some extra endpoints - needed if console+mouse+extra
+
+HAPTIC_ENABLE += SOLENOID

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
keyboards/unicomp/classic_ultracl_post_2013/info.json


+ 33 - 0
keyboards/unicomp/classic_ultracl_post_2013/keymaps/default/keymap.c

@@ -0,0 +1,33 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT_all(
+        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_SLCK, 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_BSPC,  KC_INS,  KC_HOME, KC_PGUP,  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_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_PPLS,
+        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_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LGUI, KC_LALT, KC_NO,       KC_SPC,                      KC_RGUI, KC_RALT, KC_APP,      KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    )
+};

+ 1 - 0
keyboards/unicomp/classic_ultracl_post_2013/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for unicomp/classic_ultracl_post_2013/$(CONTROLLER)

+ 73 - 0
keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h

@@ -0,0 +1,73 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Unicomp/Purdea Andrei
+#define PRODUCT Unicomp Spacesaver M
+#define SERIAL_NUMBER "purdea.ro:overnumpad_controller"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+// All pins in order from left-to-right, as seen on the keyboard:
+// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, 
+// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible.
+
+// On this keyboard the right-most pin is not used, so that is A10.
+// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom.
+
+#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 }
+#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+#define MATRIX_HAS_GHOST
+
+#define STM32_HSECLK 16000000
+
+#define SOLENOID_PIN B5
+#define SOLENOID_DEFAULT_DWELL 4
+#define SOLENOID_MIN_DWELL 4
+#define NO_HAPTIC_MOD
+
+#define LED_NUM_LOCK_PIN C12
+#define LED_CAPS_LOCK_PIN C11
+#define LED_SCROLL_LOCK_PIN C10
+#define LED_ON_STATE 1

+ 28 - 0
keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.c

@@ -0,0 +1,28 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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 "overnumpad_1xb.h"
+
+void keyboard_post_init_kb(void)
+{
+    // Solenoid enable:
+    setPinOutput(C13);
+    writePin(C13, 1);
+
+    //debug_enable=true;
+    //debug_matrix=true;
+}
+

+ 88 - 0
keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/overnumpad_1xb.h

@@ -0,0 +1,88 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT_all( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt, k_code,      k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,    kp_0_hidden, kp_0,   kp_dot,  kp_enter_hidden  \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    k_bsp_hidden, kp_nl,    k_pgup, k_code, k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    k_rshift_hidden, kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           kp_0_hidden,     k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          kp_enter_hidden, KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_ansi( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote,        k_return,                               kp_4,        kp_5,   kp_6,                     \
+    k_lshift,       k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           KC_NO,           KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { KC_NO,  KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, KC_NO,           KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_iso( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl,      k_return,  k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,                                        kp_4,        kp_5,   kp_6,                     \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   KC_NO,        k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           KC_NO,           KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}

+ 28 - 0
keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/readme.md

@@ -0,0 +1,28 @@
+# unicomp/classic_ultracl_post_2013/overnumpad_1xb
+
+![unicomp/classic_ultracl_post_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg)
+
+Will support the following Unicomp Classic and Ultra Classic keyboards:
+  * 104-key ANSI and 105-key ISO keyboards with post-2013 bottom row are supported.
+  * It will likely also support 103-key ANSI or 104-key ISO keyboard variants (not tested) (these are the keyboards with no menu key)
+  * At this point in time it's unclear if it supports 101-key keyboard variants built after 2013.
+
+* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
+* Hardware Supported: OverNumpad controller v1.Xb
+* Hardware Availability:
+  * [controller](https://github.com/purdeaandrei/overnumpad_controller_1xb)
+  * [keyboard](https://www.pckeyboard.com/)
+
+To place the keyboard into bootloader mode in order to flash it, hold the ESC key while plugging the board in.
+It's possible to make this feature not work, by flashing the wrong firmware onto the keyboard.
+If that happens, open up the keyboard, and press the RST&PROG button to enter bootloader mode.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make unicomp/classic_ultracl_post_2013/overnumpad_1xb:default
+
+Flashing example for this keyboard:
+
+    make unicomp/classic_ultracl_post_2013/overnumpad_1xb:default: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).

+ 25 - 0
keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/rules.mk

@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F446 # STM32F446RET6
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enter bootloader mode when holding the ESC key.
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+ENCODER_ENABLE = no         # Enable rotary encoder support
+AUDIO_ENABLE = no           # Audio output
+KEYBOARD_SHARED_EP = yes    # Free up some extra endpoints - needed if console+mouse+extra
+
+HAPTIC_ENABLE += SOLENOID

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
keyboards/unicomp/classic_ultracl_pre_2013/info.json


+ 33 - 0
keyboards/unicomp/classic_ultracl_pre_2013/keymaps/default/keymap.c

@@ -0,0 +1,33 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT_all(
+        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_SLCK, 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_BSPC,  KC_INS,  KC_HOME, KC_PGUP,  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_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_PPLS,
+        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_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LGUI, KC_LALT, KC_NO,       KC_SPC,                      KC_RALT, KC_RGUI, KC_APP,      KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    )
+};

+ 1 - 0
keyboards/unicomp/classic_ultracl_pre_2013/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for unicomp/classic_ultracl_pre_2013/$(CONTROLLER)

+ 73 - 0
keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h

@@ -0,0 +1,73 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Unicomp/Purdea Andrei
+#define PRODUCT Unicomp Spacesaver M
+#define SERIAL_NUMBER "purdea.ro:overnumpad_controller"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+// All pins in order from left-to-right, as seen on the keyboard:
+// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, 
+// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible.
+
+// On this keyboard the right-most pin is not used, so that is A10.
+// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom.
+
+#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 }
+#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+#define MATRIX_HAS_GHOST
+
+#define STM32_HSECLK 16000000
+
+#define SOLENOID_PIN B5
+#define SOLENOID_DEFAULT_DWELL 4
+#define SOLENOID_MIN_DWELL 4
+#define NO_HAPTIC_MOD
+
+#define LED_NUM_LOCK_PIN C12
+#define LED_CAPS_LOCK_PIN C11
+#define LED_SCROLL_LOCK_PIN C10
+#define LED_ON_STATE 1

+ 28 - 0
keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.c

@@ -0,0 +1,28 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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 "overnumpad_1xb.h"
+
+void keyboard_post_init_kb(void)
+{
+    // Solenoid enable:
+    setPinOutput(C13);
+    writePin(C13, 1);
+
+    //debug_enable=true;
+    //debug_matrix=true;
+}
+

+ 88 - 0
keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/overnumpad_1xb.h

@@ -0,0 +1,88 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT_all( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt, k_code,      k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,    kp_0_hidden, kp_0,   kp_dot,  kp_enter_hidden  \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    k_bsp_hidden, kp_nl,    k_pgup, k_code, k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    k_rshift_hidden, kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           kp_0_hidden,     k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          kp_enter_hidden, KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_fullsize_ansi( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote,        k_return,                               kp_4,        kp_5,   kp_6,                     \
+    k_lshift,       k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           KC_NO,           KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { KC_NO,  KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, KC_NO,           KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_fullsize_iso( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl,                 k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,                     \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   KC_NO,        k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           KC_NO,           KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}

+ 26 - 0
keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/readme.md

@@ -0,0 +1,26 @@
+# unicomp/classic_ultracl_pre_2013/overnumpad_1xb
+
+![unicomp/classic_ultracl_pre_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg)
+
+Will support the following Unicomp Classic and Ultra Classic keyboards:
+  * 104-key ANSI and 105-key ISO keyboards with post-2013 bottom row are supported.
+
+* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
+* Hardware Supported: OverNumpad controller v1.Xb
+* Hardware Availability:
+  * [controller](https://github.com/purdeaandrei/overnumpad_controller_1xb)
+  * [keyboard](https://www.pckeyboard.com/)
+
+To place the keyboard into bootloader mode in order to flash it, hold the ESC key while plugging the board in.
+It's possible to make this feature not work, by flashing the wrong firmware onto the keyboard.
+If that happens, open up the keyboard, and press the RST&PROG button to enter bootloader mode.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make unicomp/classic_ultracl_pre_2013/overnumpad_1xb:default
+
+Flashing example for this keyboard:
+
+    make unicomp/classic_ultracl_pre_2013/overnumpad_1xb:default: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).

+ 26 - 0
keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/rules.mk

@@ -0,0 +1,26 @@
+# MCU name
+MCU = STM32F446 # STM32F446RET6
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enter bootloader mode when holding the ESC key.
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+ENCODER_ENABLE = no         # Enable rotary encoder support
+AUDIO_ENABLE = no           # Audio output
+KEYBOARD_SHARED_EP = yes    # Free up some extra endpoints - needed if console+mouse+extra
+
+HAPTIC_ENABLE += SOLENOID
+LAYOUTS = fullsize_ansi fullsize_iso

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
keyboards/unicomp/spacesaver_m_post_2013/info.json


+ 42 - 0
keyboards/unicomp/spacesaver_m_post_2013/keymaps/default/keymap.c

@@ -0,0 +1,42 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT_all(
+        KC_ESC,      KC_F14,KC_F15,LCTL(KC_UP),KC_F9,  KC_F5, KC_F6,KC_MPRV,KC_MPLY,  KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,  KC_F13,  KC_F14,  KC_F15,
+        KC_NUBS,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_EJCT, KC_HOME, KC_PGUP,  KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST,
+        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_PMNS,
+        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_PPLS,
+        KC_LSFT,KC_GRV,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,  KC_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LALT, KC_LGUI, KC_NO,       KC_SPC,                      KC_RGUI, KC_RALT, MO(_FN),     KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    ),
+    [_FN] = LAYOUT_all(
+        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_SLCK, KC_PAUS,
+        KC_NUBS,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_INS,  KC_HOME, KC_PGUP,  KC_NLCK, KC_EQL,  KC_PSLS, KC_PAST,
+        KC_TAB,    KC_Q,  KC_W,EEPROM_RESET,RESET,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_PMNS,
+        KC_CAPS,      KC_A,  KC_S,DEBUG,  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_PPLS,
+        KC_LSFT,KC_GRV,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,  KC_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LALT, KC_LGUI, KC_NO,       KC_SPC,                      KC_RGUI, KC_RALT, MO(_FN),     KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    )
+};

+ 1 - 0
keyboards/unicomp/spacesaver_m_post_2013/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for unicomp/spacesaver_m_post_2013/$(CONTROLLER)

+ 72 - 0
keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h

@@ -0,0 +1,72 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Unicomp/Purdea Andrei
+#define PRODUCT Unicomp Spacesaver M
+#define SERIAL_NUMBER "purdea.ro:overnumpad_controller"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+// All pins in order from left-to-right, as seen on the keyboard:
+// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, 
+// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible.
+
+// On this keyboard the right-most pin is not used, so that is A10.
+// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom.
+
+#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 }
+#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+#define MATRIX_HAS_GHOST
+
+#define STM32_HSECLK 16000000
+
+#define SOLENOID_PIN B5
+#define SOLENOID_DEFAULT_DWELL 4
+#define SOLENOID_MIN_DWELL 4
+#define NO_HAPTIC_MOD
+
+#define LED_CAPS_LOCK_PIN C12
+#define LED_ON_STATE 1
+// C11 and C10 are also leds, but C11 is not used in this keyboard, and C10 is configured in ${keyboard}.c

+ 45 - 0
keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.c

@@ -0,0 +1,45 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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 "overnumpad_1xb.h"
+
+void keyboard_post_init_kb(void)
+{
+    // Led pins:
+    // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in config.h
+    setPinOutput(C11); // middle led, always off on Spacesaver M
+    writePin(C11, 0);
+    setPinOutput(C10); // right-most led, normally Scroll Lock, but on Spacesaver M indicates function layer
+    // Solenoid enable:
+    setPinOutput(C13);
+    writePin(C13, 1);
+
+    //debug_enable=true;
+    //debug_matrix=true;
+}
+
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+    switch (get_highest_layer(state)) {
+        case 0:
+            writePin(C10, 0);
+            break;
+        default:
+            writePin(C10, 1);
+            break;
+    }
+     return layer_state_set_user(state);
+}

+ 88 - 0
keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/overnumpad_1xb.h

@@ -0,0 +1,88 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT_all( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt, k_code,      k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,    kp_0_hidden, kp_0,   kp_dot,  kp_enter_hidden  \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    k_bsp_hidden, kp_nl,    k_pgup, k_code, k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    k_rshift_hidden, kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           kp_0_hidden,     k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          kp_enter_hidden, KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_ansi( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote,        k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,       k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { KC_NO,  KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, KC_NO,           KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_iso( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl,      k_return,  k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,                                        kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_1_d,  k_6_4,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   KC_NO,        k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}

+ 25 - 0
keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/readme.md

@@ -0,0 +1,25 @@
+# unicomp/spacesaver_m_post_2013/overnumpad_1xb
+
+![unicomp/spacesaver_m_post_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg)
+
+Initially will support part number U242S6A, remains to be seen how compatible it is with other part numbers.
+
+* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
+* Hardware Supported: OverNumpad controller v1.Xb
+* Hardware Availability: TODO
+  * [controller](https://github.com/purdeaandrei/overnumpad_controller_1xb)
+  * [keyboard](https://www.pckeyboard.com/)
+
+To place the keyboard into bootloader mode in order to flash it, hold the ESC key while plugging the board in.
+It's possible to make this feature not work, by flashing the wrong firmware onto the keyboard.
+If that happens, open up the keyboard, and press the RST&PROG button to enter bootloader mode.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make unicomp/spacesaver_m_post_2013/overnumpad_1xb:default
+
+Flashing example for this keyboard:
+
+    make unicomp/spacesaver_m_post_2013/overnumpad_1xb:default: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).

+ 25 - 0
keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/rules.mk

@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F446 # STM32F446RET6
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enter bootloader mode when holding the ESC key.
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+ENCODER_ENABLE = no         # Enable rotary encoder support
+AUDIO_ENABLE = no           # Audio output
+KEYBOARD_SHARED_EP = yes    # Free up some extra endpoints - needed if console+mouse+extra
+
+HAPTIC_ENABLE += SOLENOID

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
keyboards/unicomp/spacesaver_m_pre_2013/info.json


+ 42 - 0
keyboards/unicomp/spacesaver_m_pre_2013/keymaps/default/keymap.c

@@ -0,0 +1,42 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT_all(
+        KC_ESC,      KC_F14,KC_F15,LCTL(KC_UP),KC_F9,  KC_F5, KC_F6,KC_MPRV,KC_MPLY,  KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,  KC_F13,  KC_F14,  KC_F15,
+        KC_NUBS,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_EJCT, KC_HOME, KC_PGUP,  KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST,
+        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_PMNS,
+        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_PPLS,
+        KC_LSFT,KC_GRV,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,  KC_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LALT, KC_LGUI, KC_NO,       KC_SPC,                      KC_RGUI, KC_RALT, MO(_FN),     KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    ),
+    [_FN] = LAYOUT_all(
+        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_SLCK, KC_PAUS,
+        KC_NUBS,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_INS,  KC_HOME, KC_PGUP,  KC_NLCK, KC_EQL,  KC_PSLS, KC_PAST,
+        KC_TAB,    KC_Q,  KC_W,EEPROM_RESET,RESET,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_PMNS,
+        KC_CAPS,      KC_A,  KC_S,DEBUG,  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_PPLS,
+        KC_LSFT,KC_GRV,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,  KC_RSFT,           KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTRL, KC_LALT, KC_LGUI, KC_NO,       KC_SPC,                      KC_RGUI, KC_RALT, MO(_FN),     KC_RCTRL,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+    )
+};

+ 1 - 0
keyboards/unicomp/spacesaver_m_pre_2013/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for unicomp/spacesaver_m_pre_2013/$(CONTROLLER)

+ 73 - 0
keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h

@@ -0,0 +1,73 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Unicomp/Purdea Andrei
+#define PRODUCT Unicomp Spacesaver M
+#define DESCRIPTION QMK firmware for the Unicomp Spacesaver M keyboard with a replacement Overnumpad controller
+#define SERIAL_NUMBER "purdea.ro:overnumpad_controller"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+// All pins in order from left-to-right, as seen on the keyboard:
+// C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13, B14, B15, C6, C7, C8, C9, A8, A9, A10, 
+// On this chip A10, B10 have stronger pull-ups, so it's better to avoid them if possible.
+
+// On this keyboard the right-most pin is not used, so that is A10.
+// On this keyboard the right-most 8 pins (excluding the unused pin) are routed on the bottom.
+
+#define MATRIX_COL_PINS { C3, C2, C1, C0, A3, A4, A5, A6, A7, C4, C5, B0, B1, B10, B12, B13 }
+#define MATRIX_ROW_PINS { B14, B15, C6, C7, C8, C9, A8, A9 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+#define MATRIX_HAS_GHOST
+
+#define STM32_HSECLK 16000000
+
+#define SOLENOID_PIN B5
+#define SOLENOID_DEFAULT_DWELL 4
+#define SOLENOID_MIN_DWELL 4
+#define NO_HAPTIC_MOD
+
+#define LED_CAPS_LOCK_PIN C12
+#define LED_ON_STATE 1
+// C11 and C10 are also leds, but C11 is not used in this keyboard, and C10 is configured in ${keyboard}.c

+ 44 - 0
keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.c

@@ -0,0 +1,44 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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 "overnumpad_1xb.h"
+
+void keyboard_post_init_kb(void)
+{
+    // Led pins:
+    // C12 is the left-most led, normally Num Lock, but on Spacesaver M it's Caps Lock. Configured in config.h
+    setPinOutput(C11); // middle led, always off on Spacesaver M
+    writePin(C11, 0);
+    setPinOutput(C10); // right-most led, normally Scroll Lock, but on Spacesaver M indicates function layer
+    // Solenoid enable:
+    setPinOutput(C13);
+    writePin(C13, 1);
+
+    //debug_enable=true;
+    //debug_matrix=true;
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+    switch (get_highest_layer(state)) {
+        case 0:
+            writePin(C10, 0);
+            break;
+        default:
+            writePin(C10, 1);
+            break;
+    }
+     return layer_state_set_user(state);
+}

+ 88 - 0
keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/overnumpad_1xb.h

@@ -0,0 +1,88 @@
+/* Copyright 2020 Purdea Andrei
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT_all( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals, k_bsp_hidden, k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash, k_rshift_hidden, k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt, k_code,      k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,    kp_0_hidden, kp_0,   kp_dot,  kp_enter_hidden  \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    k_bsp_hidden, kp_nl,    k_pgup, k_code, k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    k_rshift_hidden, kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           kp_0_hidden,     k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          kp_enter_hidden, KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_ansi( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl, k_backsl,       k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote,        k_return,                               kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,       k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   k_backsl,     k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { KC_NO,  KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, KC_NO,           KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}
+
+#define LAYOUT_iso( \
+    k_esc,       k_f1, k_f2, k_f3, k_f4,    k_f5, k_f6, k_f7, k_f8,    k_f9, k_f10, k_f11, k_f12,            k_prscr, k_scrl, k_pause, \
+    k_tild, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_minus, k_equals,               k_backspace,  k_ins,   k_home, k_pgup,     kp_nl,       kp_div, kp_mult, kp_minus,        \
+    k_tab,     k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_squarebrop, k_squarebrcl,      k_return,  k_del,   k_end,  k_pgdn,     kp_7,        kp_8,   kp_9,    kp_plus,         \
+    k_caps,       k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_singlequote, k_nuhs,                                        kp_4,        kp_5,   kp_6,    kp_plus_hidden,  \
+    k_lshift,k_nubs,k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_cm,k_period, k_fwslash,                  k_rshift,           k_up,               kp_1,        kp_2,   kp_3,    kp_enter,        \
+    k_lctrl, k_lwin, k_lalt,              k_space,             k_6_4,  k_1_d,  k_rmenu, k_rctrl,             k_left,  k_down, k_right,           kp_0,         kp_dot                    \
+) \
+{ \
+    /*        0       1             2         3       4       5      6      7      8             9             A              B        C        D                E                F   */ \
+    /* 0 */ { k_esc,  k_pause,      k_f3,     k_f1,   k_ins,  k_3,   k_4,   k_6,   k_f5,         k_f7,         k_f9,          k_f11,   k_prscr, k_right,         k_scrl,          KC_NO   }, \
+    /* 1 */ { k_tab,  KC_NO,        k_del,    k_pgdn, KC_NO,  k_e,   k_t,   k_u,   k_backspace,  k_minus,      k_down,        k_end,   k_home,  k_1_d,           KC_NO,           k_caps  }, \
+    /* 2 */ { k_1,    KC_NO,        kp_nl,    k_pgup, KC_NO,  k_i,   k_r,   k_y,   k_equals,     k_9,          k_0,           kp_mult, kp_div,  k_up,            k_lwin,          KC_NO   }, \
+    /* 3 */ { k_q,    k_lshift,     kp_9,     k_2,    KC_NO,  k_k,   k_f,   k_h,   k_squarebrcl, k_o,          k_semicolon,   kp_8,    kp_7,    KC_NO,           KC_NO,           k_lctrl }, \
+    /* 4 */ { k_a,    KC_NO,        kp_6,     k_w,    k_lalt, k_d,   k_g,   k_j,   KC_NO,        k_squarebrop, k_singlequote, kp_5,    kp_4,    KC_NO,           kp_plus_hidden,  KC_NO   }, \
+    /* 5 */ { k_z,    k_rshift,     kp_dot,   k_x,    KC_NO,  k_cm,  k_b,   k_m,   k_return,     k_period,     k_p,           kp_0,    kp_1,    KC_NO,           KC_NO,           k_rctrl }, \
+    /* 6 */ { k_nubs, KC_NO,        kp_3,     k_s,    k_6_4,  k_c,   k_v,   k_n,   k_left,       k_l,          k_fwslash,     kp_2,    kp_plus, k_nuhs,          KC_NO,           KC_NO   }, \
+    /* 7 */ { k_tild, KC_NO,        kp_minus, k_f2,   k_f4,   k_8,   k_5,   k_7,   k_f6,         k_f8,         k_f10,         k_f12,   k_rmenu, k_space,         kp_enter,        KC_NO   }  \
+}

+ 25 - 0
keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/readme.md

@@ -0,0 +1,25 @@
+# unicomp/spacesaver_m_pre_2013/overnumpad_1xb
+
+![unicomp/spacesaver_m_pre_2013/overnumpad_1xb](https://www.pckeyboard.com/mm5/graphics/00000001/UB4ZPHA_800x343.jpg)
+
+Support Unicomp Spacesaver M keyboards with pre-2013 bottom row.
+
+* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
+* Hardware Supported: OverNumpad controller v1.Xb
+* Hardware Availability:
+  * [controller](https://github.com/purdeaandrei/overnumpad_controller_1xb)
+  * [keyboard](https://www.pckeyboard.com/)
+
+To place the keyboard into bootloader mode in order to flash it, hold the ESC key while plugging the board in.
+It's possible to make this feature not work, by flashing the wrong firmware onto the keyboard.
+If that happens, open up the keyboard, and press the RST&PROG button to enter bootloader mode.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make unicomp/spacesaver_m_pre_2013/overnumpad_1xb:default
+
+Flashing example for this keyboard:
+
+    make unicomp/spacesaver_m_pre_2013/overnumpad_1xb:default: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).

+ 25 - 0
keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/rules.mk

@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F446 # STM32F446RET6
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enter bootloader mode when holding the ESC key.
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+ENCODER_ENABLE = no         # Enable rotary encoder support
+AUDIO_ENABLE = no           # Audio output
+KEYBOARD_SHARED_EP = yes    # Free up some extra endpoints - needed if console+mouse+extra
+
+HAPTIC_ENABLE += SOLENOID

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.