]> git.donarmstrong.com Git - tmk_firmware.git/blob - converter/pc98_usb/keymap.c
New keymap of PC98
[tmk_firmware.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 }