Subversion Repositories MB01 Project

Rev

Blame | Last modification | View Log | Download | RSS feed


        ;NOLIST


RomTbl          code_pack
; Fill
        dw              0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000

; mappa codici ASCII tastiera USA
USTBL:
        DB              "`", "~"
        DB              "1", "!"
        DB              "2", "@"
        DB              "4", "$"
        DB              "3", "#"
        DB              "5", "%"
        DB              "6", "^"
        DB              "7", "&"
        DB              "8", "*"
        DB              ",", "<"
        DB              "0", ")"
        DB              "9", "("
        DB              ".", ">"
        DB              "/", "?"
        DB              ";", ":"
        DB              "-", "_"
        DB              "'", "\""
        DB              "[", "{"
        DB              "=", "+"
        DB              "]", "}"
        DB              "\\", "|"

; tabella tasti speciali SHIFT, ALT, CTRL, CTRL+ALT
SPCKEY2:
        DB              KB_SHIFTPRT,    KB_ALTPRT,              KB_CTLPRT,              KB_ALTCTLPRT
        DB              KB_SHIFTHOME,   KB_ALTHOME,     KB_CTLHOME,     KB_ALTCTLHOME
        DB              KB_SHIFTINS,    KB_ALTINS,              KB_CTLINS,              KB_ALTCTLINS
        DB              KB_SHIFTPGUP,   KB_ALTPGUP,             KB_CTLPGUP,             KB_ALTCTLPGUP
        DB              KB_SHIFTPGDWN,  KB_ALTPGDWN,    KB_CTLPGDWN,    KB_ALTCTLPGDWN
        DB              KB_SHIFTEND,    KB_ALTEND,              KB_CTLEND,              KB_ALTCTLEND
        DB              KB_SHIFTDEL,    KB_ALTDEL,              KB_CTLDEL,              KB_ALTCTLDEL
        DB              KB_SHIFTBKS,    KB_ALTBKS,              KB_CTLBKS,              KB_ALTCTLBKS
        DB              0x00,                   KB_ALTESC,              KB_CTLESC,              KB_ALTCTLESC
        DB              0x00,                   KB_ALTTAB,              KB_CTLTAB,              KB_ALTCTLTAB
        DB              0x00,                   KB_ALTPLUS,             KB_CTLPLUS,             KB_ALTCTLPLUS
        DB              0x00,                   KB_ALTMINUS,    KB_CTLMINUS,    KB_ALTCTLMINUS

; tabella flag tasti speciali SHIFT, ALT, CTRL, CTRL+ALT
SPCKEY3:
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xC0
        DB              0xA0, 0xA0, 0xA0, 0xC0
        DB              0xA0, 0xA0, 0xA0, 0xC0
        DB              0xA0, 0xA0, 0xA0, 0xC0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0
        DB              0xA0, 0xA0, 0xA0, 0xA0

; tabella tasti speciali
SPCKEY:
        DB              KB_PRTSCN
        DB              KB_HOME
        DB              KB_INSERT
        DB              KB_PGUP
        DB              KB_PGDOWN
        DB              KB_END
        DB              KB_DELETE
        DB              KB_BACKSPACE
        DB              KB_ESCAPE
        DB              KB_TAB
        DB              '+'
        DB              '-'
        DB              0xFF

; SEQUENZA E0 12 E0 7C                                  PRTSCR DOWN  (SIMULA SHIFT *)
; SEQUENZA E0 F0 7C E0 F0 12                    PRTSCR UP
; SEQUENXA E1 14 77 E1 F0 14 F0 77     PAUSE (SIMULA L-CTRL NUMLOCK)
; E1 indica tasti no-repeat

; PRIORITA' MODIFICATORI: ALT   CTRL    SHIFT   CAPS/NUMLOCK

; Tabella codici prefissati da E1 - Tasto PAUSE (solo make)
; scan code: E1 14 77 E1 F0 14 F0 77 - di seguito la sequenza aspettata
EXT1TBL:
        db              0x14, 0x77, 0xE1, 0xF0, 0x14, 0xF0, 0x77

