Browse Source

Refactor ps2 keyboard driver

pull/467/head
b1ackmai1er 1 year ago
parent
commit
e433eb4962
  1. 45
      Source/HBIOS/kbd.asm
  2. 13
      Source/HBIOS/ps2iface.inc

45
Source/HBIOS/kbd.asm

@ -151,9 +151,9 @@ KBD_INIT2:
CALL KBD_PUTCMD ; SEND IT CALL KBD_PUTCMD ; SEND IT
#IF ((INTMODE == 2) & KBDINTS) #IF ((INTMODE == 2) & KBDINTS)
LD A,KBD_CON_ION ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
LD A,KBD_CON_ION ; XLAT DISABLED, MOUSE DISABLED, INTS ON
#ELSE #ELSE
LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, NO INTS
LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, INTS OFF
#ENDIF #ENDIF
CALL KBD_PUTDATA ; SEND IT CALL KBD_PUTDATA ; SEND IT
CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED
@ -217,14 +217,8 @@ KBD_PUTCMD:
LD E,A ; SAVE INCOMING VALUE IN E LD E,A ; SAVE INCOMING VALUE IN E
LD A,(IY+KBD_MODE) ; GET MODE BYTE LD A,(IY+KBD_MODE) ; GET MODE BYTE
CP KBDMODE_VRC ; VGARC KEYBOARD? CP KBDMODE_VRC ; VGARC KEYBOARD?
JR Z,KBD_PUTCMD2 ; BAIL OUT
LD B,KBD_WAITTO ; SETUP TO LOOP
KBD_PUTCMD0:
CALL KBD_OST ; GET OUTPUT REGISTER STATUS
JR NZ,KBD_PUTCMD1 ; EMPTY, GO TO WRITE
CALL DELAY ; WAIT A BIT
DJNZ KBD_PUTCMD0 ; LOOP UNTIL COUNTER EXHAUSTED
RET
RET Z ; BAIL OUT
CALL KBD_CHK_OST
KBD_PUTCMD1: KBD_PUTCMD1:
LD A,E ; RECOVER VALUE TO WRITE LD A,E ; RECOVER VALUE TO WRITE
#IF (KBDTRACE >= 2) #IF (KBDTRACE >= 2)
@ -233,10 +227,7 @@ KBD_PUTCMD1:
CALL PC_GT CALL PC_GT
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
CALL KBD_CMDOUT ; OUTPUT CMD TO PORT
KBD_PUTCMD2:
XOR A ; SIGNAL SUCCESS
RET
JP KBD_CMDOUT ; OUTPUT CMD TO PORT
; ;
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
KBD_PUTDATA: KBD_PUTDATA:
@ -246,14 +237,8 @@ KBD_PUTDATA:
LD E,A ; SAVE INCOMING VALUE IN E LD E,A ; SAVE INCOMING VALUE IN E
LD A,(IY+KBD_MODE) ; GET MODE BYTE LD A,(IY+KBD_MODE) ; GET MODE BYTE
CP KBDMODE_VRC ; VGARC KEYBOARD? CP KBDMODE_VRC ; VGARC KEYBOARD?
JR Z,KBD_PUTDATA2 ; BAIL OUT
LD B,KBD_WAITTO ; SETUP TO LOOP
KBD_PUTDATA0:
CALL KBD_OST ; GET OUTPUT REGISTER STATUS
JR NZ,KBD_PUTDATA1 ; EMPTY, GO TO WRITE
CALL DELAY ; WAIT A BIT
DJNZ KBD_PUTDATA0 ; LOOP UNTIL COUNTER EXHAUSTED
RET
RET Z ; BAIL OUT
CALL KBD_CHK_OST
KBD_PUTDATA1: KBD_PUTDATA1:
LD A,E ; RECOVER VALUE TO WRITE LD A,E ; RECOVER VALUE TO WRITE
#IF (KBDTRACE >= 2) #IF (KBDTRACE >= 2)
@ -261,9 +246,19 @@ KBD_PUTDATA1:
CALL PC_GT CALL PC_GT
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
CALL KBD_DTAOUT ; WRITE IT
KBD_PUTDATA2:
XOR A ; SIGNAL SUCCESS
JP KBD_DTAOUT ; WRITE IT
;
;__________________________________________________________________________________________________
;
; CHECK OUTPUT BUFFER IS READY TO ACCEPT. TIMEOUT IF BUFFER DOES NOT BECOME READY
;
KBD_CHK_OST:
LD B,KBD_WAITTO ; SETUP TO LOOP
KBD_OST_LP:
CALL KBD_OST ; GET OUTPUT REGISTER STATUS
RET NZ ; EMPTY, GO TO WRITE
CALL DELAY ; WAIT A BIT
DJNZ KBD_OST_LP ; LOOP UNTIL COUNTER EXHAUSTED
RET RET
; ;
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________

13
Source/HBIOS/ps2iface.inc

@ -64,19 +64,10 @@ KBD_INT:
; ;
KBD_DEINIT: KBD_DEINIT:
LD IY,(KBD_IDAT) ; SETUP PORT POINTER LD IY,(KBD_IDAT) ; SETUP PORT POINTER
;
LD C,(IY+KBD_CMD) ; LOAD COMMAND PORT
LD A,KBD_CON_WCR ; LOAD WRITE COMMAND LD A,KBD_CON_WCR ; LOAD WRITE COMMAND
EZ80_IO
OUT (C),A ; SEND COMMAND
;
LD C,(IY+KBD_DAT) ; LOAD DATA PORT
CALL KBD_CMDOUT ; WRITE IT
LD A,KBD_CON_IOF ; LOAD DISABLE INTERRUPTS CFG LD A,KBD_CON_IOF ; LOAD DISABLE INTERRUPTS CFG
EZ80_IO
OUT (C),A ; SEND DATA
;
XOR A ; SIGNAL SUCCESS
RET
JP KBD_DTAOUT ; WRITE IT
#ENDIF #ENDIF
;__________________________________________________________________________________________________ ;__________________________________________________________________________________________________
; KEYBOARD READ ; KEYBOARD READ

Loading…
Cancel
Save