]> git.gir.st - tmk_keyboard.git/blob - converter/pc98_usb/keymap.c
New keymap of PC98
[tmk_keyboard.git] / converter / pc98_usb / keymap.c
1 /*
2 Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <stdint.h>
19 #include <stdbool.h>
20 #include <avr/pgmspace.h>
21 #include "keycode.h"
22 #include "action.h"
23 #include "action_macro.h"
24 #include "layer_switch.h"
25 #include "util.h"
26 #include "keymap.h"
27
28
29
30
31 /* PC-9801-98-S02 Raku Raku keyboard(Luckyboard) Normal Mode
32 ,---------------------------------------------------------------.
33 | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
34 `---------------------------------------------------------------'
35 ,---------------------------------------------------------------.
36 | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
37 |---------------------------------------------------------------|
38 | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
39 |---------------------------------------------------------'. |
40 | 74| 20| 21| 22| 23| 24| 3B | 3C | 25| 26| 27| 28| 29| |
41 |---------------------------------------------------------------|
42 | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
43 `---------------------------------------------------------------'
44 | 73| 51| 5B| 59| 34| 5A| 35| xx|
45 `-----------------------------------------------'
46 xx: 74 35 F4 B5
47 */
48 #define KEYMAP( \
49 K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K36, K37, K3F, K3E, \
50 K00, K01, K02, K03, K04, K05, K58, K71, K06, K07, K08, K09, K0A, K0E, \
51 K0F, K10, K11, K12, K13, K14, K3A, K15, K16, K17, K18, K19, K1C, \
52 K74, K20, K21, K22, K23, K24, K3B, K3C, K25, K26, K27, K28, K29, \
53 K70,K2A, K2B, K2C, K2D, K2E, K38, K3D, K39, K2F, K30, K31, K32, K33, \
54 K73, K51, K5B, K59, K34, K5A, K35 \
55 ) { \
56 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
57 { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_NO, KC_NO, KC_##K0E, KC_##K0F }, \
58 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
59 { KC_##K18, KC_##K19, KC_NO, KC_NO, KC_##K1C, KC_NO, KC_NO, KC_NO }, \
60 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
61 { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
62 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
63 { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
64 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
65 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
66 { KC_NO, KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
67 { KC_NO, KC_NO, KC_##K5A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
68 { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
69 { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO }, \
70 { KC_##K70, KC_NO, KC_NO, KC_##K73, KC_##K74, KC_NO, KC_NO, KC_NO }, \
71 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
72 }
73
74
75
76 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
77 /*
78 ,---------------------------------------------------------------.
79 | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
80 `---------------------------------------------------------------'
81 ,---------------------------------------------------------------.
82 | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
83 |---------------------------------------------------------------|
84 | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
85 |---------------------------------------------------------------|
86 | 74| 20| 21| 22| 23| 24| MINS| EQL| 25| 26| 27| 28| 29| |
87 |---------------------------------------------------------------|
88 | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
89 `---------------------------------------------------------------'
90 | 73| 51| 5B| 59| 34| 5A| 35| xx|
91 `-----------------------------------------------'
92 */
93 KEYMAP(
94 CANCEL,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
95 ESC, 1, 2, 3, 4, 5, NO, NO, 6, 7, 8, 9, 0, BSPC,
96 TAB, Q, W, E, R, T, UP, Y, U, I, O, P, ENT,
97 LCTL, A, S, D, F, G, MINS, EQL, H, J, K, L, FN2,
98 LSFT, Z, X, C, V, B, INS, DOWN, DEL, N, M,COMM, DOT, FN1,
99 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
100 ),
101 KEYMAP(
102 PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
103 GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
104 TAB, Q, W, E, R, T, UP, HOME,PGDN,PGUP, END, P, ENT,
105 LCTL, A, S, D, F, G, MINS, EQL, LEFT,DOWN, UP,RGHT,SCLN,
106 LSFT, Z, X, C, V, B, INS, DOWN, DEL,HOME,PGDN,PGUP, END,TRNS,
107 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
108 ),
109 KEYMAP(
110 PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
111 GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
112 TAB, Q, W, E, R, T, UP, WH_L,WH_D,WH_U,WH_R, P, ENT,
113 LCTL, A, S, D, F, G, MINS, EQL, MS_L,MS_D,MS_U,MS_R,TRNS,
114 LSFT, Z, X, C, V, B, INS, DOWN, BTN3,BTN2,BTN1,BTN4,BTN5,TRNS,
115 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
116 ),
117 };
118
119 static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {};
120
121 static const uint16_t PROGMEM fn_actions[] = {
122 ACTION_KEYMAP_TAP_TOGGLE(0), // FN0
123 ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1
124 ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2
125 ACTION_KEYMAP(2), // FN3
126 };
127
128
129
130 /*
131 * No need to edit.
132 */
133 #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
134 #define OVERLAYS_SIZE (sizeof(overlays) / sizeof(overlays[0]))
135 #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
136
137 /* translates key to keycode */
138 uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
139 {
140 /* Overlay: 16-31(OVERLAY_BIT(0x10) | overlay_layer) */
141 if (layer & OVERLAY_BIT) {
142 layer &= OVERLAY_MASK;
143 if (layer < OVERLAYS_SIZE) {
144 return pgm_read_byte(&overlays[(layer)][(key.row)][(key.col)]);
145 } else {
146 return KC_TRANSPARENT;
147 }
148 }
149 /* Keymap: 0-15 */
150 else {
151 if (layer < KEYMAPS_SIZE) {
152 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
153 } else {
154 // fall back to layer 0
155 return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
156 }
157 }
158 }
159
160 /* translates Fn keycode to action */
161 action_t keymap_fn_to_action(uint8_t keycode)
162 {
163 action_t action;
164 if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
165 action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
166 } else {
167 action.code = ACTION_NO;
168 }
169 return action;
170 }
Imprint / Impressum