; Tabella codici estesi (prefisso E0)
; NOTA: codice make  PRNT -> E0 12 E0 7C (simula SHIFT *)
;       codice break PRNT -> E0 F0 7C E0 F0 12
; Tutte le sequenze E0 12 / E0 F0 12 / E0 59 / E0 F0 59
; vengono scartate
; Per la combinazione CTRL BREAK (E0 7E E0 F0 7E) viene analizzata
; solo la parte che simula il rilascio (E0 F0 7E)
EXTTBL:
        DB              0x7C            ; PRNT                  RILOCATO $00
        DB              0x11            ; R-ALT                 RILOCATO $10
        DB              0x14            ; R-CTRL                RILOCATO $0F
        DB              0x70            ; INS                   RILOCATO $13
        DB              0x71            ; DEL                   RILOCATO $08
        DB              0x6C            ; HOME                  RILOCATO $17
        DB              0x69            ; END                   RILOCATO $18
        DB              0x7A            ; PG-DOWN               RILOCATO $19
        DB              0x7D            ; PG-UP                 RILOCATO $20
        DB              0x75            ; CSR-UP                RILOCATO $28
        DB              0x6B            ; CSR-LEFT              RILOCATO $30
        DB              0x72            ; CSR-DOWN              RILOCATO $38
        DB              0x74            ; CSR-RIGHT             RILOCATO $39
        DB              0x5A            ; KP-ENTER              RILOCATO $5A
        DB              0x4A            ; KP /                  RILOCATO $5F
        DB              0x1F            ; L=GUI                 RILOCATO $1F
        DB              0x27            ; R-GUI                 RILOCATO $27
        DB              0x2F            ; APPS                  RILOCATO $2F
        DB              0x37            ; PWR                   RILOCATO $37
        DB              0x3F            ; SLEEP                 RILOCATO $3F
        DB              0x5E            ; WAKE                  RILOCATO $5E
        DB              0x7E            ; CTRL-BREAK    RILOCATO $48
        DB              0xFF            ; FINE TABELLA

; Tabella rilocazione codici estesi (prefisso E0)
EXTRLTBL:       
        DB              0x00            ; PRNT                  RILOCATO $00
        DB              0x10            ; R-ALT                 RILOCATO $10
        DB              0x0F            ; R-CTRL                RILOCATO $0F
        DB              0x13            ; INS                   RILOCATO $13
        DB              0x08            ; DEL                   RILOCATO $08
        DB              0x17            ; HOME                  RILOCATO $17
        DB              0x18            ; END                   RILOCATO $18
        DB              0x19            ; PG-DOWN               RILOCATO $19
        DB              0x20            ; PG-UP                 RILOCATO $20
        DB              0x28            ; CSR-UP                RILOCATO $28
        DB              0x30            ; CSR-LEFT              RILOCATO $30
        DB              0x38            ; CSR-DOWN              RILOCATO $38
        DB              0x39            ; CSR-RIGHT             RILOCATO $39
        DB              0x5A            ; KP-ENTER              RILOCATO $5A
        DB              0x5F            ; KP /                  RILOCATO $5F
        DB              0x1F            ; L=GUI                 RILOCATO $1F
        DB              0x27            ; R-GUI                 RILOCATO $27
        DB              0x2F            ; APPS                  RILOCATO $2F
        DB              0x37            ; PWR                   RILOCATO $37
        DB              0x3F            ; SLEEP                 RILOCATO $3F
        DB              0x5E            ; WAKE                  RILOCATO $5E
        DB              0x48            ; CTRL-BREAK    RILOCATO $48

