@ -6,6 +6,16 @@
; ROMWBW ADAPTATION BY WAYNE WARTHEN
; INTERRUPT DRIVER ADDITION BY PHIL SUMMERS
;
; THIS DRIVER IS INVOKED BY VIDEO DRIVERS AS NEEDED. WHEN INVOKED,
; THE VIDEO DRIVER IS RESPONSIBLE FOR SETTING IY TO THE INSTANCE
; DATA FOR IT'S INSTANCE OF THE KBD DRIVER. THIS ALLOWS THIS CODE
; TO BE REUSED BY MULTIPLE VIDEO DRIVERS USING MULTIPLE PS/2 KBD
; INTERFACES IN A SINGLE SYSTEM.
;
; WARNING: WHEN INTERRUPTS ARE ENABLED FOR THIS DRIVER (KBDINTS), IT IS
; *NOT* POSSIBLE TO HAVE MULTIPLE VIDEO DRIVERS USING THIS KBD DRIVER
; ACTIVELY IN A SYSTEM. THE USE OF INTERRUPTS IMPLIES ONLY ONE PS/2
; KBD INTERFACE CAN BE USED CONCURRENTLY.
;
; IN DEBUG MODE:
; >>nn SHOWS HEX COMMAND nn BEING WRITTEN TO THE COMMAND PORT
@ -70,12 +80,22 @@ 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:
;;;;
;;;; HACK TO ENSURE PS/2 CONTROLLER INTERRUPTS ARE TURNED OFF!!!
;;;;
;;;KBD_PREINT_HOOK:
;;;#IF (KBDINTS)
;;; LD IY,KBDIDAT
;;; LD A,$60 ; SET COMMAND REGISTER
;;; CALL KBD_PUTCMD ; SEND IT
;;; LD A,$20 ; XLAT DISABLED, MOUSE DISABLED, NO INTS
@ -87,7 +107,7 @@ KBD_IDLE .DB 0 ; IDLE COUNT
;;; CALL KBD_IN_P
;;; DJNZ KBD_PREINT_HOOK1
;;;#ENDIF
RET
;;; RET
;
;__________________________________________________________________________________________________
; KEYBOARD INITIALIZATION
@ -127,6 +147,7 @@ KBD_INIT:
KBD_INIT1:
# IF (( INTMODE = = 2 ) & KBDINTS )
; CALL KBDQINIT ; INITIALIZE QUEUE
LD ( KBD_IDAT ), IY ; SAVE IY FOR INT HANDLER
LD HL , KBD_INT ; INSTALL VECTOR
LD ( IVT ( INT_PS2KB )), HL ; IVT INDEX
# ENDIF
@ -770,6 +791,10 @@ KBD_STR_MODEPS2 .TEXT "PS2$"
KBD_STR_MODEVRC .TEXT "VRC$"
KBD_STR_MODEUNK .TEXT "???$"
;
# IF (( INTMODE = = 2 ) & KBDINTS )
KBD_IDAT .DW 0 ; ADR OF INSTANCE DATA FOR INTS
# ENDIF
;
;
;
# IF ( KBDKBLOUT = = KBD_US )