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