; Codici normali da rilocare
; I codici da 70 a 7E vanno rilocati in 60 - 6E
DEFTBL:
        DB              0x83            ; F7                    RILOCATO $02
        DB              0x84            ; ALT SYSREQ    RILOCATO $40
        DB              0x66            ; BACKSPACE             RILOCATO $47
        DB              0x69            ; KP 1                  RILOCATO $4F
        DB              0x6B            ; KP 4                  RILOCATO $50
        DB              0x6C            ; KP 7                  RILOCATO $51
        DB              0x61            ; IT <>                 RILOCATO $53 (TASTO 45)
        DB              0xFF            ; FINE TABELLA

; Tabella rilocazione codici normali
DEFRLTBL:
        DB              0x02            ; F7                    RILOCATO $02
        DB              0x40            ; ALT SYSREQ    RILOCATO $40
        DB              0x47            ; BACKSPACE             RILOCATO $47
        DB              0x4F            ; KP 1                  RILOCATO $4F
        DB              0x50            ; KP 4                  RILOCATO $50
        DB              0x51            ; KP 7                  RILOCATO $51
        DB              0x53            ; IT <>                 RILOCATO $53

; seconda tabella di conversione (da codice scansione rilocato a semi ASCII)
; indice accesso da 00 a 6E
; la tabella ritorna un codice tra 00 e 7A esclusi 0B, 0F e range 57..60
; i codici relativi alle lettere a..z vengono restituiti come 'a'..'z'
; i codici 42..56 sono quelli da distinguere tra mappa US e mappa IT
; i valori 0xFF indicano codice non valido
CVTTBL       
        DB              PRTCODE         ; 00 *PRNT
        DB              0x3E            ; 01 F9
        DB              0x3C            ; 02 *F7
        DB              0x3A            ; 03 F5 
        DB              0x38            ; 04 F3
        DB              FNCCODE         ; 05 F1
        DB              0x37            ; 06 F2
        DB              0x41            ; 07 F12
        DB              0x35            ; 08 *DEL
        DB              0x3F            ; 09 F10
        DB              0x3D            ; 0A F8
        DB              0x3B            ; 0B F6
        DB              0x39            ; 0C F4
        DB              0x0E            ; 0D TAB
        DB              0x42            ; 0E `~         IT \|
        DB              0x04            ; 0F *R-CTRL
        DB              0x05            ; 10 *R-ALT
        DB              0x02            ; 11 L- ALT
        DB              0x00            ; 12 L-SHIFT
        DB              INSCODE         ; 13 *INS
        DB              0x01            ; 14 L-CTRL
        DB              'q'                     ; 15 qQ
        DB              0x43            ; 16 1!         IT 1!
        DB              0x32            ; 17 *HOME
        DB              0x2C            ; 18 *END 
        DB              0x2E            ; 19 *PG-DOWN
        DB              'z'                     ; 1A zZ
        DB              's'                     ; 1B sS
        DB              'a'                     ; 1C aA
        DB              'w'                     ; 1D wW
        DB              0x44            ; 1E 2@         IT 2"
        DB              0x1C            ; 1F *L-GUI
        DB              0x34            ; 20 *PG-UP
        DB              'c'                     ; 21 cC
        DB              'x'                     ; 22 xX
        DB              'd'                     ; 23 dD
        DB              'e'                     ; 24 eE
        DB              0x45            ; 25 4$         IT 4$
        DB              0x46            ; 26 3#         IT 3 LIRA
        DB              0x1B            ; 27 *R-GUI
        DB              0x33            ; 28 *CSR-UP
        DB              0x14            ; 29 SPACE
        DB              'v'                     ; 2A vV
        DB              'f'                     ; 2B fF
        DB              't'                     ; 2C tT
        DB              'r'                     ; 2D rR
        DB              0x47            ; 2E 5%         IT 5% (EURO)
        DB              0x1D            ; 2F *APPS
        DB              0x2F            ; 30 *CSR-LEFT
        DB              'n'                     ; 31 nN
        DB              'b'                     ; 32 bB
        DB              'h'                     ; 33 hH
        DB              'g'                     ; 34 gG
        DB              'y'                     ; 35 yY
        DB              0x48            ; 36 6^         IT 6&
        DB              0x1A            ; 37 *PWR
        DB              0x2D            ; 38 *CSR-DOWN
        DB              0x31            ; 39 *CSR-RIGHT
        DB              'm'                     ; 3A mM
        DB              'j'                     ; 3B jJ
        DB              'u'                     ; 3C uU
        DB              0x49            ; 3D 7&         IT 7/
        DB              0x4A            ; 3E 8*         IT 8(
        DB              0x19            ; 3F *SLEEP
        DB              SYSCODE         ; 40 *ALT SYSREQ
        DB              0x4B            ; 41 ,<         IT ,:
        DB              'k'                     ; 42 kK
        DB              'i'                     ; 43 iI
        DB              'o'                     ; 44 oO
        DB              0x4C            ; 45 0)         IT 0=
        DB              0x4D            ; 46 9(         IT 9)
        DB              0x15            ; 47 *BACKSPACE
        DB              CBRKCODE        ; 48 *CTRL-BREAK
        DB              0x4E            ; 49 .>         IT .:
        DB              0x4F            ; 4A /?         IT -_
        DB              'l'                     ; 4B lL
        DB              0x50            ; 4C ;:         IT oc@
        DB              'p'                     ; 4D pP
        DB              0x51            ; 4E -_         IT '?
        DB              0x21            ; 4F *KP 1
        DB              0x24            ; 50 *KP 4
        DB              0x27            ; 51 *KP 7
        DB              0x52            ; 52 '"         IT ao#
        DB              0x0C            ; 53 *IT <>
        DB              0x53            ; 54 [{         IT ee[{
        DB              0x54            ; 55 =+         IT i^
        DB              0xFF            ; 56
        DB              0xFF            ; 57
        DB              CAPSCODE        ; 58 CAPS LOCK
        DB              0x03            ; 59 R-SHIFT
        DB              CRCODE          ; 5A ENTER <*KP ENTER>
        DB              0x55            ; 5B ]}         IT +*]}
        DB              0xFF            ; 5C
        DB              0x56            ; 5D \|         IT paragrafo u
        DB              0x18            ; 5E *WAKE
        DB              KPBARCODE       ; 5F *<KP />
        DB              KP0CODE         ; 60 *KP 0
        DB              0x2A            ; 61 *KP .
        DB              0x22            ; 62 *KP 2
        DB              0x25            ; 63 *KP 5
        DB              0x26            ; 64 *KP 6
        DB              0x28            ; 65 *KP 8
        DB              ESCCODE         ; 66 *ESC
        DB              0x07            ; 67 *NUM-LOCK
        DB              0x40            ; 68 *F11
        DB              0x11            ; 69 *KP +
        DB              0x23            ; 6A *KP 3
        DB              0x12            ; 6B *KP -
        DB              0x13            ; 6C *KP *
        DB              0x29            ; 6D *KP 9
        DB              0x08            ; 6E *SCROLL-LOCK
        DB              0xFF

; tabella flag RptSt per tasti NO REPEAT
RPTTBL:
        DB              WAKEM           ; WAKE UP
        DB              SLEEPM          ; SLEEP
        DB              PWRM            ; POWER
        DB              RGUIM           ; R-GUI
        DB              LGUIM           ; L-GUI
        DB              GUIAPPM         ; GUI APP
        DB              PRINTM          ; PRINT SCRN
        DB              ESCAPEM         ; ESC

; tabella conversione codici restituiti da CVTTBL a tasti effettivi 
KEYTBL:
; questi indici impostano i flag di CtlSt e ShfSt
; rispecchiano lo stato di pressione/rilascio tasti SHIFT,ALT e CTRL
        DB              LSHFM                   ; 00 L-SHIFT
        DB              LCTLM                   ; 01 L-CTRL
        DB              LALTM                   ; 02 L-ALT
        DB              RSHFM                   ; 03 R-SHIFT
        DB              RCTLM                   ; 04 R-CTRL
        DB              RALTM                   ; 05 R-ALT

; questi indici impostano i flag di TglSt
; rispecchiano lo stato dei tasti CAPS-LOCK/NUM-LOCK/SCROLL-LOCK/PAUSE
; NOTA: PAUSE non ha codice di rilascio
        DB              CAPSM                   ; 06 CAPS-LOCK
        DB              NUMLM                   ; 07 NUM-LOCK
        DB              SCRLM                   ; 08 SCROLL-LOCK
; il tasto PAUSE va trattato come un tasto toggle
        DB              PAUSM                   ; 09 PAUSE

; i tasti seguenti vanno testati con lo shift
        DB              KB_CR                   ; 0A ENTER
        DB              KB_SHCR                 ; 0B SHIFT ENTER
        DB              '<'                             ; 0C IT <
        DB              '>'                             ; 0D SHIFT IT >
        DB              KB_TAB                  ; 0E TAB
        DB              KB_SHTAB                ; 0F SHIFT TAB

; questi indici non vanno trattati eccetto ESC/PRINT SCRN
; per il tasto esc va impostato il flag premuto/rilasciato      
        DB              '/'                             ; 10 KP /
        DB              '+'                             ; 11 KP +
        DB              '-'                             ; 12 KP -
        DB              '*'                             ; 13 KP *
        DB              ' '                             ; 14 SPACE
        DB              KB_BACKSPACE    ; 15 BACKSPACE
        DB              KB_CTRLBREAK    ; 16 CTRL BREAK
        DB              KB_ALTSYSREQ    ; 17 ALT SYS REQ
        DB              KB_WAKE                 ; 18 WAKE
        DB              KB_SLEEP                ; 19 SLEEP
        DB              KB_PWR                  ; 1A PWR
        DB              KB_RIGHTGUI             ; 1B R-GUI
        DB              KB_LEFTGUI              ; 1C L-GUI
        DB              KB_GUIMENU              ; 1D APPS/MENU
        DB              KB_PRTSCN               ; 1E PRTSCN/SYSRQ
        DB              KB_ESCAPE               ; 1F ESC

; tasti numerici vanno trattati specialmente
        DB              '0'                              ; 20 KP 0
        DB              '1'                             ; 21 KP 1
        DB              '2'                             ; 22 KP 2
        DB              '3'                             ; 23 KP 3
        DB              '4'                             ; 24 KP 4
        DB              '5'                             ; 25 KP 5
        DB              '6'                             ; 26 KP 6
        DB              '7'                             ; 27 KP 7
        DB              '8'                             ; 28 KP 8
        DB              '9'                             ; 29 KP 9
        DB              '.'                             ; 2A KP .

; tasti cursore: INSERT va trattato specialmente (toggle bit)
        DB              KB_INSERT               ; 2B INS        
        DB              KB_END                  ; 2C END
        DB              KB_CSRDOWN              ; 2D CSR DOWN
        DB              KB_PGDOWN               ; 2E PG DOWN
        DB              KB_CSRLEFT              ; 2F CSR LEFT
        DB              0x00                    ; 30 - TASTO NULL
        DB              KB_CSRRIGHT             ; 31 CSR RIGHT
        DB              KB_HOME                 ; 32 HOME
        DB              KB_CSRUP                ; 33 CSR UP
        DB              KB_PGUP                 ; 34 PG UP
        DB              KB_DELETE               ; 35 DEL

; tasti funzione
        DB              KB_F1                   ; 36 F1
        DB              KB_F2                   ; 37 F2
        DB              KB_F3                   ; 38 F3
        DB              KB_F4                   ; 39 F4
        DB              KB_F5                   ; 3A F5
        DB              KB_F6                   ; 3B F6
        DB              KB_F7                   ; 3C F7
        DB              KB_F8                   ; 3D F8
        DB              KB_F9                   ; 3E F9
        DB              KB_F10                  ; 3F F10
        DB              KB_F11                  ; 40 F11
        DB              KB_F12                  ; 41 F12

; tabella flag codice corrispondente a KEYTBL 
; 0x00 -> codice ASCII
; 0x10 -> codice ASCII + flag toggle 4 bit low
; 0x80 -> invia status shift/alt/ctrl
; 0x90 -> invia status toggle
; 0xA0 -> codice di controllo
; 0xB0 -> codice di controllo + flag toggle 4 bit low
; 0xC0 -> codice tasto NMI
FLGTBL:
        ; questi valori non sono usati - il tasto viene trattato a parte
        DB              0x80                    ; 00 L-SHIFT
        DB              0x80                    ; 01 L-CTRL
        DB              0x80                    ; 02 L-ALT
        DB              0x80                    ; 03 R-SHIFT
        DB              0x80                    ; 04 R-CTRL
        DB              0x80                    ; 05 R-ALT
        DB              0x90                    ; 06 CAPS-LOCK
        DB              0x90                    ; 07 NUM-LOCK
        DB              0x90                    ; 08 SCROLL-LOCK
        DB              0x90                    ; 09 PAUSE
        DB              0x00                    ; 0A ENTER
        DB              0xA0                    ; 0B SHIFT ENTER
        DB              0x00                    ; 0C IT <
        DB              0x00                    ; 0D SHIFT IT >
        DB              0x00                    ; 0E TAB
        DB              0xA0                    ; 0F SHIFT TAB
        DB              0x00                    ; 10 KP /
        DB              0x00                    ; 11 KP +
        DB              0x00                    ; 12 KP -
        DB              0x00                    ; 13 KP *
        DB              0x00                    ; 14 SPACE
        DB              0xA0                    ; 15 BACKSPACE
        DB              0xC0                    ; 16 CTRL BREAK
        DB              0xC0                    ; 17 ALT SYS REQ
        DB              0xC0                    ; 18 WAKE
        DB              0xC0                    ; 19 SLEEP
        DB              0xC0                    ; 1A PWR
        DB              0xA0                    ; 1B R-GUI
        DB              0xA0                    ; 1C L-GUI
        DB              0xA0                    ; 1D APPS/MENU
        DB              0xB0                    ; 1E PRTSCN/SYSRQ
        DB              0x10                    ; 1F ESC
        DB              0x00                    ; 20 KP 0
        DB              0x00                    ; 21 KP 1
        DB              0x00                    ; 22 KP 2
        DB              0x00                    ; 23 KP 3
        DB              0x00                    ; 24 KP 4
        DB              0x00                    ; 25 KP 5
        DB              0x00                    ; 26 KP 6
        DB              0x00                    ; 27 KP 7
        DB              0x00                    ; 28 KP 8
        DB              0x00                    ; 29 KP 9
        DB              0x00                    ; 2A KP .
        DB              0xB0                    ; 2B INS        
        DB              0xA0                    ; 2C END
        DB              0xA0                    ; 2D CSR DOWN
        DB              0xA0                    ; 2E PG DOWN
        DB              0xA0                    ; 2F CSR LEFT
        DB              0xA0                    ; 30 - TASTO NULL
        DB              0xA0                    ; 31 CSR RIGHT
        DB              0xA0                    ; 32 HOME
        DB              0xA0                    ; 33 CSR UP
        DB              0xA0                    ; 34 PG UP
        DB              0xA0                    ; 35 DEL
        DB              0xA0                    ; 36 F1
        DB              0xA0                    ; 37 F2
        DB              0xA0                    ; 38 F3
        DB              0xA0                    ; 39 F4
        DB              0xA0                    ; 3A F5
        DB              0xA0                    ; 3B F6
        DB              0xA0                    ; 3C F7
        DB              0xA0                    ; 3D F8
        DB              0xA0                    ; 3E F9
        DB              0xA0                    ; 3F F10
        DB              0xA0                    ; 40 F11
        DB              0xA0                    ; 41 F12