aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLander <3169732+stevendlander@users.noreply.github.com>2021-05-30 17:58:43 -0400
committerGitHub <noreply@github.com>2021-05-30 14:58:43 -0700
commit2b8f1fcdfbf1dbd486036eaf908a57730d251174 (patch)
treea26b54405be09c23810470e8ed6191caf5d671e4
parent7b055dcc5536f6120555e352a921f665d3bcdaa7 (diff)
downloadqmk_firmware-2b8f1fcdfbf1dbd486036eaf908a57730d251174.tar.gz
qmk_firmware-2b8f1fcdfbf1dbd486036eaf908a57730d251174.zip
[Keyboard] Unicomp Mini M (#12892)
-rw-r--r--keyboards/handwired/unicomp_mini_m/config.h59
-rw-r--r--keyboards/handwired/unicomp_mini_m/info.json462
-rw-r--r--keyboards/handwired/unicomp_mini_m/keymaps/default/keymap.c106
-rw-r--r--keyboards/handwired/unicomp_mini_m/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/unicomp_mini_m/readme.md127
-rw-r--r--keyboards/handwired/unicomp_mini_m/rules.mk22
-rw-r--r--keyboards/handwired/unicomp_mini_m/unicomp_mini_m.c16
-rw-r--r--keyboards/handwired/unicomp_mini_m/unicomp_mini_m.h49
8 files changed, 842 insertions, 0 deletions
diff --git a/keyboards/handwired/unicomp_mini_m/config.h b/keyboards/handwired/unicomp_mini_m/config.h
new file mode 100644
index 000000000..41676ec80
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/config.h
@@ -0,0 +1,59 @@
1/*
2Copyright 2021 stevendlander
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x0000
25#define DEVICE_VER 0x0001
26#define MANUFACTURER stevendlander
27#define PRODUCT Unicomp Mini M
28
29/* key matrix size */
30#define MATRIX_ROWS 12
31#define MATRIX_COLS 16
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { F7, F6, F5, F4, F3, F2, F1, F0, E6, E7, B0, B1 }
44#define MATRIX_COL_PINS { C7, C6, C5, C4, C3, C2, C1, C0, E1, E0, D7, B7, D5, D4, D3, D2 }
45#define UNUSED_PINS
46
47#define LED_PIN_ON_STATE 0
48#define LED_NUM_LOCK_PIN B6
49#define LED_CAPS_LOCK_PIN B5
50#define LED_SCROLL_LOCK_PIN B4
51
52/* COL2ROW, ROW2COL*/
53#define DIODE_DIRECTION ROW2COL
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed (5 is default) */
56#define DEBOUNCE 5
57
58/* The Mini M has no diodes */
59#define MATRIX_HAS_GHOST
diff --git a/keyboards/handwired/unicomp_mini_m/info.json b/keyboards/handwired/unicomp_mini_m/info.json
new file mode 100644
index 000000000..4b5390779
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/info.json
@@ -0,0 +1,462 @@
1{
2 "keyboard_name": "Unicomp Mini M",
3 "url": "",
4 "maintainer": "stevendlander",
5 "width": 15.5,
6 "height": 7.5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 { "label": "Esc",
11 "x": 0,
12 "y": 0
13 },
14 {
15 "label": "F1",
16 "x": 2,
17 "y": 0
18 },
19 {
20 "label": "F2",
21 "x": 3,
22 "y": 0
23 },
24 {
25 "label": "F3",
26 "x": 4,
27 "y": 0
28 },
29 {
30 "label": "F4",
31 "x": 5,
32 "y": 0
33 },
34 {
35 "label": "F5",
36 "x": 6.5,
37 "y": 0
38 },
39 {
40 "label": "F6",
41 "x": 7.5,
42 "y": 0
43 },
44 {
45 "label": "F7",
46 "x": 8.5,
47 "y": 0
48 },
49 {
50 "label": "F8",
51 "x": 9.5,
52 "y": 0
53 },
54 {
55 "label": "F9",
56 "x": 11,
57 "y": 0
58 },
59 {
60 "label": "F10",
61 "x": 12,
62 "y": 0
63 },
64 {
65 "label": "F11",
66 "x": 13,
67 "y": 0
68 },
69 {
70 "label": "F12",
71 "x": 14,
72 "y": 0
73 },
74 {
75 "label": "PrtSc",
76 "x": 15.25,
77 "y": 0
78 },
79 {
80 "label": "Scroll Lock",
81 "x": 16.25,
82 "y": 0
83 },
84 {
85 "label": "Pause",
86 "x": 17.25,
87 "y": 0
88 },
89 {
90 "label": "~",
91 "x": 0,
92 "y": 1.5
93 },
94 {
95 "label": "!",
96 "x": 1,
97 "y": 1.5
98 },
99 {
100 "label": "@",
101 "x": 2,
102 "y": 1.5
103 },
104 {
105 "label": "#",
106 "x": 3,
107 "y": 1.5
108 },
109 {
110 "label": "$",
111 "x": 4,
112 "y": 1.5
113 },
114 {
115 "label": "%",
116 "x": 5,
117 "y": 1.5
118 },
119 {
120 "label": "^",
121 "x": 6,
122 "y": 1.5
123 },
124 {
125 "label": "&",
126 "x": 7,
127 "y": 1.5
128 },
129 {
130 "label": "*",
131 "x": 8,
132 "y": 1.5
133 },
134 {
135 "label": "(",
136 "x": 9,
137 "y": 1.5
138 },
139 {
140 "label": ")",
141 "x": 10,
142 "y": 1.5
143 },
144 {
145 "label": "_",
146 "x": 11,
147 "y": 1.5
148 },
149 {
150 "label": "+",
151 "x": 12,
152 "y": 1.5
153 },
154 {
155 "label": "Backspace",
156 "x": 13,
157 "y": 1.5,
158 "w": 2
159 },
160 {
161 "label": "Insert",
162 "x": 15.25,
163 "y": 1.5
164 },
165 {
166 "label": "Home",
167 "x": 16.25,
168 "y": 1.5
169 },
170 {
171 "label": "PgUp",
172 "x": 17.25,
173 "y": 1.5
174 },
175 {
176 "label": "Tab",
177 "x": 0,
178 "y": 2.5,
179 "w": 1.5
180 },
181 {
182 "label": "Q",
183 "x": 1.5,
184 "y": 2.5
185 },
186 {
187 "label": "W",
188 "x": 2.5,
189 "y": 2.5
190 },
191 {
192 "label": "E",
193 "x": 3.5,
194 "y": 2.5
195 },
196 {
197 "label": "R",
198 "x": 4.5,
199 "y": 2.5
200 },
201 {
202 "label": "T",
203 "x": 5.5,
204 "y": 2.5
205 },
206 {
207 "label": "Y",
208 "x": 6.5,
209 "y": 2.5
210 },
211 {
212 "label": "U",
213 "x": 7.5,
214 "y": 2.5
215 },
216 {
217 "label": "I",
218 "x": 8.5,
219 "y": 2.5
220 },
221 {
222 "label": "O",
223 "x": 9.5,
224 "y": 2.5
225 },
226 {
227 "label": "P",
228 "x": 10.5,
229 "y": 2.5
230 },
231 {
232 "label": "{",
233 "x": 11.5,
234 "y": 2.5
235 },
236 {
237 "label": "}",
238 "x": 12.5,
239 "y": 2.5
240 },
241 {
242 "label": "|",
243 "x": 13.5,
244 "y": 2.5,
245 "w": 1.5
246 },
247 {
248 "label": "Delete",
249 "x": 15.25,
250 "y": 2.5
251 },
252 {
253 "label": "End",
254 "x": 16.25,
255 "y": 2.5
256 },
257 {
258 "label": "PgDn",
259 "x": 17.25,
260 "y": 2.5
261 },
262 {
263 "label": "Caps Lock",
264 "x": 0,
265 "y": 3.5,
266 "w": 1.75
267 },
268 {
269 "label": "A",
270 "x": 1.75,
271 "y": 3.5
272 },
273 {
274 "label": "S",
275 "x": 2.75,
276 "y": 3.5
277 },
278 {
279 "label": "D",
280 "x": 3.75,
281 "y": 3.5
282 },
283 {
284 "label": "F",
285 "x": 4.75,
286 "y": 3.5
287 },
288 {
289 "label": "G",
290 "x": 5.75,
291 "y": 3.5
292 },
293 {
294 "label": "H",
295 "x": 6.75,
296 "y": 3.5
297 },
298 {
299 "label": "J",
300 "x": 7.75,
301 "y": 3.5
302 },
303 {
304 "label": "K",
305 "x": 8.75,
306 "y": 3.5
307 },
308 {
309 "label": "L",
310 "x": 9.75,
311 "y": 3.5
312 },
313 {
314 "label": ":",
315 "x": 10.75,
316 "y": 3.5
317 },
318 {
319 "label": "\"",
320 "x": 11.75,
321 "y": 3.5
322 },
323 {
324 "label": "Enter",
325 "x": 12.75,
326 "y": 3.5,
327 "w": 2.25
328 },
329 {
330 "label": "Shift",
331 "x": 0,
332 "y": 4.5,
333 "w": 2.25
334 },
335 {
336 "label": "Z",
337 "x": 2.25,
338 "y": 4.5
339 },
340 {
341 "label": "X",
342 "x": 3.25,
343 "y": 4.5
344 },
345 {
346 "label": "C",
347 "x": 4.25,
348 "y": 4.5
349 },
350 {
351 "label": "V",
352 "x": 5.25,
353 "y": 4.5
354 },
355 {
356 "label": "B",
357 "x": 6.25,
358 "y": 4.5
359 },
360 {
361 "label": "N",
362 "x": 7.25,
363 "y": 4.5
364 },
365 {
366 "label": "M",
367 "x": 8.25,
368 "y": 4.5
369 },
370 {
371 "label": "<",
372 "x": 9.25,
373 "y": 4.5
374 },
375 {
376 "label": ">",
377 "x": 10.25,
378 "y": 4.5
379 },
380 {
381 "label": "?",
382 "x": 11.25,
383 "y": 4.5
384 },
385 {
386 "label": "Shift",
387 "x": 12.25,
388 "y": 4.5,
389 "w": 2.75
390 },
391 {
392 "label": "\u2191",
393 "x": 16.25,
394 "y": 4.5
395 },
396 {
397 "label": "Ctrl",
398 "x": 0,
399 "y": 5.5,
400 "w": 1.5
401 },
402 {
403 "label": "Meta",
404 "x": 1.5,
405 "y": 5.5,
406 "w": 1
407 },
408 {
409 "label": "Alt",
410 "x": 2.5,
411 "y": 5.5,
412 "w": 1.5
413 },
414 {
415 "label": "Space",
416 "x": 4,
417 "y": 5.5,
418 "w": 5.75
419 },
420 {
421 "label": "Alt",
422 "x": 9.75,
423 "y": 5.5,
424 "w": 1.25
425 },
426 {
427 "label": "Meta",
428 "x": 11,
429 "y": 5.5,
430 "w": 1.5
431 },
432 {
433 "label": "Menu",
434 "x": 12.5,
435 "y": 5.5,
436 "w": 1
437 },
438 {
439 "label": "Ctrl",
440 "x": 13.5,
441 "y": 5.5,
442 "w": 1.5
443 },
444 {
445 "label": "\u2190",
446 "x": 15.25,
447 "y": 5.5
448 },
449 {
450 "label": "\u2193",
451 "x": 16.25,
452 "y": 5.5
453 },
454 {
455 "label": "\u2192",
456 "x": 17.25,
457 "y": 5.5
458 }
459 ]
460 }
461 }
462}
diff --git a/keyboards/handwired/unicomp_mini_m/keymaps/default/keymap.c b/keyboards/handwired/unicomp_mini_m/keymaps/default/keymap.c
new file mode 100644
index 000000000..068c6c4b6
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/keymaps/default/keymap.c
@@ -0,0 +1,106 @@
1/* Copyright 2021 stevendlander
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Layer shortcuts
19enum custom_layers {
20 _QWERTY,
21 _NUMPAD,
22};
23
24enum custom_keycodes {
25 NUMSLCK = SAFE_RANGE, // Num Lock on shift, Scroll Lock regularly
26 PAUSRST, // Resets keyboard on shift, Pause|break regularly
27 PSCSYSR, // Sends SYSREQ on alt, Print Screen regularly
28};
29
30// Mod key detection
31#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
32#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
33
34const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35 [_QWERTY] = LAYOUT(
36 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, PSCSYSR, NUMSLCK, PAUSRST,
37 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_NO, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
38 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,
39 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_NO, KC_ENT,
40 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_UP,
41 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
42 ),
43 [_NUMPAD] = LAYOUT(
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NUMSLCK, KC_TRNS,
45 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_TRNS, KC_PMNS, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
46 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
47 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,
48 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_TRNS, KC_PDOT, KC_PSLS, KC_TRNS, KC_TRNS, KC_TRNS,
49 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
50 ),
51};
52
53bool process_record_user(uint16_t keycode, keyrecord_t *record) {
54 switch (keycode) {
55 case NUMSLCK: {
56 if (record->event.pressed) {
57 if (keyboard_report->mods & MODS_SHIFT_MASK) {
58 tap_code(KC_NLCK);
59 } else {
60 register_code(KC_SLCK);
61 }
62 } else {
63 unregister_code(KC_SLCK);
64 }
65 break;
66 }
67 case PAUSRST: {
68 if (record->event.pressed) {
69 if (keyboard_report->mods & MODS_SHIFT_MASK) {
70 reset_keyboard();
71 } else {
72 register_code(KC_PAUS);
73 }
74 } else {
75 unregister_code(KC_PAUS);
76 }
77 break;
78 }
79 case PSCSYSR: {
80 if (record->event.pressed) {
81 if (keyboard_report->mods & MODS_ALT_MASK) {
82 tap_code(KC_SYSREQ);
83 } else {
84 register_code(KC_PAUS);
85 }
86 } else {
87 unregister_code(KC_PAUS);
88 }
89 break;
90 }
91 }
92 return true;
93}
94
95bool led_update_user(led_t led_state) {
96 static bool num_state = false;
97 if (num_state != led_state.num_lock) {
98 if (led_state.num_lock) {
99 layer_on(_NUMPAD);
100 } else {
101 layer_off(_NUMPAD);
102 }
103 num_state = led_state.num_lock;
104 }
105 return true;
106}
diff --git a/keyboards/handwired/unicomp_mini_m/keymaps/default/readme.md b/keyboards/handwired/unicomp_mini_m/keymaps/default/readme.md
new file mode 100644
index 000000000..f15b1b50d
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for unicomp\_mini\_m
diff --git a/keyboards/handwired/unicomp_mini_m/readme.md b/keyboards/handwired/unicomp_mini_m/readme.md
new file mode 100644
index 000000000..0640fbb25
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/readme.md
@@ -0,0 +1,127 @@
1## Unicomp Mini M with Teensy2.0++ controller & QMK Firmware
2
3### Overview
4
5#### Goals
6
7The goal of this project was to replace the stock control board of the Unicomp Mini M with a programmable one. The Mini
8M was released by [Unicomp](https://www.pckeyboard.com) in Q1 of 2021 and is a re-release of The IBM Model M Space
9Saving Keyboard (SSK) with some enhancements.
10
11This guide strives to achieve the following:
12
13* Make completely reversable changes, or in other words, no permanent modifications to the Mini M
14* Allow full programmability of the Mini M via QMK
15* Be able to flash firmware without having to take the board apart to hit the reset button
16* Create a default keymap that works just like the stock keymap shipped from Unicomp, including the toggle-able number
17 pad
18* Support all LEDs as normal
19
20My guide will go a few steps further:
21
22* Convert the wired connection from USB-A to USB-C
23* Install a potentiometer to dim the LEDs if desired
24
25#### Credits
26
27The following resources were instrumental to the success of this project:
28
29* Model M 101/102 write-up located in `qmk_firmware/keyboards/converter/modelm`
30* [Model M Subreddit](https://modelm.reddit.com)
31* Model M Discord
32
33### Hardware
34
35##### Parts
36
37For a working Mini M with QMK *without* LEDs working, the following parts are necessary:
38
39* 1 Adafruit Perma-Proto Full Sized Breadboard. Luckily, this board is a perfect fit for the Mini M case!
40* 1 Teensy2.0++, with headers soldered on if you can find it
41 * 2 20-row x 1 column headers, if you can't find a Teensy with headers already soldered on
42* 2 16-pin Ribbon connectors, PCB mount
43* Hookup wire. I used 30AWG wire and while it worked, I should have used 1 gauge (or more) thicker
44* A panel mount male USB-B to female USB-C extender
45
46To get the Mini M working with LEDs, you will need:
47
48* 3 1kOhm through-hole resistors
49
50##### Tools
51
52The following were absolutely critical for the project:
53
54* Soldering iron, preferably one with a narrow tip for small connections
55* Drill, preferably a hand-held rotary tool (such as a Dremel)
56* Wire strippers/cutters
57* A sharp knife
58
59Optional, but worth having around:
60
61* Helping-hands, PCB holder, preferably both
62* Multi-meter for testing continuity of your connections
63* Hot-glue gun for mounting the USB extender to the Perma-Proto
64
65### Assembly
66
67#### Solder Teensy to the Perma-Proto
68
691. Solder headers to Teensy
702. Solder headers to Perma-Proto
71
72#### Solder ribbon connectors
73
74* Rows on the Perma-Proto that line up with membrane ribbons
75* Trim excess under board
76* Test continuity
77
78#### Solder in hookup wires
79
80* Ribbon connector used for the right ribbon will need hookup wire to establish connections to the Teensy
81* 12 required, 16 if you want full functionality
82
83#### Optional: Solder in resistors
84
85#### Caveat: D6 pin on the Teensy
86
87There are a few ways to mount the Teensy to the Perma-Proto board. I chose to connect my 16 pin ribbon connector to the
88Teensy pins starting at C7 and ending at D2. If you do this, beware that pin D6 will not work for the purposes of this
89project. It is possible to modify it to make it so, but that is beyond the scope of this guide.
90
91Bypassing D6 is necessary if you mount your ribbon connector as I have just described. Luckily, it is a simple process!
92First, with a sharp knife, sever the connection between your ribbon connector pin that is connected to Teensy D6 pin. I
93would recommend doing this at the closest possible point to the Teensy on the underside of the Perma-Proto board. Once
94that is done, use a remaining point on the Perma-Proto bus for that ribbon connection (that was previously connected to
95D6) to add a jumper wire connected to pin B7. If you are using the firmware files provided in this repository,
96everything is already set for this configuration.
97
98### Testing
99
100### Software
101
102#### Build firmware
103
104See qmk documentation on getting your build environment working.
105
106Compile the Mini M firmware files with the default keymap. It allows for the Mini M to be used with the same
107functionality as shipped from the manufacturer.
108
109```bash
110$ qmk compile -kb unicomp/mini_m -km default
111```
112
113While plugged in, press the reset button on your Teensy and then:
114
115```bash
116$ qmk flash -kb unicomp/mini_m -km default
117```
118
119If everything works to this point, congratulations! You now have a programmable Mini M. If you are using the default
120keymap, you can reset your Teensy by pressing Shift+Pause together, eliminating the need to take apart the case in order
121to do so.
122
123#### Keymaps
124
125To build your own keymap, create a new directory in `keyboards/unicomp/mini_m/keymaps/<your name>`, copy the files from
126`keyboards/unicomp/mini_m/default` into your new directory, and edit them as you wish. When you are ready to flash your
127new keymap to the Mini M, the command will be `qmk flash -kb unicomp/mini_m -kb <your name>`.
diff --git a/keyboards/handwired/unicomp_mini_m/rules.mk b/keyboards/handwired/unicomp_mini_m/rules.mk
new file mode 100644
index 000000000..92cbe9b13
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = at90usb1286
3
4# Bootloader selection
5BOOTLOADER = halfkay
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = no # Audio control and System control
13CONSOLE_ENABLE = yes # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.c b/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.c
new file mode 100644
index 000000000..e8249df25
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.c
@@ -0,0 +1,16 @@
1/* Copyright 2021 stevendlander
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "unicomp_mini_m.h"
diff --git a/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.h b/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.h
new file mode 100644
index 000000000..8e426da05
--- /dev/null
+++ b/keyboards/handwired/unicomp_mini_m/unicomp_mini_m.h
@@ -0,0 +1,49 @@
1/* Copyright 2021 stevendlander
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20/* This a shortcut to help you visually see your layout.
21 * The first section contains "names" for physical keys of the keyboard
22 * and defines their position on the board.
23 * The second section defines position of the keys on the switch matrix
24 * (where COLUMNS and ROWS crosses). */
25
26#define LAYOUT( \
27 K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \
28 \
29 K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, \
30 K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, \
31 K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, \
32 K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, \
33 K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J, K0K \
34) \
35{ \
36/* 00 */ { K4A, K5A, K4F, K1M, K5C, K5D, K5E, K3K, KC_NO, KC_NO, KC_NO, KC_NO, K0C, K2N, KC_NO, KC_NO }, \
37/* 01 */ { K2A, K1B, K3B, KC_NO, KC_NO, KC_NO, KC_NO, K4G, K5F, KC_NO, KC_NO, KC_NO, KC_NO, K2M, K0H, K1N, }, \
38/* 02 */ { K2C, K2D, K5B, K2E, K2F, K1C, K1E, KC_NO, K1D, K1F, K1G, K2B, K3A, KC_NO, KC_NO, KC_NO }, \
39/* 03 */ { KC_NO, KC_NO, K4B, KC_NO, KC_NO, KC_NO, KC_NO, K3G, K5G, KC_NO, KC_NO, K0B, KC_NO, KC_NO, KC_NO, KC_NO }, \
40/* 04 */ { KC_NO, KC_NO, K4E, KC_NO, KC_NO, KC_NO, KC_NO, K3J, K5H, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0A, K1A, }, \
41/* 05 */ { KC_NO, KC_NO, K3C, KC_NO, KC_NO, KC_NO, KC_NO, K4H, K5I, K3L, K0F, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
42/* 06 */ { KC_NO, KC_NO, K4C, KC_NO, KC_NO, KC_NO, KC_NO, K3H, K5J, K4M, K5K, K5L, K4L, K5N, KC_NO, KC_NO }, \
43/* 07 */ { KC_NO, KC_NO, K4D, KC_NO, KC_NO, KC_NO, KC_NO, K3I, KC_NO, KC_NO, KC_NO, K5M, K4N, K5O, KC_NO, KC_NO }, \
44/* 08 */ { KC_NO, KC_NO, K3F, KC_NO, KC_NO, KC_NO, KC_NO, K4K, KC_NO, K4O, K1O, K3P, K4P, KC_NO, KC_NO, KC_NO }, \
45/* 09 */ { KC_NO, KC_NO, K3E, K0E, K0I, KC_NO, KC_NO, K4J, KC_NO, K3N, KC_NO, KC_NO, KC_NO, K4Q, KC_NO, KC_NO }, \
46/* 0A */ { K0D, KC_NO, K3D, KC_NO, K0G, KC_NO, KC_NO, K4I, KC_NO, K3M, K0K, K0J, K4R, K3Q, KC_NO, KC_NO }, \
47/* 0B */ { K1I, K1J, KC_NO, K1K, K1L, K2G, K2I, KC_NO, K2H, K2J, K2K, K1H, K2L, K3O, KC_NO, K5P, }, \
48}
49/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */