|
|
@ -113,18 +113,14 @@ KBD_INIT: |
|
|
CP KBDMODE_VRC ; VRC? |
|
|
CP KBDMODE_VRC ; VRC? |
|
|
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT |
|
|
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT |
|
|
; |
|
|
; |
|
|
#IF ((INTMODE == 2) & KBDINTS) |
|
|
|
|
|
HB_DI ; DISABLE INTERRUPTS WHILE WE PROBE |
|
|
HB_DI ; DISABLE INTERRUPTS WHILE WE PROBE |
|
|
#ENDIF |
|
|
|
|
|
LD A,$AA ; CONTROLLER SELF TEST |
|
|
LD A,$AA ; CONTROLLER SELF TEST |
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
CALL KBD_PUTCMD ; SEND IT |
|
|
CALL KBD_GETDATA_P ; CONTROLLER SHOULD RESPOND WITH $55 (ACK) |
|
|
CALL KBD_GETDATA_P ; CONTROLLER SHOULD RESPOND WITH $55 (ACK) |
|
|
|
|
|
HB_EI ; RESTORE INTERRUPTS |
|
|
; |
|
|
; |
|
|
CP $55 ; IS IT THERE? |
|
|
CP $55 ; IS IT THERE? |
|
|
JR Z,KBD_INIT1 ; IF SO, CONTINUE |
|
|
JR Z,KBD_INIT1 ; IF SO, CONTINUE |
|
|
#IF ((INTMODE == 2) & KBDINTS) |
|
|
|
|
|
HB_EI ; RESTORE INTERRUPTS |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM |
|
|
PRTS(" NOT PRESENT$") ; DIAGNOSE PROBLEM |
|
|
RET ; BAIL OUT |
|
|
RET ; BAIL OUT |
|
|
; |
|
|
; |
|
|
@ -133,7 +129,6 @@ KBD_INIT1: |
|
|
; CALL KBDQINIT ; INITIALIZE QUEUE |
|
|
; CALL KBDQINIT ; INITIALIZE QUEUE |
|
|
LD HL,KBD_INT ; INSTALL VECTOR |
|
|
LD HL,KBD_INT ; INSTALL VECTOR |
|
|
LD (IVT(INT_PS2KB)),HL ; IVT INDEX |
|
|
LD (IVT(INT_PS2KB)),HL ; IVT INDEX |
|
|
HB_EI ; ENABLE INTERUPTS |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
PRTS(" MODE=$") ; TAG |
|
|
PRTS(" MODE=$") ; TAG |
|
|
LD A,(IY+KBD_MODE) ; GET MODE VALUE |
|
|
LD A,(IY+KBD_MODE) ; GET MODE VALUE |
|
|
@ -268,22 +263,22 @@ KBD_PUTDATA2: |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
KBD_GETDATA: |
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
KBD_GETDATA_P: |
|
|
; |
|
|
; |
|
|
; 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. |
|
|
|
|
|
|
|
|
; KBD_GETDATA_P ALWAYS READS A BYTE FROM THE KEYBOARD CONTROLLER PORT. |
|
|
; |
|
|
; |
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
KBD_GETDATA0: |
|
|
|
|
|
CALL KBD_IST ; GET INPUT REGISTER STATUS |
|
|
|
|
|
JR NZ,KBD_GETDATA1 ; BYTE PENDING, GO GET IT |
|
|
|
|
|
|
|
|
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 |
|
|
CALL DELAY ; WAIT A BIT |
|
|
DJNZ KBD_GETDATA0 ; LOOP UNTIL COUNTER EXHAUSTED |
|
|
|
|
|
|
|
|
DJNZ KBD_GETDATA0_P ; LOOP UNTIL COUNTER EXHAUSTED |
|
|
XOR A ; NO DATA, RETURN ZERO |
|
|
XOR A ; NO DATA, RETURN ZERO |
|
|
RET |
|
|
RET |
|
|
KBD_GETDATA1: |
|
|
|
|
|
CALL KBD_IN ; GET A KEY |
|
|
|
|
|
|
|
|
KBD_GETDATA1_P: |
|
|
|
|
|
CALL KBD_IN_P ; GET A KEY |
|
|
#IF (KBDTRACE >= 2) |
|
|
#IF (KBDTRACE >= 2) |
|
|
PUSH AF |
|
|
PUSH AF |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
@ -294,36 +289,52 @@ KBD_GETDATA1: |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
;__________________________________________________________________________________________________ |
|
|
|
|
|
KBD_GETDATA_P: |
|
|
|
|
|
|
|
|
KBD_GETDATA_Q: |
|
|
; |
|
|
; |
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT. |
|
|
|
|
|
; KBD_GETDATA_P ALWAYS READS A BYTE FROM THE KEYBOARD CONTROLLER PORT. |
|
|
|
|
|
|
|
|
; GET A QUEUED DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH TIMEOUT. |
|
|
|
|
|
; KBD_GETDATA_Q ALWAYS READS A BYTE FROM THE KEYBOARD INTERRUPT QUEUE. |
|
|
|
|
|
; |
|
|
|
|
|
#IF ((INTMODE == 2) & KBDINTS)) |
|
|
; |
|
|
; |
|
|
LD B,KBD_WAITTO ; SETUP TO LOOP |
|
|
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 |
|
|
|
|
|
|
|
|
KBD_GETDATA0_Q: |
|
|
|
|
|
CALL KBD_IST_Q ; GET INPUT REGISTER STATUS |
|
|
|
|
|
JR NZ,KBD_GETDATA1_Q ; BYTE PENDING, GO GET IT |
|
|
CALL DELAY ; WAIT A BIT |
|
|
CALL DELAY ; WAIT A BIT |
|
|
DJNZ KBD_GETDATA0_P ; LOOP UNTIL COUNTER EXHAUSTED |
|
|
|
|
|
|
|
|
DJNZ KBD_GETDATA0_Q ; LOOP UNTIL COUNTER EXHAUSTED |
|
|
XOR A ; NO DATA, RETURN ZERO |
|
|
XOR A ; NO DATA, RETURN ZERO |
|
|
RET |
|
|
RET |
|
|
KBD_GETDATA1_P: |
|
|
|
|
|
CALL KBD_IN_P ; GET A KEY |
|
|
|
|
|
#IF (KBDTRACE >= 2) |
|
|
|
|
|
|
|
|
KBD_GETDATA1_Q: |
|
|
|
|
|
CALL KBD_IN_Q ; GET A KEY |
|
|
|
|
|
#IF (KBDTRACE >= 2) |
|
|
PUSH AF |
|
|
PUSH AF |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
CALL PC_LT |
|
|
CALL PC_LT |
|
|
CALL PRTHEXBYTE |
|
|
CALL PRTHEXBYTE |
|
|
POP AF |
|
|
POP AF |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
#ENDIF |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
; GET A 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. |
|
|
|
|
|
; |
|
|
|
|
|
#IF ((INTMODE == 2) & KBDINTS)) |
|
|
|
|
|
KBD_GETDATA .EQU KBD_GETDATA_Q |
|
|
|
|
|
KBD_GETDATA1 .EQU KBD_GETDATA1_Q |
|
|
|
|
|
#ELSE |
|
|
|
|
|
KBD_GETDATA .EQU KBD_GETDATA_P |
|
|
|
|
|
KBD_GETDATA1 .EQU KBD_GETDATA1_P |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
KBD_GETDATAX: |
|
|
KBD_GETDATAX: |
|
|
; |
|
|
; |
|
|
; GET A RAW DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH NOTIMEOUT |
|
|
|
|
|
|
|
|
; GET A DATA BYTE FROM KEYBOARD INTERFACE INTO A WITH NO TIMEOUT |
|
|
|
|
|
; IF NOTHING AVAILABLE, RETURN 0. |
|
|
; |
|
|
; |
|
|
CALL KBD_IST ; GET INPUT REGISTER STATUS |
|
|
CALL KBD_IST ; GET INPUT REGISTER STATUS |
|
|
RET Z ; NOTHING THERE, DONE |
|
|
RET Z ; NOTHING THERE, DONE |
|
|
|