Top secrets sources NedoPC pentevo

Rev

Rev 644 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

#include <avr/pgmspace.h>
#include <avr/eeprom.h>

#include "pins.h"
#include "mytypes.h"

#include "getfaraddress.h"
#include "main.h"
#include "zx.h"
#include "kbmap.h"
#include "rs232.h"

const UBYTE default_kbmap[] PROGMEM =
{
NO_KEY,NO_KEY, // 00
NO_KEY,NO_KEY, // 01 F9
NO_KEY,NO_KEY, // 02
NO_KEY,NO_KEY, // 03 F5
NO_KEY,NO_KEY, // 04 F3
NO_KEY,NO_KEY, // 05 F1
NO_KEY,NO_KEY, // 06 F2
NO_KEY,NO_KEY, // 07 F12
NO_KEY,NO_KEY, // 08
NO_KEY,NO_KEY, // 09 F10
NO_KEY,NO_KEY, // 0A F8
NO_KEY,NO_KEY, // 0B F6
NO_KEY,NO_KEY, // 0C F4
KEY_CS,KEY_SP, // 0D TAB
KEY_CS,KEY_1 , // 0E ~
NO_KEY,NO_KEY, // 0F

NO_KEY,NO_KEY, // 10
NO_KEY,NO_KEY, // 11 ALT
KEY_CS,NO_KEY, // 12 LSHIFT
NO_KEY,NO_KEY, // 13
NO_KEY,NO_KEY, // 14 LCTRL
KEY_Q ,NO_KEY, // 15 Q
KEY_1 ,NO_KEY, // 16 1
NO_KEY,NO_KEY, // 17
NO_KEY,NO_KEY, // 18
NO_KEY,NO_KEY, // 19
KEY_Z ,NO_KEY, // 1A Z
KEY_S ,NO_KEY, // 1B S
KEY_A ,NO_KEY, // 1C A
KEY_W ,NO_KEY, // 1D W
KEY_2 ,NO_KEY, // 1E 2
NO_KEY,NO_KEY, // 1F

NO_KEY,NO_KEY, // 20
KEY_C ,NO_KEY, // 21 C
KEY_X ,NO_KEY, // 22 X
KEY_D ,NO_KEY, // 23 D
KEY_E ,NO_KEY, // 24 E
KEY_4 ,NO_KEY, // 25 4
KEY_3 ,NO_KEY, // 26 3
NO_KEY,NO_KEY, // 27
NO_KEY,NO_KEY, // 28
KEY_SP,NO_KEY, // 29 SPACE
KEY_V ,NO_KEY, // 2A V
KEY_F ,NO_KEY, // 2B F
KEY_T ,NO_KEY, // 2C T
KEY_R ,NO_KEY, // 2D R
KEY_5 ,NO_KEY, // 2E 5
NO_KEY,NO_KEY, // 2F

NO_KEY,NO_KEY, // 30
KEY_N ,NO_KEY, // 31 N
KEY_B ,NO_KEY, // 32 B
KEY_H ,NO_KEY, // 33 H
KEY_G ,NO_KEY, // 34 G
KEY_Y ,NO_KEY, // 35 Y
KEY_6 ,NO_KEY, // 36 6
NO_KEY,NO_KEY, // 37
NO_KEY,NO_KEY, // 38
NO_KEY,NO_KEY, // 39
KEY_M ,NO_KEY, // 3A M
KEY_J ,NO_KEY, // 3B J
KEY_U ,NO_KEY, // 3C U
KEY_7 ,NO_KEY, // 3D 7
KEY_8 ,NO_KEY, // 3E 8
NO_KEY,NO_KEY, // 3F

NO_KEY,NO_KEY, // 40
KEY_SS,KEY_N , // 41 ,
KEY_K ,NO_KEY, // 42 K
KEY_I ,NO_KEY, // 43 I
KEY_O ,NO_KEY, // 44 O
KEY_0 ,NO_KEY, // 45 0
KEY_9 ,NO_KEY, // 46 9
NO_KEY,NO_KEY, // 47
NO_KEY,NO_KEY, // 48
KEY_SS,KEY_M , // 49 .
KEY_SS,KEY_C , // 4A /
KEY_L ,NO_KEY, // 4B L
KEY_SS,KEY_Z , // 4C :
KEY_P ,NO_KEY, // 4D P
KEY_SS,KEY_J , // 4E -
NO_KEY,NO_KEY, // 4F

NO_KEY,NO_KEY, // 50
NO_KEY,NO_KEY, // 51
KEY_SS,KEY_P , // 52 "
NO_KEY,NO_KEY, // 53
KEY_SS,KEY_8 , // 54 [
KEY_SS,KEY_K , // 55 +
NO_KEY,NO_KEY, // 56
NO_KEY,NO_KEY, // 57
KEY_CS,KEY_2 , // 58 CAPSLOCK
KEY_SS,NO_KEY, // 59 RSHIFT
KEY_EN,NO_KEY, // 5A ENTER
KEY_SS,KEY_9 , // 5B ]
NO_KEY,NO_KEY, // 5C
KEY_SS,KEY_CS, // 5D backslash
NO_KEY,NO_KEY, // 5E
NO_KEY,NO_KEY, // 5F

NO_KEY,NO_KEY, // 60
KEY_SS,KEY_CS, // 61 backslash
NO_KEY,NO_KEY, // 62
NO_KEY,NO_KEY, // 63
NO_KEY,NO_KEY, // 64
NO_KEY,NO_KEY, // 65
KEY_CS,KEY_0 , // 66 BACKSPACE
NO_KEY,NO_KEY, // 67
NO_KEY,NO_KEY, // 68
KEY_1 ,NO_KEY, // 69 keypad 1
NO_KEY,NO_KEY, // 6A
KEY_4 ,NO_KEY, // 6B keypad 4
KEY_7 ,NO_KEY, // 6C keypad 7
NO_KEY,NO_KEY, // 6D
NO_KEY,NO_KEY, // 6E
NO_KEY,NO_KEY, // 6F

KEY_0 ,NO_KEY, // 70 keypad 0
KEY_SS,KEY_M , // 71 keypad .
KEY_2 ,NO_KEY, // 72 keypad 2
KEY_5 ,NO_KEY, // 73 keypad 5
KEY_6 ,NO_KEY, // 74 keypad 6
KEY_8 ,NO_KEY, // 75 keypad 8
CLRKYS,NO_KEY, // 76 ESC
NO_KEY,NO_KEY, // 77 Num Lock
NO_KEY,NO_KEY, // 78 F11
KEY_SS,KEY_K , // 79 keypad +
KEY_3 ,NO_KEY, // 7A keypad 3
KEY_SS,KEY_J , // 7B keypad -
KEY_SS,KEY_B , // 7C keypad *
KEY_9 ,NO_KEY, // 7D keypad 9
NO_KEY,NO_KEY, // 7E Scroll Lock
NO_KEY,NO_KEY  // 7F F7 !!!Warning real code is 0x83 is (converted to 0x7F)
};

