Rev 644 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
220 | chrv | 1 | #include <avr/pgmspace.h> |
2 | #include <avr/eeprom.h> |
||
3 | |||
4 | #include "pins.h" |
||
5 | #include "mytypes.h" |
||
6 | |||
7 | #include "getfaraddress.h" |
||
8 | #include "main.h" |
||
9 | #include "zx.h" |
||
10 | #include "kbmap.h" |
||
11 | #include "rs232.h" |
||
12 | |||
13 | const UBYTE default_kbmap[] PROGMEM = |
||
14 | { |
||
15 | NO_KEY,NO_KEY, // 00 |
||
292 | chrv | 16 | NO_KEY,NO_KEY, // 01 F9 |
220 | chrv | 17 | NO_KEY,NO_KEY, // 02 |
292 | chrv | 18 | NO_KEY,NO_KEY, // 03 F5 |
19 | NO_KEY,NO_KEY, // 04 F3 |
||
20 | NO_KEY,NO_KEY, // 05 F1 |
||
21 | NO_KEY,NO_KEY, // 06 F2 |
||
22 | NO_KEY,NO_KEY, // 07 F12 |
||
220 | chrv | 23 | NO_KEY,NO_KEY, // 08 |
292 | chrv | 24 | NO_KEY,NO_KEY, // 09 F10 |
25 | NO_KEY,NO_KEY, // 0A F8 |
||
26 | NO_KEY,NO_KEY, // 0B F6 |
||
27 | NO_KEY,NO_KEY, // 0C F4 |
||
220 | chrv | 28 | KEY_CS,KEY_SP, // 0D TAB |
29 | KEY_CS,KEY_1 , // 0E ~ |
||
30 | NO_KEY,NO_KEY, // 0F |
||
31 | |||
32 | NO_KEY,NO_KEY, // 10 |
||
292 | chrv | 33 | NO_KEY,NO_KEY, // 11 ALT |
220 | chrv | 34 | KEY_CS,NO_KEY, // 12 LSHIFT |
35 | NO_KEY,NO_KEY, // 13 |
||
292 | chrv | 36 | NO_KEY,NO_KEY, // 14 LCTRL |
220 | chrv | 37 | KEY_Q ,NO_KEY, // 15 Q |
38 | KEY_1 ,NO_KEY, // 16 1 |
||
39 | NO_KEY,NO_KEY, // 17 |
||
40 | NO_KEY,NO_KEY, // 18 |
||
41 | NO_KEY,NO_KEY, // 19 |
||
42 | KEY_Z ,NO_KEY, // 1A Z |
||
43 | KEY_S ,NO_KEY, // 1B S |
||
44 | KEY_A ,NO_KEY, // 1C A |
||
45 | KEY_W ,NO_KEY, // 1D W |
||
46 | KEY_2 ,NO_KEY, // 1E 2 |
||
47 | NO_KEY,NO_KEY, // 1F |
||
48 | |||
49 | NO_KEY,NO_KEY, // 20 |
||
50 | KEY_C ,NO_KEY, // 21 C |
||
51 | KEY_X ,NO_KEY, // 22 X |
||
52 | KEY_D ,NO_KEY, // 23 D |
||
53 | KEY_E ,NO_KEY, // 24 E |
||
54 | KEY_4 ,NO_KEY, // 25 4 |
||
55 | KEY_3 ,NO_KEY, // 26 3 |
||
56 | NO_KEY,NO_KEY, // 27 |
||
57 | NO_KEY,NO_KEY, // 28 |
||
58 | KEY_SP,NO_KEY, // 29 SPACE |
||
59 | KEY_V ,NO_KEY, // 2A V |
||
60 | KEY_F ,NO_KEY, // 2B F |
||
61 | KEY_T ,NO_KEY, // 2C T |
||
62 | KEY_R ,NO_KEY, // 2D R |
||
63 | KEY_5 ,NO_KEY, // 2E 5 |
||
64 | NO_KEY,NO_KEY, // 2F |
||
65 | |||
66 | NO_KEY,NO_KEY, // 30 |
||
67 | KEY_N ,NO_KEY, // 31 N |
||
68 | KEY_B ,NO_KEY, // 32 B |
||
69 | KEY_H ,NO_KEY, // 33 H |
||
70 | KEY_G ,NO_KEY, // 34 G |
||
71 | KEY_Y ,NO_KEY, // 35 Y |
||
72 | KEY_6 ,NO_KEY, // 36 6 |
||
73 | NO_KEY,NO_KEY, // 37 |
||
74 | NO_KEY,NO_KEY, // 38 |
||
75 | NO_KEY,NO_KEY, // 39 |
||
76 | KEY_M ,NO_KEY, // 3A M |
||
77 | KEY_J ,NO_KEY, // 3B J |
||
78 | KEY_U ,NO_KEY, // 3C U |
||
79 | KEY_7 ,NO_KEY, // 3D 7 |
||
80 | KEY_8 ,NO_KEY, // 3E 8 |
||
81 | NO_KEY,NO_KEY, // 3F |
||
82 | |||
83 | NO_KEY,NO_KEY, // 40 |
||
84 | KEY_SS,KEY_N , // 41 , |
||
85 | KEY_K ,NO_KEY, // 42 K |
||
86 | KEY_I ,NO_KEY, // 43 I |
||
87 | KEY_O ,NO_KEY, // 44 O |
||
88 | KEY_0 ,NO_KEY, // 45 0 |
||
89 | KEY_9 ,NO_KEY, // 46 9 |
||
90 | NO_KEY,NO_KEY, // 47 |
||
91 | NO_KEY,NO_KEY, // 48 |
||
92 | KEY_SS,KEY_M , // 49 . |
||
93 | KEY_SS,KEY_C , // 4A / |
||
94 | KEY_L ,NO_KEY, // 4B L |
||
95 | KEY_SS,KEY_Z , // 4C : |
||
96 | KEY_P ,NO_KEY, // 4D P |
||
97 | KEY_SS,KEY_J , // 4E - |
||
98 | NO_KEY,NO_KEY, // 4F |
||
99 | |||
100 | NO_KEY,NO_KEY, // 50 |
||
101 | NO_KEY,NO_KEY, // 51 |
||
102 | KEY_SS,KEY_P , // 52 " |
||
103 | NO_KEY,NO_KEY, // 53 |
||
104 | KEY_SS,KEY_8 , // 54 [ |
||
105 | KEY_SS,KEY_K , // 55 + |
||
106 | NO_KEY,NO_KEY, // 56 |
||
107 | NO_KEY,NO_KEY, // 57 |
||
108 | KEY_CS,KEY_2 , // 58 CAPSLOCK |
||
109 | KEY_SS,NO_KEY, // 59 RSHIFT |
||
110 | KEY_EN,NO_KEY, // 5A ENTER |
||
111 | KEY_SS,KEY_9 , // 5B ] |
||
112 | NO_KEY,NO_KEY, // 5C |
||
113 | KEY_SS,KEY_CS, // 5D backslash |
||
114 | NO_KEY,NO_KEY, // 5E |
||
115 | NO_KEY,NO_KEY, // 5F |
||
116 | |||
117 | NO_KEY,NO_KEY, // 60 |
||
118 | KEY_SS,KEY_CS, // 61 backslash |
||
119 | NO_KEY,NO_KEY, // 62 |
||
120 | NO_KEY,NO_KEY, // 63 |
||
121 | NO_KEY,NO_KEY, // 64 |
||
122 | NO_KEY,NO_KEY, // 65 |
||
123 | KEY_CS,KEY_0 , // 66 BACKSPACE |
||
124 | NO_KEY,NO_KEY, // 67 |
||
125 | NO_KEY,NO_KEY, // 68 |
||
126 | KEY_1 ,NO_KEY, // 69 keypad 1 |
||
127 | NO_KEY,NO_KEY, // 6A |
||
128 | KEY_4 ,NO_KEY, // 6B keypad 4 |
||
129 | KEY_7 ,NO_KEY, // 6C keypad 7 |
||
130 | NO_KEY,NO_KEY, // 6D |
||
131 | NO_KEY,NO_KEY, // 6E |
||
132 | NO_KEY,NO_KEY, // 6F |
||
133 | |||
134 | KEY_0 ,NO_KEY, // 70 keypad 0 |
||
135 | KEY_SS,KEY_M , // 71 keypad . |
||
136 | KEY_2 ,NO_KEY, // 72 keypad 2 |
||
137 | KEY_5 ,NO_KEY, // 73 keypad 5 |
||
138 | KEY_6 ,NO_KEY, // 74 keypad 6 |
||
139 | KEY_8 ,NO_KEY, // 75 keypad 8 |
||
140 | CLRKYS,NO_KEY, // 76 ESC |
||
292 | chrv | 141 | NO_KEY,NO_KEY, // 77 Num Lock |
142 | NO_KEY,NO_KEY, // 78 F11 |
||
220 | chrv | 143 | KEY_SS,KEY_K , // 79 keypad + |
144 | KEY_3 ,NO_KEY, // 7A keypad 3 |
||
145 | KEY_SS,KEY_J , // 7B keypad - |
||
146 | KEY_SS,KEY_B , // 7C keypad * |
||
147 | KEY_9 ,NO_KEY, // 7D keypad 9 |
||
148 | NO_KEY,NO_KEY, // 7E Scroll Lock |
||
292 | chrv | 149 | NO_KEY,NO_KEY // 7F F7 !!!Warning real code is 0x83 is (converted to 0x7F) |
220 | chrv | 150 | }; |
151 | |||
152 | const UBYTE default_kbmap_E0[] PROGMEM = |
||
153 | { |
||
292 | chrv | 154 | NO_KEY,NO_KEY, // 00 |
155 | NO_KEY,NO_KEY, // 01 |
||
156 | NO_KEY,NO_KEY, // 02 |
||
157 | NO_KEY,NO_KEY, // 03 |
||
158 | NO_KEY,NO_KEY, // 04 |
||
159 | NO_KEY,NO_KEY, // 05 |
||
160 | NO_KEY,NO_KEY, // 06 |
||
161 | NO_KEY,NO_KEY, // 07 |
||
162 | NO_KEY,NO_KEY, // 08 |
||
163 | NO_KEY,NO_KEY, // 09 |
||
164 | NO_KEY,NO_KEY, // 0A |
||
165 | NO_KEY,NO_KEY, // 0B |
||
166 | NO_KEY,NO_KEY, // 0C |
||
167 | NO_KEY,NO_KEY, // 0D |
||
168 | NO_KEY,NO_KEY, // 0E |
||
169 | NO_KEY,NO_KEY, // 0F |
||
170 | |||
171 | NO_KEY,NO_KEY, // 10 |
||
172 | NO_KEY,NO_KEY, // 11 ALT GR |
||
173 | NO_KEY,NO_KEY, // 12 |
||
174 | NO_KEY,NO_KEY, // 13 |
||
175 | NO_KEY,NO_KEY, // 14 RCTRL |
||
176 | NO_KEY,NO_KEY, // 15 |
||
177 | NO_KEY,NO_KEY, // 16 |
||
178 | NO_KEY,NO_KEY, // 17 |
||
179 | NO_KEY,NO_KEY, // 18 |
||
180 | NO_KEY,NO_KEY, // 19 |
||
181 | NO_KEY,NO_KEY, // 1A |
||
182 | NO_KEY,NO_KEY, // 1B |
||
183 | NO_KEY,NO_KEY, // 1C |
||
184 | NO_KEY,NO_KEY, // 1D |
||
185 | NO_KEY,NO_KEY, // 1E |
||
186 | NO_KEY,NO_KEY, // 1F LEFT WINDOWS |
||
187 | |||
188 | NO_KEY,NO_KEY, // 20 |
||
189 | NO_KEY,NO_KEY, // 21 multimedia Volume - |
||
190 | NO_KEY,NO_KEY, // 22 |
||
191 | NO_KEY,NO_KEY, // 23 |
||
192 | NO_KEY,NO_KEY, // 24 |
||
193 | NO_KEY,NO_KEY, // 25 |
||
194 | NO_KEY,NO_KEY, // 26 |
||
195 | NO_KEY,NO_KEY, // 27 RIGHT WINDOWS |
||
196 | NO_KEY,NO_KEY, // 28 |
||
197 | NO_KEY,NO_KEY, // 29 |
||
198 | NO_KEY,NO_KEY, // 2A |
||
199 | NO_KEY,NO_KEY, // 2B |
||
200 | NO_KEY,NO_KEY, // 2C |
||
201 | NO_KEY,NO_KEY, // 2D |
||
202 | NO_KEY,NO_KEY, // 2E |
||
203 | NO_KEY,NO_KEY, // 2F APPLICATION |
||
204 | |||
205 | NO_KEY,NO_KEY, // 30 |
||
206 | NO_KEY,NO_KEY, // 31 |
||
207 | NO_KEY,NO_KEY, // 32 multimedia Volume + |
||
208 | NO_KEY,NO_KEY, // 33 |
||
209 | NO_KEY,NO_KEY, // 34 multimedia Play/Pause |
||
210 | NO_KEY,NO_KEY, // 35 |
||
211 | NO_KEY,NO_KEY, // 36 |
||
212 | NO_KEY,NO_KEY, // 37 POWER |
||
213 | NO_KEY,NO_KEY, // 38 |
||
214 | NO_KEY,NO_KEY, // 39 |
||
215 | NO_KEY,NO_KEY, // 3A |
||
216 | NO_KEY,NO_KEY, // 3B multimedia Stop |
||
217 | NO_KEY,NO_KEY, // 3C |
||
218 | NO_KEY,NO_KEY, // 3D |
||
219 | NO_KEY,NO_KEY, // 3E |
||
220 | NO_KEY,NO_KEY, // 3F SLEEP |
||
221 | |||
222 | NO_KEY,NO_KEY, // 40 |
||
223 | NO_KEY,NO_KEY, // 41 |
||
224 | NO_KEY,NO_KEY, // 42 |
||
225 | NO_KEY,NO_KEY, // 43 |
||
226 | NO_KEY,NO_KEY, // 44 |
||
227 | NO_KEY,NO_KEY, // 45 |
||
228 | NO_KEY,NO_KEY, // 46 |
||
229 | NO_KEY,NO_KEY, // 47 |
||
230 | NO_KEY,NO_KEY, // 48 |
||
231 | NO_KEY,NO_KEY, // 49 |
||
232 | KEY_SS,KEY_V , // 4A keypad / |
||
233 | NO_KEY,NO_KEY, // 4B |
||
234 | NO_KEY,NO_KEY, // 4C |
||
235 | NO_KEY,NO_KEY, // 4D |
||
236 | NO_KEY,NO_KEY, // 4E |
||
237 | NO_KEY,NO_KEY, // 4F |
||
238 | |||
239 | NO_KEY,NO_KEY, // 50 multimedia Active |
||
240 | NO_KEY,NO_KEY, // 51 |
||
241 | NO_KEY,NO_KEY, // 52 |
||
242 | NO_KEY,NO_KEY, // 53 |
||
243 | NO_KEY,NO_KEY, // 54 |
||
244 | NO_KEY,NO_KEY, // 55 |
||
245 | NO_KEY,NO_KEY, // 56 |
||
246 | NO_KEY,NO_KEY, // 57 |
||
247 | NO_KEY,NO_KEY, // 58 |
||
248 | NO_KEY,NO_KEY, // 59 |
||
249 | KEY_EN,NO_KEY, // 5A keypad ENTER |
||
250 | NO_KEY,NO_KEY, // 5B |
||
251 | NO_KEY,NO_KEY, // 5C |
||
252 | NO_KEY,NO_KEY, // 5D |
||
253 | NO_KEY,NO_KEY, // 5E WAKE |
||
254 | NO_KEY,NO_KEY, // 5F |
||
255 | |||
220 | chrv | 256 | NO_KEY,NO_KEY, // 60 |
257 | NO_KEY,NO_KEY, // 61 |
||
258 | NO_KEY,NO_KEY, // 62 |
||
259 | NO_KEY,NO_KEY, // 63 |
||
260 | NO_KEY,NO_KEY, // 64 |
||
261 | NO_KEY,NO_KEY, // 65 |
||
262 | NO_KEY,NO_KEY, // 66 |
||
263 | NO_KEY,NO_KEY, // 67 |
||
264 | NO_KEY,NO_KEY, // 68 |
||
265 | KEY_SS,KEY_E , // 69 END |
||
266 | NO_KEY,NO_KEY, // 6A |
||
267 | KEY_CS,KEY_5 , // 6B LEFT |
||
268 | KEY_SS,KEY_Q , // 6C HOME |
||
269 | NO_KEY,NO_KEY, // 6D |
||
270 | NO_KEY,NO_KEY, // 6E |
||
271 | NO_KEY,NO_KEY, // 6F |
||
272 | |||
273 | KEY_SS,KEY_W , // 70 INS |
||
274 | KEY_CS,KEY_9 , // 71 DEL |
||
275 | KEY_CS,KEY_6 , // 72 DOWN |
||
276 | NO_KEY,NO_KEY, // 73 |
||
277 | KEY_CS,KEY_8 , // 74 RIGHT |
||
278 | KEY_CS,KEY_7 , // 75 UP |
||
279 | CLRKYS,NO_KEY, // 76 ESC |
||
280 | NO_KEY,NO_KEY, // 77 |
||
281 | NO_KEY,NO_KEY, // 78 |
||
282 | NO_KEY,NO_KEY, // 79 |
||
283 | KEY_CS,KEY_4 , // 7A PGDN |
||
284 | NO_KEY,NO_KEY, // 7B |
||
285 | NO_KEY,NO_KEY, // 7C Print Screen |
||
286 | KEY_CS,KEY_3 , // 7D PGUP |
||
287 | NO_KEY,NO_KEY, // 7E |
||
288 | NO_KEY,NO_KEY // 7F |
||
289 | }; |
||
290 | |||
299 | chrv | 291 | /** User map offset in EEPROM */ |
292 | #define user_kbmap 0 |
||
293 | /** User map (extent E0) offset in EEPROM */ |
||
644 | ddp | 294 | #define user_kbmap_E0 256 |
299 | chrv | 295 | |
296 | chrv | 296 | //for loading user map (pointer to start eeprom) |
299 | chrv | 297 | //const void* saved_kbmap = (void*)0; |
220 | chrv | 298 | |
299 | //pointers to map |
||
299 | chrv | 300 | //UBYTE* kbmap; |
301 | //UBYTE* kbmap_E0; |
||
220 | chrv | 302 | |
303 | //if want Log than comment next string |
||
304 | #undef LOGENABLE |
||
305 | |||
306 | void kbmap_init(void) |
||
307 | { |
||
308 | //set pointers |
||
299 | chrv | 309 | // kbmap = dbuf; |
310 | // kbmap_E0 = dbuf + sizeof(default_kbmap); |
||
220 | chrv | 311 | |
312 | #ifdef LOGENABLE |
||
313 | to_log("kbmap_init start\r\n"); |
||
314 | #endif |
||
315 | //wait for eeprom |
||
316 | eeprom_busy_wait(); |
||
317 | |||
318 | #ifdef LOGENABLE |
||
319 | to_log("eeprom OK\r\n"); |
||
320 | #endif |
||
321 | |||
322 | //read signature from eeprom |
||
299 | chrv | 323 | // eeprom_read_block(dbuf, saved_kbmap, 2); |
220 | chrv | 324 | |
325 | //check signature |
||
299 | chrv | 326 | if ( (eeprom_read_byte((UBYTE*)user_kbmap)=='K') && |
327 | (eeprom_read_byte((UBYTE*)user_kbmap+1)=='B') ) |
||
220 | chrv | 328 | { |
329 | //read from eeprom |
||
299 | chrv | 330 | // eeprom_read_block(kbmap, saved_kbmap, sizeof(default_kbmap)+sizeof(default_kbmap_E0)); |
331 | // kbmap[0] = NO_KEY ; |
||
332 | // kbmap[1] = NO_KEY ; |
||
333 | flags_ex_register |= FLAG_EX_PS2KEYBOARD_MAP; |
||
220 | chrv | 334 | #ifdef LOGENABLE |
335 | to_log("KBMAP:EEPROM\r\n"); |
||
336 | #endif |
||
337 | } |
||
338 | else |
||
339 | { |
||
340 | //set default |
||
299 | chrv | 341 | // memcpy_P(kbmap, default_kbmap, sizeof(default_kbmap)); |
342 | // memcpy_P(kbmap_E0, default_kbmap_E0, sizeof(default_kbmap_E0)); |
||
220 | chrv | 343 | #ifdef LOGENABLE |
344 | to_log("KBMAP:DEFAULT\r\n"); |
||
345 | #endif |
||
346 | } |
||
347 | } |
||
299 | chrv | 348 | |
349 | KBMAP_VALUE kbmap_get(UBYTE scancode, UBYTE was_E0) |
||
350 | { |
||
351 | KBMAP_VALUE ret = {{NO_KEY,NO_KEY}}; |
||
352 | |||
353 | if( scancode < 0x7F ) |
||
354 | { |
||
355 | if( flags_ex_register&FLAG_EX_PS2KEYBOARD_MAP ) |
||
356 | { |
||
357 | //user map |
||
358 | if ( scancode ) |
||
359 | { |
||
656 | chrv | 360 | //wait for eeprom |
361 | eeprom_busy_wait(); |
||
362 | |||
363 | UWORD tblptr = scancode*2 + ( (was_E0)?user_kbmap_E0:user_kbmap ); |
||
299 | chrv | 364 | ret.tb.b1 = eeprom_read_byte((UBYTE*)tblptr++ ); |
365 | ret.tb.b2 = eeprom_read_byte((UBYTE*)tblptr ); |
||
366 | } |
||
367 | } |
||
368 | else |
||
369 | { |
||
370 | //default map |
||
371 | ULONG tblptr = scancode*2; |
||
372 | if( was_E0 ) |
||
373 | { |
||
374 | tblptr += GET_FAR_ADDRESS(default_kbmap_E0); |
||
375 | } |
||
376 | else |
||
377 | { |
||
378 | tblptr += GET_FAR_ADDRESS(default_kbmap); |
||
379 | } |
||
380 | ret.tb.b1 = pgm_read_byte_far( tblptr++ ); |
||
381 | ret.tb.b2 = pgm_read_byte_far( tblptr ); |
||
382 | } |
||
383 | } |
||
384 | #ifdef LOGENABLE |
||
385 | { |
||
386 | char log_map[] = "MP..:..,..\r\n"; |
||
387 | UBYTE b = scancode; |
||
388 | log_map[2] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10; |
||
389 | log_map[3] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10; |
||
390 | b = ret.tb.b1; |
||
391 | log_map[5] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10; |
||
392 | log_map[6] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10; |
||
393 | b = ret.tb.b2; |
||
394 | log_map[8] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10; |
||
395 | log_map[9] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10; |
||
396 | to_log(log_map); |
||
397 | } |
||
398 | #endif |
||
399 | return ret; |
||
400 | } |