mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
PS2 keyboard spurious interrupts
Resolved keyboard interrupt errors when a key is pressed during reboot. Turn off keyboard controller interrupt enable before cold boot process starts. I'm wondering if duodyne interrupt generator is immune to DI :)?
This commit is contained in:
@@ -5316,6 +5316,11 @@ SYS_RESWARM:
|
||||
;
|
||||
SYS_RESCOLD:
|
||||
;
|
||||
; TURN OFF SPURIOUS INTERRUPT SOURCES
|
||||
;
|
||||
#IF ((INTMODE == 2) & KBDINTS))
|
||||
CALL KBD_DEINIT
|
||||
#ENDIF
|
||||
#IFDEF APPBOOT
|
||||
JP HB_RESTART
|
||||
#ELSE
|
||||
@@ -5406,8 +5411,8 @@ SYS_RESUSER2:
|
||||
; GET THE CURRENT HBIOS VERSION
|
||||
; ON INPUT, C=0
|
||||
; RETURNS VERSION IN DE AS BCD
|
||||
; D: MAJOR VERION IN TOP 4 BITS, MINOR VERSION IN LOW 4 BITS
|
||||
; E: UPDATE VERION IN TOP 4 BITS, PATCH VERSION IN LOW 4 BITS
|
||||
; D: MAJOR VERSION IN TOP 4 BITS, MINOR VERSION IN LOW 4 BITS
|
||||
; E: UPDATE VERSION IN TOP 4 BITS, PATCH VERSION IN LOW 4 BITS
|
||||
; L: PLATFORM ID
|
||||
;
|
||||
SYS_VER:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; 8242 BASED PS/2 KEYBOARD DRIVER FOR SBC
|
||||
; 8242 BASED PS/2 KEYBOARD DRIVER
|
||||
;
|
||||
; ORIGINAL CODE BY DR JAMES MOXHAM
|
||||
; ROMWBW ADAPTATION BY WAYNE WARTHEN
|
||||
@@ -72,6 +72,18 @@ KBD_RSTATE .DB 0 ; STATE BITS FOR "RIGHT" KEYS
|
||||
KBD_STATUS .DB 0 ; CURRENT STATUS BITS (SEE ABOVE)
|
||||
KBD_REPEAT .DB 0 ; CURRENT REPEAT RATE
|
||||
KBD_IDLE .DB 0 ; IDLE COUNT
|
||||
;__________________________________________________________________________________________________
|
||||
; 8242 CONTROLLER COMMANDS AND RESPONSES
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
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
|
||||
;__________________________________________________________________________________________________
|
||||
; 8242 CONTROLLER COMMAND REGISTER VALUES
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
KBD_CON_ION .EQU $21 ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
|
||||
KBD_CON_IOF .EQU $20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
|
||||
;
|
||||
DEVECHO "KBD: ENABLED\n"
|
||||
;
|
||||
@@ -82,34 +94,6 @@ KBD_IDLE .DB 0 ; IDLE COUNT
|
||||
#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_PREINT:
|
||||
;;;;
|
||||
;;;;
|
||||
;;;#IF (KBDINTS)
|
||||
;;; LD A,$60 ; SET COMMAND REGISTER
|
||||
;;; CALL KBD_PUTCMD ; SEND IT
|
||||
;;; LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
|
||||
;;; CALL KBD_PUTDATA ; SEND IT
|
||||
;;;;
|
||||
;;; ; FLUSH ANY PENDING OUTPUT
|
||||
;;; LD B,16
|
||||
;;;KBD_PREINT_HOOK1:
|
||||
;;; CALL KBD_IN_P
|
||||
;;; DJNZ KBD_PREINT_HOOK1
|
||||
;;;#ENDIF
|
||||
;;; RET
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
; KEYBOARD INITIALIZATION
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
@@ -134,7 +118,7 @@ KBD_INIT:
|
||||
JR Z,KBD_INIT1 ; IF SO, MUST ASSUME PRESENT
|
||||
;
|
||||
HB_DI ; DISABLE INTERRUPTS WHILE WE PROBE
|
||||
LD A,$AA ; CONTROLLER SELF TEST
|
||||
LD A,KBD_CON_CST ; CONTROLLER SELF TEST
|
||||
CALL KBD_PUTCMD ; SEND IT
|
||||
CALL KBD_GETDATA_P ; CONTROLLER SHOULD RESPOND WITH $55 (ACK)
|
||||
HB_EI ; RESTORE INTERRUPTS
|
||||
@@ -163,16 +147,15 @@ KBD_INIT1:
|
||||
KBD_INIT2:
|
||||
CALL WRITESTR
|
||||
;
|
||||
LD A,$60 ; SET COMMAND REGISTER
|
||||
LD A,KBD_CON_WCR ; SET COMMAND REGISTER
|
||||
CALL KBD_PUTCMD ; SEND IT
|
||||
|
||||
#IF ((INTMODE == 2) & KBDINTS)
|
||||
LD A,$21 ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
|
||||
LD A,KBD_CON_ION ; XLAT DISABLED, MOUSE DISABLED, WITH INTS
|
||||
#ELSE
|
||||
LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
|
||||
LD A,KBD_CON_IOF ; XLAT DISABLED, MOUSE DISABLED, NO INTS
|
||||
#ENDIF
|
||||
CALL KBD_PUTDATA ; SEND IT
|
||||
|
||||
CALL KBD_GETDATA ; GOBBLE UP $AA FROM POWER UP, AS NEEDED
|
||||
|
||||
CALL KBD_RESET ; RESET THE KEYBOARD
|
||||
|
||||
@@ -58,9 +58,26 @@ KBD_INT:
|
||||
; CALL KBDQDBG
|
||||
;
|
||||
RET
|
||||
;__________________________________________________________________________________________________
|
||||
; KEYBOARD DEINITIALIZATION
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
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
|
||||
LD A,KBD_CON_IOF ; LOAD DISABLE INTERRUPTS CFG
|
||||
EZ80_IO
|
||||
OUT (C),A ; SEND DATA
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
; KEYBOARD READ
|
||||
;__________________________________________________________________________________________________
|
||||
|
||||
Reference in New Issue
Block a user