From 7606abb8f358340a90ff8d34ad99b9ba9862c3e8 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 7 Dec 2024 13:48:43 -0800 Subject: [PATCH] Follow-up on KBD Interrupt Support Related to PR #460 --- Source/HBIOS/cfg_MASTER.asm | 2 +- Source/HBIOS/cvdu.asm | 8 ++++++++ Source/HBIOS/gdc.asm | 8 ++++++++ Source/HBIOS/hbios.asm | 28 +++++++++++++++++++++++++++- Source/HBIOS/kbd.asm | 31 +++++++++++++++++++++++++------ Source/HBIOS/ps2iface.inc | 35 ++++------------------------------- Source/HBIOS/tms.asm | 19 +++++++++++++++++-- Source/HBIOS/vga.asm | 8 ++++++++ Source/HBIOS/vrc.asm | 8 ++++++++ 9 files changed, 106 insertions(+), 41 deletions(-) diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 367a234d..267fbc19 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -64,7 +64,6 @@ CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -INTPS2KBD .EQU FALSE ; USE INTERRUPTS FOR PS2 KEYBOARD DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) @@ -174,6 +173,7 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +KBDINTS .EQU FALSE ; ENABLE KBD (PS2) KEYBOARD INTERRUPTS ; DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 8fce3e31..d33e96e8 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -921,3 +921,11 @@ 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 diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index 6e0fc085..9be0bcd4 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -350,3 +350,11 @@ 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 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 97135665..f94bfbc5 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3030,6 +3030,23 @@ HB_SPDTST: ;-------------------------------------------------------------------------------------------------- ; ENABLE INTERRUPTS ;-------------------------------------------------------------------------------------------------- +; + ;;;CALL HB_PREINT_HOOKS ; HACK TO ALLOW SOME DRIVERS TO DO PRE INTERRUPT STUFF +; +#IFDEF TESTING +; +INTTEST: + ; TEST TO SEE IF SOMEBODY ENABLED INTS EARLY! + LD A,I + JP PO,INTTEST_Z ; IF PO, INTS DISABLED AS EXPECTED + PRTX(STR_INTWARN) ; WARNING + JR INTTEST_Z ; CONTINUE +; +STR_INTWARN .TEXT "\r\n\r\nWARNING: INTERRUPTS ENABLED TOO EARLY!!!$" +; +INTTEST_Z: +; +#ENDIF ; HB_EI ; INTERRUPTS SHOULD BE OK NOW ; @@ -7595,7 +7612,7 @@ Z2DMAADR2: #ENDIF ; ;-------------------------------------------------------------------------------------------------- -; ROUTINES FOR NON VOLATILE (NVRAM) SWITCHES +; ROUTINES FOR NON VOLITILE (NVRAM) SWITCHES ;-------------------------------------------------------------------------------------------------- ; ; RESET CONTENTS OF NVRAM, STORING INTO @@ -9357,6 +9374,15 @@ 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 $ ; diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index bbd7cfa8..5ae5c6eb 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -8,7 +8,7 @@ ; ; ; IN DEBUG MODE: -: >>nn SHOWS HEX COMMAND nn BEING WRITTEN TO THE COMMAND PORT +; >>nn SHOWS HEX COMMAND nn BEING WRITTEN TO THE COMMAND PORT ; >nn SHOWS HEX VALUE nn BEING WRITTEN TO THE DATA PORT ;