From e433eb4962713b46e5eca9d0ff7b86621967c8e7 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Wed, 11 Dec 2024 21:38:26 +0800 Subject: [PATCH] Refactor ps2 keyboard driver --- Source/HBIOS/kbd.asm | 45 +++++++++++++++++---------------------- Source/HBIOS/ps2iface.inc | 13 ++--------- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index b47753d7..8cc165fb 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -151,9 +151,9 @@ KBD_INIT2: CALL KBD_PUTCMD ; SEND IT #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 - LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, NO INTS + LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, INTS OFF #ENDIF CALL KBD_PUTDATA ; SEND IT 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 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 -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: LD A,E ; RECOVER VALUE TO WRITE #IF (KBDTRACE >= 2) @@ -233,10 +227,7 @@ KBD_PUTCMD1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - CALL KBD_CMDOUT ; OUTPUT CMD TO PORT -KBD_PUTCMD2: - XOR A ; SIGNAL SUCCESS - RET + JP KBD_CMDOUT ; OUTPUT CMD TO PORT ; ;__________________________________________________________________________________________________ KBD_PUTDATA: @@ -246,14 +237,8 @@ KBD_PUTDATA: LD E,A ; SAVE INCOMING VALUE IN E 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 -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: LD A,E ; RECOVER VALUE TO WRITE #IF (KBDTRACE >= 2) @@ -261,9 +246,19 @@ KBD_PUTDATA1: CALL PC_GT CALL PRTHEXBYTE #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 ; ;__________________________________________________________________________________________________ diff --git a/Source/HBIOS/ps2iface.inc b/Source/HBIOS/ps2iface.inc index 7145d482..4a57e00d 100644 --- a/Source/HBIOS/ps2iface.inc +++ b/Source/HBIOS/ps2iface.inc @@ -64,19 +64,10 @@ KBD_INT: ; KBD_DEINIT: LD IY,(KBD_IDAT) ; SETUP PORT POINTER -; - LD C,(IY+KBD_CMD) ; LOAD COMMAND PORT 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 - EZ80_IO - OUT (C),A ; SEND DATA -; - XOR A ; SIGNAL SUCCESS - RET + JP KBD_DTAOUT ; WRITE IT #ENDIF ;__________________________________________________________________________________________________ ; KEYBOARD READ