Subversion Repositories pentevo

Rev

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
}