From 2ffd248eb5fba05de7690d785d943c91b01a1a36 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sun, 25 May 2025 14:42:06 -0700 Subject: [PATCH] LPT Driver Boot Messages, Issue #555 LPT driver will now display hardware that is not detected. Thanks and credit to @robbbates. --- Doc/ChangeLog.txt | 2 ++ Source/HBIOS/lpt.asm | 46 ++++++++++++++++++-------------------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index cf1bdd7b..dfec5a68 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -2,6 +2,8 @@ Version 3.6 ----------- - MGG: Added COBOL language disk image - WDC: Added config options to PCF driver +- WBW: Enabled dynamic CPU speed update on LCD screen +- WBW: Improve LPT driver boot messaging when not detected (per Robb Bates) Version 3.5.1 ------------- diff --git a/Source/HBIOS/lpt.asm b/Source/HBIOS/lpt.asm index 0445b269..c8e57d11 100644 --- a/Source/HBIOS/lpt.asm +++ b/Source/HBIOS/lpt.asm @@ -95,10 +95,18 @@ LPT_INIT: LD IY,LPT_CFG ; POINT TO START OF CFG TABLE LPT_INIT0: PUSH BC ; SAVE LOOP CONTROL + CALL LPT_PRTCFG ; PRINT CONFIG CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE POP BC ; RESTORE LOOP CONTROL ; - LD A,(IY+1) ; GET THE LPT TYPE DETECTED + JR Z,LPT_INIT1 ; IF DETECTED, CONTINUE INIT + CALL PC_SPACE ; FORMATTING + LD DE,LPT_STR_NOLPT ; NO LPT MESSAGE + CALL WRITESTR ; DISPLAY IT + JR LPT_INIT2 ; AND LOOP AS NEEDED +; +LPT_INIT1: + LD A,(IY+1) ; GET THE LPT TYPE OR A ; SET FLAGS JR Z,LPT_INIT2 ; SKIP IT IF NOTHING FOUND ; @@ -107,7 +115,6 @@ LPT_INIT0: POP DE ; ... TO DE LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE - CALL LPT_PRTCFG ; PRINT IF NOT ZERO POP BC ; RESTORE LOOP CONTROL ; LPT_INIT2: @@ -123,9 +130,7 @@ LPT_INIT3: ; LPT_INITUNIT: CALL LPT_DETECT ; DETERMINE LPT TYPE - LD (IY+1),A ; SAVE IN CONFIG TABLE - OR A ; SET FLAGS - RET Z ; ABORT IF NOTHING THERE + RET NZ ; ABORT IF NOTHING THERE ; ; UPDATE WORKING LPT DEVICE NUM LD HL,LPT_DEV ; POINT TO CURRENT DEVICE NUM @@ -326,15 +331,7 @@ LPT_DETECT: ; LPT_DETECT: LD C,(IY+3) ; BASE PORT ADDRESS - CALL LPT_DETECT2 ; CHECK IT - JR Z,LPT_DETECT1 ; FOUND IT, RECORD IT - LD A,LPTMODE_NONE ; NOTHING FOUND - RET ; DONE -; -LPT_DETECT1: - ; LPT FOUND, RECORD IT - LD A,LPTMODE_SPP ; RETURN CHIP TYPE - RET ; DONE + JR LPT_DETECT2 ; CHECK IT ; LPT_DETECT2: ; LOOK FOR LPT AT BASE PORT ADDRESS IN C @@ -394,20 +391,13 @@ LPT_DETECT: CALL PRTHEXBYTE #ENDIF CP $A5 ; CHECK FOR TEST VALUE - JR Z,LPT_DETECT1 ; FOUND IT - LD A,LPTMODE_NONE ; NOT FOUND - RET -; -LPT_DETECT1: - ; LPT FOUND, RECORD IT - LD A,LPTMODE_MG014 ; RETURN CHIP TYPE - RET ; DONE + RET ; ZF SET IF DETECTED #ENDIF ; #IF (LPTMODE == LPTMODE_S100) LPT_DETECT: ; PORT ALWAYS EXISTS ON FPGA - LD A,LPTMODE_S100 ; RETURN CHIP TYPE + XOR A ; SIGNAL SUCCESS RET ; DONE #ENDIF ; @@ -417,7 +407,7 @@ LPT_PRTCFG: ; ANNOUNCE PORT CALL NEWLINE ; FORMATTING PRTS("LPT$") ; FORMATTING - LD A,(IY) ; DEVICE NUM + LD A,(IY+2) ; DEVICE NUM CALL PRTDECB ; PRINT DEVICE NUM PRTS(": IO=0x$") ; FORMATTING LD A,(IY+3) ; GET BASE PORT @@ -452,11 +442,13 @@ LPT_TYPE_MAP: .DW LPT_STR_MG014 .DW LPT_STR_S100 ; -LPT_STR_NONE .DB "$" +LPT_STR_NONE .DB "???$" LPT_STR_SPP .DB "SPP$" LPT_STR_MG014 .DB "MG014$" LPT_STR_S100 .DB "S100$" ; +LPT_STR_NOLPT .DB "NOT PRESENT$" +; ; WORKING VARIABLES ; LPT_DEV .DB 0 ; DEVICE NUM USED DURING INIT @@ -468,7 +460,7 @@ LPT_CFG: LPT0_CFG: ; LPT MODULE A CONFIG .DB 0 ; DEVICE NUMBER (SET DURING INIT) - .DB 0 ; LPT TYPE (SET DURING INIT) + .DB LPTMODE ; LPT MODE .DB 0 ; MODULE ID .DB LPT0BASE ; BASE PORT .DW 0 ; LINE CONFIGURATION @@ -494,7 +486,7 @@ LPT_CFGSIZ .EQU $ - LPT_CFG ; SIZE OF ONE CFG TABLE ENTRY LPT1_CFG: ; LPT MODULE B CONFIG .DB 0 ; DEVICE NUMBER (SET DURING INIT) - .DB 0 ; LPT TYPE (SET DURING INIT) + .DB LPTMODE ; LPT MODE .DB 1 ; MODULE ID .DB LPT1BASE ; BASE PORT .DW 0 ; LINE CONFIGURATION