Browse Source

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.
pull/340/head v3.2.1-rc.3
Wayne Warthen 3 years ago
parent
commit
b5437c56e9
  1. 49
      Source/HBIOS/hbios.asm
  2. 2
      Source/Images/d_zsdos/ReadMe.txt
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

49
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 $

2
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

2
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

2
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

Loading…
Cancel
Save