|
|
|
@ -75,11 +75,6 @@ KBD_IDLE .DB 0 ; IDLE COUNT |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
KBD_INIT: |
|
|
|
#IF ((INTMODE == 2) & INTPS2KBD) |
|
|
|
CALL KBDQINIT ; INITIALIZE QUEUE |
|
|
|
LD HL,KBD_INT ; INSTALL VECTOR |
|
|
|
LD (IVT(INT_PS2KB)),HL ; IVT INDEX |
|
|
|
#ENDIF |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("KBD: IO=0x$") ; DISPLAY |
|
|
|
LD A,(IY+KBD_DAT) ; PORT SETTING |
|
|
|
@ -101,7 +96,7 @@ KBD_INIT: |
|
|
|
; |
|
|
|
LD A,$AA ; CONTROLLER SELF TEST |
|
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
|
CALL KBD_GETDATA ; CONTROLLER SHOULD RESPOND WITH $55 (ACK) |
|
|
|
CALL KBD_GETDATA_P ; CONTROLLER SHOULD RESPOND WITH $55 (ACK) |
|
|
|
; |
|
|
|
CP $55 ; IS IT THERE? |
|
|
|
JR Z,KBD_INIT1 ; IF SO, CONTINUE |
|
|
|
@ -120,6 +115,12 @@ KBD_INIT1: |
|
|
|
LD DE,KBD_STR_MODEUNK |
|
|
|
KBD_INIT2: |
|
|
|
CALL WRITESTR |
|
|
|
; |
|
|
|
#IF ((INTMODE == 2) & INTPS2KBD) |
|
|
|
; CALL KBDQINIT ; INITIALIZE QUEUE |
|
|
|
LD HL,KBD_INT ; INSTALL VECTOR |
|
|
|
LD (IVT(INT_PS2KB)),HL ; IVT INDEX |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD A,$60 ; SET COMMAND REGISTER |
|
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
|
@ -244,7 +245,9 @@ KBD_PUTDATA2: |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
KBD_GETDATA: |
|
|
|
; |
|
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT |
|
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT. |
|
|
|
; DEPENDING ON ASSEMBLY CONFIGURATION KBD_GETDATA READS A BYTE FROM |
|
|
|
; EITHER THE INTERRUPT QUEUE OR FROM THE KEYBOARD CONTROLLER PORT. |
|
|
|
; |
|
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
|
KBD_GETDATA0: |
|
|
|
@ -267,6 +270,32 @@ KBD_GETDATA1: |
|
|
|
RET |
|
|
|
; |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
KBD_GETDATA_P: |
|
|
|
; |
|
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT. |
|
|
|
; KBD_GETDATA_P ALWAYS READS A BYTE FROM THE KEYBOARD CONTROLLER PORT. |
|
|
|
; |
|
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
|
KBD_GETDATA0_P: |
|
|
|
CALL KBD_IST_P ; GET INPUT REGISTER STATUS |
|
|
|
JR NZ,KBD_GETDATA1_P ; BYTE PENDING, GO GET IT |
|
|
|
CALL DELAY ; WAIT A BIT |
|
|
|
DJNZ KBD_GETDATA0_P ; LOOP UNTIL COUNTER EXHAUSTED |
|
|
|
XOR A ; NO DATA, RETURN ZERO |
|
|
|
RET |
|
|
|
KBD_GETDATA1_P: |
|
|
|
CALL KBD_IN_P ; GET A KEY |
|
|
|
#IF (KBDTRACE >= 2) |
|
|
|
PUSH AF |
|
|
|
CALL PC_SPACE |
|
|
|
CALL PC_LT |
|
|
|
CALL PRTHEXBYTE |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET |
|
|
|
; |
|
|
|
;__________________________________________________________________________________________________ |
|
|
|
KBD_GETDATAX: |
|
|
|
; |
|
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH NOTIMEOUT |
|
|
|
|