From 26a87a16a893b1fca42281e2f6c44ff6ea20aae1 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 12 Dec 2024 13:26:10 -0800 Subject: [PATCH] KBD Driver Pre Init - Updated KBD driver to use PREINIT to disable interrupts. --- Source/HBIOS/hbios.asm | 6 +++--- Source/HBIOS/kbd.asm | 39 +++++++++++++++++++++++++++++++++++++++ Source/HBIOS/ps2iface.inc | 20 ++++++++++---------- Source/HBIOS/tms.asm | 4 ++++ Source/ver.inc | 2 +- Source/ver.lib | 2 +- 6 files changed, 58 insertions(+), 15 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f8da23f2..01ad296d 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -5318,9 +5318,9 @@ SYS_RESCOLD: ; ; TURN OFF SPURIOUS INTERRUPT SOURCES ; -#IF ((INTMODE == 2) & KBDINTS)) - CALL KBD_DEINIT -#ENDIF +;;;#IF ((INTMODE == 2) & KBDINTS)) +;;; CALL KBD_DEINIT +;;;#ENDIF #IFDEF APPBOOT JP HB_RESTART #ELSE diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 8cc165fb..d7542921 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -76,6 +76,10 @@ KBD_IDLE .DB 0 ; IDLE COUNT ; 8242 CONTROLLER COMMANDS AND RESPONSES ;__________________________________________________________________________________________________ ; +KBD_CON_DP1 .EQU $AD ; DISABLE PS2 PORT 1 (KEYBOARD) +KBD_CON_DP2 .EQU $A7 ; DISABLE PS2 PORT 2 (MOUSE) +KBD_CON_EP1 .EQU $AE ; ENABLE PS2 PORT 1 (KEYBOARD) +KBD_CON_EP2 .EQU $A8 ; ENABLE PS2 PORT 2 (MOUSE) KBD_CON_WCR .EQU $60 ; WRITE TO COMMAND REGISTER. VALUE TO FOLLOW. KBD_CON_CST .EQU $AA ; CONTROLLER SELF TEST. RETURN FF IF CONTROLLER OK ;__________________________________________________________________________________________________ @@ -94,6 +98,41 @@ KBD_CON_IOF .EQU $20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS #INCLUDE "ps2iface.inc" ; ;__________________________________________________________________________________________________ +; KEYBOARD PRE-INITIALIZATION +;__________________________________________________________________________________________________ +; +; TO BE CALLED PRIOR TO INITERRUPTS BEING ENABLED +; MUST BE CALLED FROM VIDEO DRIVER PREINIT WITH IY SET +; THIS PREVENTS INTRERRUPT ISSUES IF 8242 HAS INTERRUPTS ENABLED +; +; AT STARTUP. NOT USING IT FOR NOW BECAUSE IT IS NOT A PROBLEM IF +; YOU DON'T USE THE KEYBOARD DURING BOOT. +; +KBD_PREINIT: +; +#IF (KBDINTS) + ; DISABLE DEVICES (KEYBOARD/MOUSE) + LD A,KBD_CON_DP1 ; DISABLE PORT 1 (KEYBOARD) + CALL KBD_PUTCMD ; SEND IT + LD A,KBD_CON_DP2 ; DISABLE PORT 2 (MOUSE) + CALL KBD_PUTCMD ; SEND IT +; + ; FLUSH ANY PENDING OUTPUT + LD B,16 ; UP TO 16 BYTES MAY BE WAITING +KBD_PREINIT1: + CALL KBD_IN_P ; BLIND READ + DJNZ KBD_PREINIT1 ; AND LOOP +; + ; DISABLE INTERRUPTS + LD A,KBD_CON_WCR ; SET COMMAND REGISTER + CALL KBD_PUTCMD ; SEND IT + LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, NO INTS + CALL KBD_PUTDATA ; SEND IT +; +#ENDIF + RET +; +;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION ;__________________________________________________________________________________________________ ; diff --git a/Source/HBIOS/ps2iface.inc b/Source/HBIOS/ps2iface.inc index 4a57e00d..3ed1e7f7 100644 --- a/Source/HBIOS/ps2iface.inc +++ b/Source/HBIOS/ps2iface.inc @@ -58,16 +58,16 @@ KBD_INT: ; CALL KBDQDBG ; RET -;__________________________________________________________________________________________________ -; KEYBOARD DEINITIALIZATION -;__________________________________________________________________________________________________ -; -KBD_DEINIT: - LD IY,(KBD_IDAT) ; SETUP PORT POINTER - LD A,KBD_CON_WCR ; LOAD WRITE COMMAND - CALL KBD_CMDOUT ; WRITE IT - LD A,KBD_CON_IOF ; LOAD DISABLE INTERRUPTS CFG - JP KBD_DTAOUT ; WRITE IT +;;;;__________________________________________________________________________________________________ +;;;; KEYBOARD DEINITIALIZATION +;;;;__________________________________________________________________________________________________ +;;;; +;;;KBD_DEINIT: +;;; LD IY,(KBD_IDAT) ; SETUP PORT POINTER +;;; LD A,KBD_CON_WCR ; LOAD WRITE COMMAND +;;; CALL KBD_CMDOUT ; WRITE IT +;;; LD A,KBD_CON_IOF ; LOAD DISABLE INTERRUPTS CFG +;;; JP KBD_DTAOUT ; WRITE IT #ENDIF ;__________________________________________________________________________________________________ ; KEYBOARD READ diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 1da1d4cd..6633f696 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -205,6 +205,10 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT ;====================================================================== ; TMS_PREINIT: +#IF (TMSKBD == TMSKBD_KBD) + LD IY,TMS_IDAT ; POINTER TO INSTANCE DATA + CALL KBD_PREINIT +#ENDIF ; DISABLE INTERRUPT GENERATION UNTIL AFTER INTERRUPT HANDLER ; HAS BEEN INSTALLED. LD A, (TMS_INITVDU_REG_1) diff --git a/Source/ver.inc b/Source/ver.inc index d7c982bf..f29032b3 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.99" +#DEFINE BIOSVER "3.5.0-dev.100" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index fa768e8b..9534ebd3 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.99" + db "3.5.0-dev.100" endm