From 5118ab8d0a872ea59033a5e7037aa6c1d7106ba5 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Tue, 29 Apr 2025 13:55:35 -0700 Subject: [PATCH] Hardware Probing Conflicts, Issue #536 Mitigate issue where a hardware probe can corrupt the programming of a previously discovered device. --- Source/HBIOS/hbios.asm | 61 +++++++++++++++++++++++++++--------------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 61819807..07ff95d8 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2950,6 +2950,46 @@ NXTMIO: LD A,(HL) #ENDIF ; ;-------------------------------------------------------------------------------------------------- +; ENABLE INTERRUPTS +;-------------------------------------------------------------------------------------------------- +; +#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 +; +; PERFORM A RESET OPERATION ON ALL CHARACTER DEVICES THAT HAVE BEEN +; INSTALLED. THIS SHOULD CORRECT ANY PROBLEMS IF A PROBE DESTROYED +; THE PROGRAMMING OF ANOTHER DEVICE. +; + LD A,(CIO_CNT) ; NUMBER OF CHARACTER DEVICES + OR A ; CHECK FOR ZERO TO AVOID CRASHING + JR Z,HB_CHRES_Z ; BYPASS IF NONE + LD B,A ; SETUP LOOP COUNTER + LD C,0 ; DEVICE INDEX +HB_CHRES: + PUSH BC ; SAVE LOOP CONTROL + LD B,BF_CIOINIT ; HBIOS RESET FUNCTION + LD DE,$FFFF ; NO CONFIG CHANGES + CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY + POP BC ; RECOVER LOOP CONTROL + INC C ; NEXT DEVICE + DJNZ HB_CHRES ; LOOP AS NEEDED +HB_CHRES_Z: +; +;-------------------------------------------------------------------------------------------------- ; ANNOUNCE HBIOS ;-------------------------------------------------------------------------------------------------- ; @@ -3053,27 +3093,6 @@ HB_SPDTST: #ENDIF ; ;-------------------------------------------------------------------------------------------------- -; ENABLE INTERRUPTS -;-------------------------------------------------------------------------------------------------- -; -#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 -; -;-------------------------------------------------------------------------------------------------- ; DISPLAY PLATFORM INFORMATION ;-------------------------------------------------------------------------------------------------- ; diff --git a/Source/ver.inc b/Source/ver.inc index b0c7eb1d..cf624b55 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.1-rc.1" +#DEFINE BIOSVER "3.5.1-rc.2" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index cb2d935c..2276c581 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 1 rtp equ 0 biosver macro - db "3.5.1-rc.1" + db "3.5.1-rc.2" endm