From 895490a780f78dccec61e1efdc4660d1e7051c49 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 8 Jan 2026 13:08:25 -0800 Subject: [PATCH] Fix Keyboard Driver Init Calls, Issue #648 Keyboard driver initialization calls were doubled up when the refactored driver framework. This should resolve that. Thanks and credit to @b3rendsh. --- Source/HBIOS/ch376kyb.asm | 7 +++++-- Source/HBIOS/hbios.asm | 20 ++++++++++++++------ Source/HBIOS/kbd.asm | 11 +++++++---- Source/HBIOS/mky.asm | 7 +++++-- Source/HBIOS/nabukb.asm | 7 +++++-- Source/HBIOS/ppk.asm | 7 +++++-- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 8 files changed, 43 insertions(+), 20 deletions(-) diff --git a/Source/HBIOS/ch376kyb.asm b/Source/HBIOS/ch376kyb.asm index bfa78772..6b49c3c7 100644 --- a/Source/HBIOS/ch376kyb.asm +++ b/Source/HBIOS/ch376kyb.asm @@ -15,12 +15,15 @@ ORG_CHUKB .EQU $ .DW SIZ_CHUKB ; MODULE SIZE .DW CHUKB_INITPHASE ; ADR OF INIT PHASE HANDLER ; +; WARNING: KEYBOARD DRIVERS ARE INITIALIZED BY VDA DRIVERS +; AND SHOULD NOT BE INITIALIZED BY INITPHASE CALLS. +; CHUKB_INITPHASE: ; INIT PHASE HANDLER, A=PHASE ;CP HB_PHASE_PREINIT ; PREINIT PHASE? ;JP Z,CHUKB_PREINIT ; DO PREINIT - CP HB_PHASE_INIT ; INIT PHASE? - JP Z,CHUKB_INIT ; DO INIT + ;CP HB_PHASE_INIT ; INIT PHASE? + ;JP Z,CHUKB_INIT ; DO INIT RET ; DONE #IF (!CHNATIVEENABLE) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 68a0e3e0..08286985 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -8891,6 +8891,15 @@ HB_PRTSUM_END .EQU $ ; DEVICE DRIVERS ;================================================================================================== ; +; *** ORDER OF MODULES INCLUDED BELOW MATTERS!!! *** +; +; THE ORDER OF INCLUSION BELOW DICTATES THE ORDER IN WHICH THE INIT +; HANDLER OF EACH MODULE IS CALLED. THE ORDER THAT DRIVERS ARE +; REGISTERED IS AFFECTED BY THIS. +; +; EACH MODULE INCLUDED BELOW **MUST** HAVE THE STANDARD MODULE HEADER +; AND TRAILER. +; HB_DRIVERS_BEG .EQU $ ; HB_MODSTART .EQU $ @@ -8909,8 +8918,6 @@ HB_MODSTART .EQU $ ; - EZ80SYSTMP ; #IF (CPUFAM == CPU_EZ80) -;;;; MEMECHO "EZ80 DRIVERS\n" -;;;ORG_EZ80DRVS .EQU $ #INCLUDE "ez80cpu.asm" #ENDIF ; @@ -8939,7 +8946,6 @@ HB_MODSTART .EQU $ #ENDIF ; #IF (CPUFAM == CPU_EZ80) -;;; MEMECHO "EZ80 DRIVERS\n" #INCLUDE "ez80tmr.asm" #ENDIF ; @@ -9232,10 +9238,12 @@ HB_MODSTART .EQU $ ; TERMINAL MODULES ;-------------------------------------------------------------------------------------------------- ; -; - TERM +; NOTE: TERM MODULE IS ALWAYS INCLUDED!!! CONDITIONALS IN THE TERM +; DRIVER SOURCE DETERMINE THE CODE THAT IS ACTUALLY INCLUDED. ; -; TERM IS ALWAYS INCLUDED -#INCLUDE "term.asm" +#IF (TRUE) + #INCLUDE "term.asm" +#ENDIF ; ;-------------------------------------------------------------------------------------------------- ; DISK / STORAGE MODULES diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index cc9490bb..cb241379 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -59,12 +59,15 @@ ORG_KBD .EQU $ .DW SIZ_KBD ; MODULE SIZE .DW KBD_INITPHASE ; ADR OF INIT PHASE HANDLER ; +; WARNING: KEYBOARD DRIVERS ARE INITIALIZED BY VDA DRIVERS +; AND SHOULD NOT BE INITIALIZED BY INITPHASE CALLS. +; KBD_INITPHASE: ; INIT PHASE HANDLER, A=PHASE - CP HB_PHASE_PREINIT ; PREINIT PHASE? - JP Z,KBD_PREINIT ; DO PREINIT - CP HB_PHASE_INIT ; INIT PHASE? - JP Z,KBD_INIT ; DO INIT + ;CP HB_PHASE_PREINIT ; PREINIT PHASE? + ;JP Z,KBD_PREINIT ; DO PREINIT + ;CP HB_PHASE_INIT ; INIT PHASE? + ;JP Z,KBD_INIT ; DO INIT RET ; DONE ;__________________________________________________________________________________________________ ; DATA diff --git a/Source/HBIOS/mky.asm b/Source/HBIOS/mky.asm index ca336945..7ae5f346 100644 --- a/Source/HBIOS/mky.asm +++ b/Source/HBIOS/mky.asm @@ -165,12 +165,15 @@ ORG_MKY .EQU $ .DW SIZ_MKY ; MODULE SIZE .DW MKY_INITPHASE ; ADR OF INIT PHASE HANDLER ; +; WARNING: KEYBOARD DRIVERS ARE INITIALIZED BY VDA DRIVERS +; AND SHOULD NOT BE INITIALIZED BY INITPHASE CALLS. +; MKY_INITPHASE: ; INIT PHASE HANDLER, A=PHASE ;CP HB_PHASE_PREINIT ; PREINIT PHASE? ;JP Z,MKY_PREINIT ; DO PREINIT - CP HB_PHASE_INIT ; INIT PHASE? - JP Z,MKY_INIT ; DO INIT + ;CP HB_PHASE_INIT ; INIT PHASE? + ;JP Z,MKY_INIT ; DO INIT RET ; DONE SCANCODE_TBL: diff --git a/Source/HBIOS/nabukb.asm b/Source/HBIOS/nabukb.asm index 3b111281..f25e1351 100644 --- a/Source/HBIOS/nabukb.asm +++ b/Source/HBIOS/nabukb.asm @@ -40,12 +40,15 @@ ORG_NABUKB .EQU $ .DW SIZ_NABUKB ; MODULE SIZE .DW NABUKB_INITPHASE ; ADR OF INIT PHASE HANDLER ; +; WARNING: KEYBOARD DRIVERS ARE INITIALIZED BY VDA DRIVERS +; AND SHOULD NOT BE INITIALIZED BY INITPHASE CALLS. +; NABUKB_INITPHASE: ; INIT PHASE HANDLER, A=PHASE ;CP HB_PHASE_PREINIT ; PREINIT PHASE? ;JP Z,NABUKB_PREINIT ; DO PREINIT - CP HB_PHASE_INIT ; INIT PHASE? - JP Z,NABUKB_INIT ; DO INIT + ;CP HB_PHASE_INIT ; INIT PHASE? + ;JP Z,NABUKB_INIT ; DO INIT RET ; DONE ; ; INITIALZIZE THE KEYBOARD CONTROLLER. diff --git a/Source/HBIOS/ppk.asm b/Source/HBIOS/ppk.asm index af370b64..dba1bb0b 100644 --- a/Source/HBIOS/ppk.asm +++ b/Source/HBIOS/ppk.asm @@ -44,12 +44,15 @@ ORG_PPK .EQU $ .DW SIZ_PPK ; MODULE SIZE .DW PPK_INITPHASE ; ADR OF INIT PHASE HANDLER ; +; WARNING: KEYBOARD DRIVERS ARE INITIALIZED BY VDA DRIVERS +; AND SHOULD NOT BE INITIALIZED BY INITPHASE CALLS. +; PPK_INITPHASE: ; INIT PHASE HANDLER, A=PHASE ;CP HB_PHASE_PREINIT ; PREINIT PHASE? ;JP Z,PPK_PREINIT ; DO PREINIT - CP HB_PHASE_INIT ; INIT PHASE? - JP Z,PPK_INIT ; DO INIT + ;CP HB_PHASE_INIT ; INIT PHASE? + ;JP Z,PPK_INIT ; DO INIT RET ; DONE ; ;__________________________________________________________________________________________________ diff --git a/Source/ver.inc b/Source/ver.inc index 611b0b45..dddea178 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 6 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.6.0-dev.50" +#DEFINE BIOSVER "3.6.0-dev.51" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 1229548c..e9329b18 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 6 rup equ 0 rtp equ 0 biosver macro - db "3.6.0-dev.50" + db "3.6.0-dev.51" endm