From b5437c56e906b16cb571b5a7c12cacc6ccc54b33 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Tue, 11 Apr 2023 13:09:22 -0700 Subject: [PATCH] Suppress Serial HFC During Boot If serial hardware flow control is enabled, but not working, then a system will appear dead because it won't send any data to the host computer. This change suppresses hardware flow control during boot just to ensure that boot messages can make it to the serial console. This will only be effective for serial interfaces that support dynamic management of HFC. --- Source/HBIOS/hbios.asm | 49 ++++++++++++++++++++++++++++++-- Source/Images/d_zsdos/ReadMe.txt | 2 +- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index e40a1533..536eda5f 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2274,6 +2274,29 @@ HB_BOOTDLY: LD A,BOOTCON ; GET REQUESTED CONSOLE DEV LD (CB_CONDEV),A ; SAVE IT HB_CONRDY: +; +; MOST SERIAL PORTS ARE CONFIGURED WITH HARDWARE FLOW CONTROL ENABLED. +; IF THERE IS A PROBLEM WITH THE RTS SIGNAL, THEN OUTPUT TO THE CONSOLE +; WILL BE STALLED WHICH CAN LEAD A USER TO THINK THE SYSTEM IS TOTALLY +; DEAD WHEN, IN FACT, IT IS JUST WAITING FOR RTS TO BE ASSERTED. ALSO, +; IF THE USER IS BOOTING TO A CRT DEVICE AND DISCONNECTS THE CONSOLE +; SERIAL PORT, THE SYSTEM WILL WAIT FOR RTS AND NEVER BOOT. SO, HERE +; WE SAVE THE ACTIVE CONSOLE CONFIGURATION, THEN TURN OFF HARDWARE +; FLOW CONTROL. THE ORIGINAL CONFIGURATION WILL BE RESTORED BELOW +; PRIOR TO LAUNCING THE ROM LOADER. +; + ; RETRIEVE THE CONFIG FROM THE CONSOLE PORT + LD B,BF_CIOQUERY ; HBIOS QUERY CIO CONFIG + LD A,(CB_CONDEV) ; GET CONSOLE DEVICE + LD (HB_BOOTCONSAV),A ; SAVE IT FOR LATER + LD C,A ; BOOT CONSOLE TO C + CALL HB_DISPATCH ; INTERNAL HBIOS CALL + LD (HB_CONCFGSAV),DE ; SAVE CONFIG + RES 5,D ; CLEAR RTS BIT + LD B,BF_CIOINIT ; HBIOS CIO INIT + LD A,(CB_CONDEV) ; GET CONSOLE DEVICE + LD C,A ; BOOT CONSOLE TO C + CALL HB_DISPATCH ; INTERNAL HBIOS CALL #IF (WBWDEBUG == USEMIO) ; OUTPUT ANY CACHED DEBUG TEXT LD HL,MIOOUTPTR @@ -2749,11 +2772,30 @@ HB_WDZ: LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE LD (CB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE ; - ; DISPLAY HBIOS BANNER ON NEW CONSOLE - PRTX(STR_BANNER) #ENDIF ; INITSYS3: +; +; RESTORE BOOT CONSOLE CONFIGURATION +; + CALL LDELAY ; ALLOW SERIAL PORT TO FLUSH + LD B,BF_CIOINIT ; HBIOS CIO INIT + LD A,(HB_BOOTCONSAV) ; ORIGINAL BOOT CONSOLE DEVICE + LD C,A ; BOOT CONSOLE TO C + LD DE,(HB_CONCFGSAV) ; SAVED ORIGINAL CONSOLE CFG + CALL HB_DISPATCH ; INTERNAL HBIOS CALL +; + LD A,(HB_BOOTCONSAV) ; GET ORIGINAL BOOT CONSOLE DEV + LD C,A ; PUT IN C + LD A,(CB_CONDEV) ; GET ACTIVE CONSOLE DEVICE + CP C ; COMPARE + JR Z,INITSYS3A ; SKIP AHEAD IF NO CHANGE +; + ; DISPLAY HBIOS BANNER ON NEW CONSOLE IF WE SWITCHED TO NEW + ; CONSOLE DEVICE + PRTX(STR_BANNER) ; DISPLAY HBIOS BANNER +; +INITSYS3A: CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE ; #IF 0 @@ -7269,6 +7311,9 @@ HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) ; +HB_BOOTCONSAV .DB 0 ; INITIAL BOOT CONSOLE SAVE AREA +HB_CONCFGSAV .DW 0 ; CONSOLE CONFIG SAVE AREA +; HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER ; HB_END .EQU $ diff --git a/Source/Images/d_zsdos/ReadMe.txt b/Source/Images/d_zsdos/ReadMe.txt index f14d7c3b..9d19b002 100644 --- a/Source/Images/d_zsdos/ReadMe.txt +++ b/Source/Images/d_zsdos/ReadMe.txt @@ -45,7 +45,7 @@ an equate. Version 1.2 was never distributed and contains only a few minor fixes. Unfortunately, the use of v1.2 would make it incompatible with many support modules and overlays due to their reliance on hard-coded address assumptions. This is probably why it was never -distributed. I encountered this myself with the date stamping code –- +distributed. I encountered this myself with the date stamping code -- it won't work with v1.2 because it does a version check. For now, I have chosen to use v1.1 to maximize compatibility (seems to be what everyone is doing). Ultimately, I may go back and try to rebuild everything in diff --git a/Source/ver.inc b/Source/ver.inc index 9116b4a7..2898a7f8 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 2 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.2.1-rc.2" +#DEFINE BIOSVER "3.2.1-rc.3" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 394a574e..3b1b8da8 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 2 rup equ 1 rtp equ 0 biosver macro - db "3.2.1-rc.2" + db "3.2.1-rc.3" endm