const UBYTE default_kbmap_E0[] PROGMEM =
{
NO_KEY,NO_KEY, // 00
NO_KEY,NO_KEY, // 01
NO_KEY,NO_KEY, // 02
NO_KEY,NO_KEY, // 03
NO_KEY,NO_KEY, // 04
NO_KEY,NO_KEY, // 05
NO_KEY,NO_KEY, // 06
NO_KEY,NO_KEY, // 07
NO_KEY,NO_KEY, // 08
NO_KEY,NO_KEY, // 09
NO_KEY,NO_KEY, // 0A
NO_KEY,NO_KEY, // 0B
NO_KEY,NO_KEY, // 0C
NO_KEY,NO_KEY, // 0D
NO_KEY,NO_KEY, // 0E
NO_KEY,NO_KEY, // 0F

NO_KEY,NO_KEY, // 10
NO_KEY,NO_KEY, // 11 ALT GR
NO_KEY,NO_KEY, // 12
NO_KEY,NO_KEY, // 13
NO_KEY,NO_KEY, // 14 RCTRL
NO_KEY,NO_KEY, // 15
NO_KEY,NO_KEY, // 16
NO_KEY,NO_KEY, // 17
NO_KEY,NO_KEY, // 18
NO_KEY,NO_KEY, // 19
NO_KEY,NO_KEY, // 1A
NO_KEY,NO_KEY, // 1B
NO_KEY,NO_KEY, // 1C
NO_KEY,NO_KEY, // 1D
NO_KEY,NO_KEY, // 1E
NO_KEY,NO_KEY, // 1F LEFT WINDOWS

NO_KEY,NO_KEY, // 20
NO_KEY,NO_KEY, // 21 multimedia Volume -
NO_KEY,NO_KEY, // 22
NO_KEY,NO_KEY, // 23
NO_KEY,NO_KEY, // 24
NO_KEY,NO_KEY, // 25
NO_KEY,NO_KEY, // 26
NO_KEY,NO_KEY, // 27 RIGHT WINDOWS
NO_KEY,NO_KEY, // 28
NO_KEY,NO_KEY, // 29
NO_KEY,NO_KEY, // 2A
NO_KEY,NO_KEY, // 2B
NO_KEY,NO_KEY, // 2C
NO_KEY,NO_KEY, // 2D
NO_KEY,NO_KEY, // 2E
NO_KEY,NO_KEY, // 2F APPLICATION

NO_KEY,NO_KEY, // 30
NO_KEY,NO_KEY, // 31
NO_KEY,NO_KEY, // 32 multimedia Volume +
NO_KEY,NO_KEY, // 33
NO_KEY,NO_KEY, // 34 multimedia Play/Pause
NO_KEY,NO_KEY, // 35
NO_KEY,NO_KEY, // 36
NO_KEY,NO_KEY, // 37 POWER
NO_KEY,NO_KEY, // 38
NO_KEY,NO_KEY, // 39
NO_KEY,NO_KEY, // 3A
NO_KEY,NO_KEY, // 3B multimedia Stop
NO_KEY,NO_KEY, // 3C
NO_KEY,NO_KEY, // 3D
NO_KEY,NO_KEY, // 3E
NO_KEY,NO_KEY, // 3F SLEEP

NO_KEY,NO_KEY, // 40
NO_KEY,NO_KEY, // 41
NO_KEY,NO_KEY, // 42
NO_KEY,NO_KEY, // 43
NO_KEY,NO_KEY, // 44
NO_KEY,NO_KEY, // 45
NO_KEY,NO_KEY, // 46
NO_KEY,NO_KEY, // 47
NO_KEY,NO_KEY, // 48
NO_KEY,NO_KEY, // 49
KEY_SS,KEY_V , // 4A keypad /
NO_KEY,NO_KEY, // 4B
NO_KEY,NO_KEY, // 4C
NO_KEY,NO_KEY, // 4D
NO_KEY,NO_KEY, // 4E
NO_KEY,NO_KEY, // 4F

NO_KEY,NO_KEY, // 50 multimedia Active
NO_KEY,NO_KEY, // 51
NO_KEY,NO_KEY, // 52
NO_KEY,NO_KEY, // 53
NO_KEY,NO_KEY, // 54
NO_KEY,NO_KEY, // 55
NO_KEY,NO_KEY, // 56
NO_KEY,NO_KEY, // 57
NO_KEY,NO_KEY, // 58
NO_KEY,NO_KEY, // 59
KEY_EN,NO_KEY, // 5A keypad ENTER
NO_KEY,NO_KEY, // 5B
NO_KEY,NO_KEY, // 5C
NO_KEY,NO_KEY, // 5D
NO_KEY,NO_KEY, // 5E WAKE
NO_KEY,NO_KEY, // 5F

NO_KEY,NO_KEY, // 60
NO_KEY,NO_KEY, // 61
NO_KEY,NO_KEY, // 62
NO_KEY,NO_KEY, // 63
NO_KEY,NO_KEY, // 64
NO_KEY,NO_KEY, // 65
NO_KEY,NO_KEY, // 66
NO_KEY,NO_KEY, // 67
NO_KEY,NO_KEY, // 68
KEY_SS,KEY_E , // 69 END
NO_KEY,NO_KEY, // 6A
KEY_CS,KEY_5 , // 6B LEFT
KEY_SS,KEY_Q , // 6C HOME
NO_KEY,NO_KEY, // 6D
NO_KEY,NO_KEY, // 6E
NO_KEY,NO_KEY, // 6F

KEY_SS,KEY_W , // 70 INS
KEY_CS,KEY_9 , // 71 DEL
KEY_CS,KEY_6 , // 72 DOWN
NO_KEY,NO_KEY, // 73
KEY_CS,KEY_8 , // 74 RIGHT
KEY_CS,KEY_7 , // 75 UP
CLRKYS,NO_KEY, // 76 ESC
NO_KEY,NO_KEY, // 77
NO_KEY,NO_KEY, // 78
NO_KEY,NO_KEY, // 79
KEY_CS,KEY_4 , // 7A PGDN
NO_KEY,NO_KEY, // 7B
NO_KEY,NO_KEY, // 7C Print Screen
KEY_CS,KEY_3 , // 7D PGUP
NO_KEY,NO_KEY, // 7E
NO_KEY,NO_KEY  // 7F
};

