|
|
|
@ -70,17 +70,33 @@ KBD_INIT: |
|
|
|
LD (KBD_REPEAT),A ; SAVE IT |
|
|
|
LD A,KBD_DEFSTATE ; GET DEFAULT STATE |
|
|
|
LD (KBD_STATE),A ; SAVE IT |
|
|
|
|
|
|
|
; |
|
|
|
LD A,(IY+KBD_MODE) ; GET KBD MODE BYTE |
|
|
|
CP KBDMODE_VRC ; VRC? |
|
|
|
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT |
|
|
|
; |
|
|
|
LD A,$AA ; CONTROLLER SELF TEST |
|
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
|
CALL KBD_GETDATA ; CONTROLLER SHOULD RESPOND WITH $55 (ACK) |
|
|
|
|
|
|
|
; |
|
|
|
CP $55 ; IS IT THERE? |
|
|
|
JR Z,KBD_INIT1 ; IF SO, CONTINUE |
|
|
|
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM |
|
|
|
RET ; BAIL OUT |
|
|
|
|
|
|
|
; |
|
|
|
KBD_INIT1: |
|
|
|
PRTS(" MODE=$") ; TAG |
|
|
|
LD A,(IY+KBD_MODE) ; GET MODE VALUE |
|
|
|
LD DE,KBD_STR_MODEPS2 |
|
|
|
CP KBDMODE_PS2 |
|
|
|
JR Z,KBD_INIT2 |
|
|
|
LD DE,KBD_STR_MODEVRC |
|
|
|
CP KBDMODE_VRC |
|
|
|
JR Z,KBD_INIT2 |
|
|
|
LD DE,KBD_STR_MODEUNK |
|
|
|
KBD_INIT2: |
|
|
|
CALL WRITESTR |
|
|
|
; |
|
|
|
LD A,$60 ; SET COMMAND REGISTER |
|
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
|
; LD A,$60 ; XLAT ENABLED, MOUSE DISABLED, NO INTS |
|
|
|
@ -89,11 +105,6 @@ KBD_INIT1: |
|
|
|
|
|
|
|
CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED |
|
|
|
|
|
|
|
; LD A,$AE ; COMMAND = ENABLE KEYBOARD |
|
|
|
; CALL KBD_PUTCMD ; SEND IT |
|
|
|
; LD A,$A7 ; COMMAND = DISABLE MOUSE |
|
|
|
; CALL KBD_PUTCMD ; SEND IT |
|
|
|
|
|
|
|
CALL KBD_RESET ; RESET THE KEYBOARD |
|
|
|
CALL KBD_SETLEDS ; UPDATE LEDS BASED ON CURRENT TOGGLE STATE BITS |
|
|
|
CALL KBD_SETRPT ; UPDATE REPEAT RATE BASED ON CURRENT SETTING |
|
|
|
@ -178,7 +189,7 @@ KBD_PUTCMD: |
|
|
|
; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT |
|
|
|
; |
|
|
|
LD E,A ; SAVE INCOMING VALUE IN E |
|
|
|
LD A,(KBD_MODE) ; GET MODE BYTE |
|
|
|
LD A,(IY+KBD_MODE) ; GET MODE BYTE |
|
|
|
CP KBDMODE_VRC ; VGARC KEYBOARD? |
|
|
|
JR Z,KBD_PUTCMD2 ; BAIL OUT |
|
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
|
@ -208,7 +219,7 @@ KBD_PUTDATA: |
|
|
|
; PUT A DATA BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT |
|
|
|
; |
|
|
|
LD E,A ; SAVE INCOMING VALUE IN E |
|
|
|
LD A,(KBD_MODE) ; GET MODE BYTE |
|
|
|
LD A,(IY+KBD_MODE) ; GET MODE BYTE |
|
|
|
CP KBDMODE_VRC ; VGARC KEYBOARD? |
|
|
|
JR Z,KBD_PUTDATA2 ; BAIL OUT |
|
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
|
@ -690,11 +701,21 @@ KBD_DECNEW: ; START NEW KEYPRESS (CLEAR ALL STATUS BITS) |
|
|
|
LD (KBD_STATUS),A ; CLEAR STATUS |
|
|
|
JP KBD_DEC1 ; RESTART THE ENGINE |
|
|
|
; |
|
|
|
; DRIVER DATA |
|
|
|
; |
|
|
|
KBD_STR_MODEPS2 .TEXT "PS2$" |
|
|
|
KBD_STR_MODEVRC .TEXT "VRC$" |
|
|
|
KBD_STR_MODEUNK .TEXT "???$" |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
#IF (KBDKBLOUT == KBD_US) |
|
|
|
; |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
; MAPPING TABLES US/ENGLISH |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
KBD_MAPSTD: ; SCANCODE IS INDEX INTO TABLE TO RESULTANT LOOKUP KEYCODE |
|
|
|
.DB $FF,$E8,$FF,$E4,$E2,$E0,$E1,$EB,$FF,$E9,$E7,$E5,$E3,$09,'`',$FF |
|
|
|
.DB $FF,$B4,$B0,$FF,$B2,'q','1',$FF,$FF,$FF,'z','s','a','w','2',$FF |
|
|
|
@ -731,7 +752,9 @@ KBD_MAPNUMPAD: ; KEYCODE TRANSLATION FROM NUMPAD RANGE TO STD ASCII/KEYCODES |
|
|
|
.DB $F3,$F7,$F5,$F8,$FF,$F9,$F2,$F6,$F4,$F0,$F1,$2F,$2A,$2D,$2B,$0D |
|
|
|
.DB $31,$32,$33,$34,$35,$36,$37,$38,$39,$30,$2E,$2F,$2A,$2D,$2B,$0D |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (KBDKBLOUT == KBD_DE) |
|
|
|
; |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
; MAPPING TABLES GERMAN |
|
|
|
|