|
29 | 29 |
|
30 | 30 |
|
31 | 31 | #include "Language.h"
|
| 32 | +#include "Properties.h" |
32 | 33 | #include "InputEvent.h"
|
33 | 34 | #include <stdio.h>
|
34 | 35 | #include <SDL.h>
|
35 | 36 |
|
36 |
| -static int kbdTable[SDLK_LAST]; |
| 37 | +static int kbdTable[3][SDLK_LAST]; |
| 38 | + |
| 39 | +static int inputTypeScanStart = 0; |
| 40 | +static int inputTypeScanEnd = 1; |
37 | 41 |
|
38 | 42 | static void initKbdTable()
|
39 | 43 | {
|
40 | 44 | memset (kbdTable, 0, sizeof(kbdTable));
|
41 | 45 |
|
42 |
| - kbdTable[SDLK_0] = EC_0; |
43 |
| - kbdTable[SDLK_1] = EC_1; |
44 |
| - kbdTable[SDLK_2] = EC_2; |
45 |
| - kbdTable[SDLK_3] = EC_3; |
46 |
| - kbdTable[SDLK_4] = EC_4; |
47 |
| - kbdTable[SDLK_5] = EC_5; |
48 |
| - kbdTable[SDLK_6] = EC_6; |
49 |
| - kbdTable[SDLK_7] = EC_7; |
50 |
| - kbdTable[SDLK_8] = EC_8; |
51 |
| - kbdTable[SDLK_9] = EC_9; |
| 46 | + kbdTable[0][SDLK_0] = EC_0; |
| 47 | + kbdTable[0][SDLK_1] = EC_1; |
| 48 | + kbdTable[0][SDLK_2] = EC_2; |
| 49 | + kbdTable[0][SDLK_3] = EC_3; |
| 50 | + kbdTable[0][SDLK_4] = EC_4; |
| 51 | + kbdTable[0][SDLK_5] = EC_5; |
| 52 | + kbdTable[0][SDLK_6] = EC_6; |
| 53 | + kbdTable[0][SDLK_7] = EC_7; |
| 54 | + kbdTable[0][SDLK_8] = EC_8; |
| 55 | + kbdTable[0][SDLK_9] = EC_9; |
| 56 | + |
| 57 | + kbdTable[0][SDLK_MINUS ] = EC_NEG; |
| 58 | + kbdTable[0][SDLK_EQUALS ] = EC_CIRCFLX; |
| 59 | + kbdTable[0][SDLK_BACKSLASH ] = EC_BKSLASH; |
| 60 | + kbdTable[0][SDLK_LEFTBRACKET ] = EC_AT; |
| 61 | + kbdTable[0][SDLK_RIGHTBRACKET] = EC_LBRACK; |
| 62 | + kbdTable[0][SDLK_SEMICOLON ] = EC_SEMICOL; |
| 63 | + kbdTable[0][SDLK_QUOTE ] = EC_COLON; |
| 64 | + kbdTable[0][SDLK_CARET ] = EC_RBRACK; |
| 65 | + kbdTable[0][SDLK_COMMA ] = EC_COMMA; |
| 66 | + kbdTable[0][SDLK_PERIOD ] = EC_PERIOD; |
| 67 | + kbdTable[0][SDLK_SLASH ] = EC_DIV; |
| 68 | + kbdTable[0][SDLK_RCTRL ] = EC_UNDSCRE; |
| 69 | + |
| 70 | + kbdTable[0][SDLK_a] = EC_A; |
| 71 | + kbdTable[0][SDLK_b] = EC_B; |
| 72 | + kbdTable[0][SDLK_c] = EC_C; |
| 73 | + kbdTable[0][SDLK_d] = EC_D; |
| 74 | + kbdTable[0][SDLK_e] = EC_E; |
| 75 | + kbdTable[0][SDLK_f] = EC_F; |
| 76 | + kbdTable[0][SDLK_g] = EC_G; |
| 77 | + kbdTable[0][SDLK_h] = EC_H; |
| 78 | + kbdTable[0][SDLK_i] = EC_I; |
| 79 | + kbdTable[0][SDLK_j] = EC_J; |
| 80 | + kbdTable[0][SDLK_k] = EC_K; |
| 81 | + kbdTable[0][SDLK_l] = EC_L; |
| 82 | + kbdTable[0][SDLK_m] = EC_M; |
| 83 | + kbdTable[0][SDLK_n] = EC_N; |
| 84 | + kbdTable[0][SDLK_o] = EC_O; |
| 85 | + kbdTable[0][SDLK_p] = EC_P; |
| 86 | + kbdTable[0][SDLK_q] = EC_Q; |
| 87 | + kbdTable[0][SDLK_r] = EC_R; |
| 88 | + kbdTable[0][SDLK_s] = EC_S; |
| 89 | + kbdTable[0][SDLK_t] = EC_T; |
| 90 | + kbdTable[0][SDLK_u] = EC_U; |
| 91 | + kbdTable[0][SDLK_v] = EC_V; |
| 92 | + kbdTable[0][SDLK_w] = EC_W; |
| 93 | + kbdTable[0][SDLK_x] = EC_X; |
| 94 | + kbdTable[0][SDLK_y] = EC_Y; |
| 95 | + kbdTable[0][SDLK_z] = EC_Z; |
52 | 96 |
|
53 |
| - kbdTable[SDLK_MINUS ] = EC_NEG; |
54 |
| - kbdTable[SDLK_EQUALS ] = EC_CIRCFLX; |
55 |
| - kbdTable[SDLK_BACKSLASH ] = EC_BKSLASH; |
56 |
| - kbdTable[SDLK_LEFTBRACKET ] = EC_AT; |
57 |
| - kbdTable[SDLK_RIGHTBRACKET] = EC_LBRACK; |
58 |
| - kbdTable[SDLK_SEMICOLON ] = EC_SEMICOL; |
59 |
| - kbdTable[SDLK_QUOTE ] = EC_COLON; |
60 |
| - kbdTable[SDLK_CARET ] = EC_RBRACK; |
61 |
| - kbdTable[SDLK_COMMA ] = EC_COMMA; |
62 |
| - kbdTable[SDLK_PERIOD ] = EC_PERIOD; |
63 |
| - kbdTable[SDLK_SLASH ] = EC_DIV; |
64 |
| - kbdTable[SDLK_RCTRL ] = EC_UNDSCRE; |
| 97 | + kbdTable[0][SDLK_F1 ] = EC_F1; |
| 98 | + kbdTable[0][SDLK_F2 ] = EC_F2; |
| 99 | + kbdTable[0][SDLK_F3 ] = EC_F3; |
| 100 | + kbdTable[0][SDLK_F4 ] = EC_F4; |
| 101 | + kbdTable[0][SDLK_F5 ] = EC_F5; |
| 102 | + kbdTable[0][SDLK_ESCAPE ] = EC_ESC; |
| 103 | + kbdTable[0][SDLK_TAB ] = EC_TAB; |
| 104 | + kbdTable[0][SDLK_PAGEUP ] = EC_STOP; |
| 105 | + kbdTable[0][SDLK_BACKSPACE] = EC_BKSPACE; |
| 106 | + kbdTable[0][SDLK_END ] = EC_SELECT; |
| 107 | + kbdTable[0][SDLK_RETURN ] = EC_RETURN; |
| 108 | + kbdTable[0][SDLK_SPACE ] = EC_SPACE; |
| 109 | + kbdTable[0][SDLK_HOME ] = EC_CLS; |
| 110 | + kbdTable[0][SDLK_INSERT ] = EC_INS; |
| 111 | + kbdTable[0][SDLK_DELETE ] = EC_DEL; |
| 112 | + kbdTable[0][SDLK_LEFT ] = EC_LEFT; |
| 113 | + kbdTable[0][SDLK_UP ] = EC_UP; |
| 114 | + kbdTable[0][SDLK_RIGHT ] = EC_RIGHT; |
| 115 | + kbdTable[0][SDLK_DOWN ] = EC_DOWN; |
65 | 116 |
|
66 |
| - kbdTable[SDLK_a] = EC_A; |
67 |
| - kbdTable[SDLK_b] = EC_B; |
68 |
| - kbdTable[SDLK_c] = EC_C; |
69 |
| - kbdTable[SDLK_d] = EC_D; |
70 |
| - kbdTable[SDLK_e] = EC_E; |
71 |
| - kbdTable[SDLK_f] = EC_F; |
72 |
| - kbdTable[SDLK_g] = EC_G; |
73 |
| - kbdTable[SDLK_h] = EC_H; |
74 |
| - kbdTable[SDLK_i] = EC_I; |
75 |
| - kbdTable[SDLK_j] = EC_J; |
76 |
| - kbdTable[SDLK_k] = EC_K; |
77 |
| - kbdTable[SDLK_l] = EC_L; |
78 |
| - kbdTable[SDLK_m] = EC_M; |
79 |
| - kbdTable[SDLK_n] = EC_N; |
80 |
| - kbdTable[SDLK_o] = EC_O; |
81 |
| - kbdTable[SDLK_p] = EC_P; |
82 |
| - kbdTable[SDLK_q] = EC_Q; |
83 |
| - kbdTable[SDLK_r] = EC_R; |
84 |
| - kbdTable[SDLK_s] = EC_S; |
85 |
| - kbdTable[SDLK_t] = EC_T; |
86 |
| - kbdTable[SDLK_u] = EC_U; |
87 |
| - kbdTable[SDLK_v] = EC_V; |
88 |
| - kbdTable[SDLK_w] = EC_W; |
89 |
| - kbdTable[SDLK_x] = EC_X; |
90 |
| - kbdTable[SDLK_y] = EC_Y; |
91 |
| - kbdTable[SDLK_z] = EC_Z; |
| 117 | + kbdTable[0][SDLK_KP_MULTIPLY] = EC_NUMMUL; |
| 118 | + kbdTable[0][SDLK_KP_PLUS ] = EC_NUMADD; |
| 119 | + kbdTable[0][SDLK_KP_DIVIDE ] = EC_NUMDIV; |
| 120 | + kbdTable[0][SDLK_KP_MINUS ] = EC_NUMSUB; |
| 121 | + kbdTable[0][SDLK_KP_PERIOD ] = EC_NUMPER; |
| 122 | + kbdTable[0][SDLK_PAGEDOWN ] = EC_NUMCOM; |
| 123 | + kbdTable[0][SDLK_KP0] = EC_NUM0; |
| 124 | + kbdTable[0][SDLK_KP1] = EC_NUM1; |
| 125 | + kbdTable[0][SDLK_KP2] = EC_NUM2; |
| 126 | + kbdTable[0][SDLK_KP3] = EC_NUM3; |
| 127 | + kbdTable[0][SDLK_KP4] = EC_NUM4; |
| 128 | + kbdTable[0][SDLK_KP5] = EC_NUM5; |
| 129 | + kbdTable[0][SDLK_KP6] = EC_NUM6; |
| 130 | + kbdTable[0][SDLK_KP7] = EC_NUM7; |
| 131 | + kbdTable[0][SDLK_KP8] = EC_NUM8; |
| 132 | + kbdTable[0][SDLK_KP9] = EC_NUM9; |
92 | 133 |
|
93 |
| - kbdTable[SDLK_F1 ] = EC_F1; |
94 |
| - kbdTable[SDLK_F2 ] = EC_F2; |
95 |
| - kbdTable[SDLK_F3 ] = EC_F3; |
96 |
| - kbdTable[SDLK_F4 ] = EC_F4; |
97 |
| - kbdTable[SDLK_F5 ] = EC_F5; |
98 |
| - kbdTable[SDLK_ESCAPE ] = EC_ESC; |
99 |
| - kbdTable[SDLK_TAB ] = EC_TAB; |
100 |
| - kbdTable[SDLK_PAGEUP ] = EC_STOP; |
101 |
| - kbdTable[SDLK_BACKSPACE] = EC_BKSPACE; |
102 |
| - kbdTable[SDLK_END ] = EC_SELECT; |
103 |
| - kbdTable[SDLK_RETURN ] = EC_RETURN; |
104 |
| - kbdTable[SDLK_SPACE ] = EC_SPACE; |
105 |
| - kbdTable[SDLK_HOME ] = EC_CLS; |
106 |
| - kbdTable[SDLK_INSERT ] = EC_INS; |
107 |
| - kbdTable[SDLK_DELETE ] = EC_DEL; |
108 |
| - kbdTable[SDLK_LEFT ] = EC_LEFT; |
109 |
| - kbdTable[SDLK_UP ] = EC_UP; |
110 |
| - kbdTable[SDLK_RIGHT ] = EC_RIGHT; |
111 |
| - kbdTable[SDLK_DOWN ] = EC_DOWN; |
| 134 | + kbdTable[0][SDLK_LSUPER ] = EC_TORIKE; |
| 135 | + kbdTable[0][SDLK_RSUPER ] = EC_JIKKOU; |
| 136 | + kbdTable[0][SDLK_LSHIFT ] = EC_LSHIFT; |
| 137 | + kbdTable[0][SDLK_RSHIFT ] = EC_RSHIFT; |
| 138 | + kbdTable[0][SDLK_LCTRL ] = EC_CTRL; |
| 139 | + kbdTable[0][SDLK_LALT ] = EC_GRAPH; |
| 140 | + kbdTable[0][SDLK_RALT ] = EC_CODE; |
| 141 | + kbdTable[0][SDLK_CAPSLOCK] = EC_CAPS; |
| 142 | + kbdTable[0][SDLK_KP_ENTER] = EC_PAUSE; |
| 143 | + kbdTable[0][SDLK_SYSREQ ] = EC_PRINT; |
112 | 144 |
|
113 |
| - kbdTable[SDLK_KP_MULTIPLY] = EC_NUMMUL; |
114 |
| - kbdTable[SDLK_KP_PLUS ] = EC_NUMADD; |
115 |
| - kbdTable[SDLK_KP_DIVIDE ] = EC_NUMDIV; |
116 |
| - kbdTable[SDLK_KP_MINUS ] = EC_NUMSUB; |
117 |
| - kbdTable[SDLK_KP_PERIOD ] = EC_NUMPER; |
118 |
| - kbdTable[SDLK_PAGEDOWN ] = EC_NUMCOM; |
119 |
| - kbdTable[SDLK_KP0] = EC_NUM0; |
120 |
| - kbdTable[SDLK_KP1] = EC_NUM1; |
121 |
| - kbdTable[SDLK_KP2] = EC_NUM2; |
122 |
| - kbdTable[SDLK_KP3] = EC_NUM3; |
123 |
| - kbdTable[SDLK_KP4] = EC_NUM4; |
124 |
| - kbdTable[SDLK_KP5] = EC_NUM5; |
125 |
| - kbdTable[SDLK_KP6] = EC_NUM6; |
126 |
| - kbdTable[SDLK_KP7] = EC_NUM7; |
127 |
| - kbdTable[SDLK_KP8] = EC_NUM8; |
128 |
| - kbdTable[SDLK_KP9] = EC_NUM9; |
| 145 | + kbdTable[1][SDLK_SPACE ] = EC_JOY1_BUTTON1; |
| 146 | + kbdTable[1][SDLK_LCTRL ] = EC_JOY1_BUTTON2; |
| 147 | + kbdTable[1][SDLK_LEFT ] = EC_JOY1_LEFT; |
| 148 | + kbdTable[1][SDLK_UP ] = EC_JOY1_UP; |
| 149 | + kbdTable[1][SDLK_RIGHT ] = EC_JOY1_RIGHT; |
| 150 | + kbdTable[1][SDLK_DOWN ] = EC_JOY1_DOWN; |
| 151 | + kbdTable[1][SDLK_0 ] = EC_COLECO1_0; |
| 152 | + kbdTable[1][SDLK_1 ] = EC_COLECO1_1; |
| 153 | + kbdTable[1][SDLK_2 ] = EC_COLECO1_2; |
| 154 | + kbdTable[1][SDLK_3 ] = EC_COLECO1_3; |
| 155 | + kbdTable[1][SDLK_4 ] = EC_COLECO1_4; |
| 156 | + kbdTable[1][SDLK_5 ] = EC_COLECO1_5; |
| 157 | + kbdTable[1][SDLK_6 ] = EC_COLECO1_6; |
| 158 | + kbdTable[1][SDLK_7 ] = EC_COLECO1_7; |
| 159 | + kbdTable[1][SDLK_8 ] = EC_COLECO1_8; |
| 160 | + kbdTable[1][SDLK_9 ] = EC_COLECO1_9; |
| 161 | + kbdTable[1][SDLK_MINUS ] = EC_COLECO1_STAR; |
| 162 | + kbdTable[1][SDLK_EQUALS ] = EC_COLECO1_HASH; |
129 | 163 |
|
130 |
| - kbdTable[SDLK_LSUPER ] = EC_TORIKE; |
131 |
| - kbdTable[SDLK_RSUPER ] = EC_JIKKOU; |
132 |
| - kbdTable[SDLK_LSHIFT ] = EC_LSHIFT; |
133 |
| - kbdTable[SDLK_RSHIFT ] = EC_RSHIFT; |
134 |
| - kbdTable[SDLK_LCTRL ] = EC_CTRL; |
135 |
| - kbdTable[SDLK_LALT ] = EC_GRAPH; |
136 |
| - kbdTable[SDLK_RALT ] = EC_CODE; |
137 |
| - kbdTable[SDLK_CAPSLOCK] = EC_CAPS; |
138 |
| - kbdTable[SDLK_KP_ENTER] = EC_PAUSE; |
139 |
| - kbdTable[SDLK_SYSREQ ] = EC_PRINT; |
| 164 | + kbdTable[2][SDLK_KP0 ] = EC_COLECO2_0; |
| 165 | + kbdTable[2][SDLK_KP1 ] = EC_COLECO2_1; |
| 166 | + kbdTable[2][SDLK_KP2 ] = EC_COLECO2_2; |
| 167 | + kbdTable[2][SDLK_KP3 ] = EC_COLECO2_3; |
| 168 | + kbdTable[2][SDLK_KP4 ] = EC_COLECO2_4; |
| 169 | + kbdTable[2][SDLK_KP5 ] = EC_COLECO2_5; |
| 170 | + kbdTable[2][SDLK_KP6 ] = EC_COLECO2_6; |
| 171 | + kbdTable[2][SDLK_KP7 ] = EC_COLECO2_7; |
| 172 | + kbdTable[2][SDLK_KP8 ] = EC_COLECO2_8; |
| 173 | + kbdTable[2][SDLK_KP9 ] = EC_COLECO2_9; |
| 174 | + kbdTable[2][SDLK_KP_MULTIPLY ] = EC_COLECO2_STAR; |
| 175 | + kbdTable[2][SDLK_KP_DIVIDE ] = EC_COLECO2_HASH; |
140 | 176 | }
|
141 | 177 |
|
142 |
| -void keyboardInit() |
| 178 | +void keyboardInit(Properties *properties) |
143 | 179 | {
|
| 180 | + if (strncmp(properties->emulation.machineName, "COL", 3) == 0) { |
| 181 | + inputTypeScanStart = 1; |
| 182 | + inputTypeScanEnd = 2; |
| 183 | + fprintf(stderr, "Initializing ColecoVision input\n"); |
| 184 | + } |
| 185 | + |
144 | 186 | initKbdTable();
|
145 | 187 | inputEventReset();
|
146 | 188 | }
|
147 | 189 |
|
148 | 190 | void keyboardUpdate(SDL_KeyboardEvent *event)
|
149 | 191 | {
|
150 |
| - if (event->type == SDL_KEYUP) { |
151 |
| - inputEventUnset(kbdTable[event->keysym.sym]); |
152 |
| - } else if (event->type == SDL_KEYDOWN) { |
153 |
| - inputEventSet(kbdTable[event->keysym.sym]); |
| 192 | + int i; |
| 193 | + for (i = inputTypeScanStart; i <= inputTypeScanEnd; i++) { |
| 194 | + if (event->type == SDL_KEYUP) { |
| 195 | + inputEventUnset(kbdTable[i][event->keysym.sym]); |
| 196 | + } else if (event->type == SDL_KEYDOWN) { |
| 197 | + inputEventSet(kbdTable[i][event->keysym.sym]); |
| 198 | + } |
154 | 199 | }
|
155 | 200 | }
|
156 | 201 |
|
|
0 commit comments