/** User map offset in EEPROM */
#define user_kbmap 0
/** User map (extent E0) offset in EEPROM */
#define user_kbmap_E0 256

//for loading user map (pointer to start eeprom)
//const void* saved_kbmap = (void*)0;

//pointers to map
//UBYTE* kbmap;
//UBYTE* kbmap_E0;

//if want Log than comment next string
#undef LOGENABLE

void kbmap_init(void)
{
        //set pointers
//      kbmap = dbuf;
//      kbmap_E0 = dbuf + sizeof(default_kbmap);

#ifdef LOGENABLE
        to_log("kbmap_init start\r\n");
#endif
        //wait for eeprom
        eeprom_busy_wait();

#ifdef LOGENABLE
        to_log("eeprom OK\r\n");
#endif

        //read signature from eeprom
//      eeprom_read_block(dbuf, saved_kbmap, 2);

        //check signature
        if ( (eeprom_read_byte((UBYTE*)user_kbmap)=='K') &&
             (eeprom_read_byte((UBYTE*)user_kbmap+1)=='B') )
        {
                //read from eeprom
//              eeprom_read_block(kbmap, saved_kbmap, sizeof(default_kbmap)+sizeof(default_kbmap_E0));
//              kbmap[0] = NO_KEY ;
//              kbmap[1] = NO_KEY ;
                flags_ex_register |= FLAG_EX_PS2KEYBOARD_MAP;
#ifdef LOGENABLE
                to_log("KBMAP:EEPROM\r\n");
#endif
        }
        else
        {
                //set default
//              memcpy_P(kbmap, default_kbmap, sizeof(default_kbmap));
//              memcpy_P(kbmap_E0, default_kbmap_E0, sizeof(default_kbmap_E0));
#ifdef LOGENABLE
                to_log("KBMAP:DEFAULT\r\n");
#endif
        }
}

