mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
KBD Interrupt Processing Cleanup
- I finally realized there was a much simpler way to setup the instance data pointer (IY) for the interrupt handler. This implements the change and reduces the complexity of the code. - Related to PR #460
This commit is contained in:
@@ -576,7 +576,7 @@ Boot [H=Help]: h
|
||||
D - Device Inventory
|
||||
R - Reboot System
|
||||
W - RomWBW Configure
|
||||
I <u> [<c>] - Set Console Interface/Baud code
|
||||
I <u> [<c>] - Set Console Interface/Baud Rate
|
||||
V [<n>] - View/Set HBIOS Diagnostic Verbosity
|
||||
<u>[.<s>] - Boot Disk Unit/Slice
|
||||
```
|
||||
|
||||
@@ -921,11 +921,3 @@ CVDU_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB CVDU_KBDST
|
||||
.DB CVDU_KBDDATA
|
||||
;
|
||||
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
|
||||
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
|
||||
; HANDLER IN PS2IFACE.INC.
|
||||
;
|
||||
#IF (KBDINTS)
|
||||
KBDIDAT .EQU CVDU_IDAT
|
||||
#ENDIF
|
||||
|
||||
@@ -350,11 +350,3 @@ GDC_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB GDC_KBDST
|
||||
.DB GDC_KBDDATA
|
||||
;
|
||||
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
|
||||
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
|
||||
; HANDLER IN PS2IFACE.INC.
|
||||
;
|
||||
#IF (KBDINTS)
|
||||
KBDIDAT .EQU GDC_IDAT
|
||||
#ENDIF
|
||||
|
||||
@@ -3030,8 +3030,6 @@ HB_SPDTST:
|
||||
;--------------------------------------------------------------------------------------------------
|
||||
; ENABLE INTERRUPTS
|
||||
;--------------------------------------------------------------------------------------------------
|
||||
;
|
||||
;;;CALL HB_PREINT_HOOKS ; HACK TO ALLOW SOME DRIVERS TO DO PRE INTERRUPT STUFF
|
||||
;
|
||||
#IFDEF TESTING
|
||||
;
|
||||
@@ -9374,15 +9372,6 @@ SIZ_EZ80DRVS .EQU $ - ORG_EZ80DRVS
|
||||
MEMECHO "RTCDEF="
|
||||
MEMECHO RTCDEF
|
||||
MEMECHO "\n"
|
||||
;;;;
|
||||
;;;; PRE-INTERRUPT HOOKS
|
||||
;;;;
|
||||
;;;HB_PREINT_HOOKS:
|
||||
;;;;
|
||||
;;;#IF (KBDENABLE)
|
||||
;;; CALL KBD_PREINT_HOOK
|
||||
;;;#ENDIF
|
||||
;;; RET
|
||||
;
|
||||
HB_DRIVERS_END .EQU $
|
||||
;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -38,7 +38,7 @@ KBDQ .FILL KBDQSIZ,0 ; CIRCULAR KEYBOARD BUFFER
|
||||
;
|
||||
KBD_INT:
|
||||
; CALL KBDQDBG
|
||||
LD IY,KBDIDAT
|
||||
LD IY,(KBD_IDAT) ; POINT TO INSTANCE DATA
|
||||
LD C,(IY+KBD_ST) ; READ CONTROLLER STATUS
|
||||
EZ80_IO
|
||||
IN A,(C)
|
||||
|
||||
@@ -1189,14 +1189,6 @@ TMS_IDAT:
|
||||
.DB TMS_DATREG
|
||||
.DB TMS_CMDREG
|
||||
;
|
||||
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
|
||||
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
|
||||
; HANDLER IN PS2IFACE.INC.
|
||||
;
|
||||
#IF ((TMSKBD == TMSKBD_KBD) & KBDINTS)
|
||||
KBDIDAT .EQU TMS_IDAT
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; TMS DRIVER - TMS9918 REGISTER INITIALIZATION
|
||||
;==================================================================================================
|
||||
|
||||
@@ -1056,11 +1056,3 @@ VGA_IDAT:
|
||||
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER
|
||||
.DB VGA_KBDST
|
||||
.DB VGA_KBDDATA
|
||||
;
|
||||
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
|
||||
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
|
||||
; HANDLER IN PS2IFACE.INC.
|
||||
;
|
||||
#IF (KBDINTS)
|
||||
KBDIDAT .EQU VGA_IDAT
|
||||
#ENDIF
|
||||
|
||||
@@ -675,11 +675,3 @@ VRC_IDAT:
|
||||
.DB KBDMODE_VRC ; VGARC KEYBOARD CONTROLLER
|
||||
.DB VRC_KBDST
|
||||
.DB VRC_KBDDATA
|
||||
;
|
||||
; IF WE ARE USING PS2 INTERRUPTS, WE NEED TO PASS THE INSTANCE
|
||||
; DATA POINTER TO PS2IFACE.INC VIA KBDIDAT FOR USE BY THE INTERRUPT
|
||||
; HANDLER IN PS2IFACE.INC.
|
||||
;
|
||||
#IF (KBDINTS)
|
||||
KBDIDAT .EQU VRC_IDAT
|
||||
#ENDIF
|
||||
|
||||
Reference in New Issue
Block a user