KBMAP_VALUE kbmap_get(UBYTE scancode, UBYTE was_E0)
{
        KBMAP_VALUE ret = {{NO_KEY,NO_KEY}};

        if( scancode < 0x7F )
        {
                if( flags_ex_register&FLAG_EX_PS2KEYBOARD_MAP )
                {
                        //user map
                        if ( scancode )
                        {
                                //wait for eeprom
                                eeprom_busy_wait();

                                UWORD tblptr = scancode*2 + ( (was_E0)?user_kbmap_E0:user_kbmap );
                                ret.tb.b1 = eeprom_read_byte((UBYTE*)tblptr++ );
                                ret.tb.b2 = eeprom_read_byte((UBYTE*)tblptr );
                        }
                }
                else
                {
                        //default map
                        ULONG tblptr = scancode*2;
                        if( was_E0 )
                        {
                                tblptr += GET_FAR_ADDRESS(default_kbmap_E0);
                        }
                        else
                        {
                                tblptr += GET_FAR_ADDRESS(default_kbmap);
                        }
                        ret.tb.b1 = pgm_read_byte_far( tblptr++ );
                        ret.tb.b2 = pgm_read_byte_far( tblptr );
                }
        }
#ifdef LOGENABLE
{
        char log_map[] = "MP..:..,..\r\n";
        UBYTE b = scancode;
        log_map[2] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
        log_map[3] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
        b = ret.tb.b1;
        log_map[5] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
        log_map[6] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
        b = ret.tb.b2;
        log_map[8] = ((b >> 4) <= 9 )?'0'+(b >> 4):'A'+(b >> 4)-10;
        log_map[9] = ((b & 0x0F) <= 9 )?'0'+(b & 0x0F):'A'+(b & 0x0F)-10;
        to_log(log_map);
}
#endif
        return ret;
}