From 34d25cb906bdb738eb8f131d77e79fc762a0d68a Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 24 Mar 2024 12:19:58 +0800 Subject: [PATCH 1/3] Recovery button support for Duo --- Source/HBIOS/hbios.asm | 17 ++++++++++++++++- Source/HBIOS/std.asm | 4 +++- Source/HBIOS/uart.asm | 8 +++----- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 46d315a7..51eeec24 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1877,6 +1877,17 @@ SAVE_REC_M: LD A,0 ; BIT 6 JR Z,SAVE_REC_M ; IS RECOVERY MODE LD A,1 +SAVE_REC_M: + LD (HB_BOOT_REC),A ; SAVE FOR LATER + #ENDIF + #ENDIF + #IF ((PLATFORM == PLT_DUO) + #IF (BT_REC_TYPE == BT_REC_DUORI) + IN A,($78 + 6) ; UART_MSR MODEM + BIT 6,A ; STATUS REGISTER + LD A,0 ; BIT 6 + JR Z,SAVE_REC_M ; IS RECOVERY MODE + LD A,1 SAVE_REC_M: LD (HB_BOOT_REC),A ; SAVE FOR LATER #ENDIF @@ -3225,7 +3236,7 @@ CALLDUMMY: #IF (BT_REC_TYPE != BT_REC_NONE) ; HB_PCINIT_REC: - #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) + #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC) | (PLATFORM == PLT_DUO)) .DW UART_PREINIT ; .DW CALLDUMMY #ENDIF @@ -3237,6 +3248,10 @@ HB_INIT_REC: .DW MD_INIT .DW PPIDE_INIT #ENDIF + #IF ((PLATFORM == PLT_DUO) + .DW UART_INIT + .DW MD_INIT + #ENDIF HB_INITRLEN .EQU (($ - HB_INIT_REC) / 2) ; #ENDIF diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index de3ac009..6a53acbb 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -21,7 +21,7 @@ ; 17. DUO Andrew Lynch's Duodyne Computer ; 18. HEATH Les Bird's Heath Z80 Board ; 19. EPITX Alan Cox' Mini-ITX System -; 20. MON Jacques Pelletier's Monsputer +; 20. MON Jacques Pelletier's Monsputer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; @@ -87,6 +87,8 @@ BT_REC_FORCE .EQU 1 ; FORCE BOOT RECOVERY MODE BT_REC_SBC01 .EQU 2 ; ECB-SBCV2 - BIT 1 RTC HIGH BT_REC_SBC1B .EQU 3 ; ECB-SBCV2 - 1-BIT IO PORT BT_REC_SBCRI .EQU 4 ; ECB-SBCV2 - 16550 UART RING INDICATOR LINE +BT_REC_DUORI .EQU 5 ; DUO MULTI I/O - TL16C2552FN UART RING INDICATOR LINE + ; BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE ; diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index eef0d133..f0126ead 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -56,19 +56,17 @@ UART_CTSBAD .EQU 4 ; CTS STALL DETECTED ; #IF (PLATFORM == PLT_DUO) UARTSBASE .EQU $58 +UARTDBASE .EQU $70 #ELSE UARTSBASE .EQU $68 +UARTDBASE .EQU $80 #ENDIF +; UARTABASE .EQU $A8 UARTCBASE .EQU $80 UARTMBASE .EQU $18 UART4BASE .EQU $C0 UARTRBASE .EQU $A0 -#IF (PLATFORM == PLT_DUO) -UARTDBASE .EQU $70 -#ELSE -UARTDBASE .EQU $80 -#ENDIF ; #IF (UARTINTS) ; From 842a79ae5d910f0192bfd1524310039b62769698 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 24 Mar 2024 15:36:32 +0800 Subject: [PATCH 2/3] Correct the logical sequence of the Duo Dual UART ports Make the first UART port detected be Channel A $78-$7F : CHSEL=1. ( logic 0 on the CHSEL selects the UART channel B while a logic 1 selects UART channel A. ) --- Source/HBIOS/uart.asm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index f0126ead..c33341d8 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -1163,6 +1163,13 @@ UART_CFG_MFP: ; DUAL UART CHANNEL A .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) .DB 0 ; UART TYPE + .DB UARTDBASE+8 ; IO PORT BASE (RBR, THR) + .DB UARTDBASE+8 + UART_LSR ; LINE STATUS PORT (LSR) + .DW UARTCFG ; LINE CONFIGURATION + .DW 0 ; SHOULD NEVER NEED INT HANDLER + ; DUAL UART CHANNEL B + .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) + .DB 0 ; UART TYPE .DB UARTDBASE ; IO PORT BASE (RBR, THR) .DB UARTDBASE + UART_LSR ; LINE STATUS PORT (LSR) .DW UARTCFG ; LINE CONFIGURATION @@ -1171,14 +1178,6 @@ UART_CFG_MFP: .ECHO "UART: MODE=DUAL, IO=" .ECHO UARTDBASE+0 .ECHO "\n" -; - ; DUAL UART CHANNEL B - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTDBASE+8 ; IO PORT BASE (RBR, THR) - .DB UARTDBASE+8 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER ; .ECHO "UART: MODE=DUAL, IO=" .ECHO UARTDBASE+8 From 7fe03123598a675462d831c1464c7f96f45e5c3e Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 24 Mar 2024 17:53:42 +0800 Subject: [PATCH 3/3] Align assembly outout with data structure --- Source/HBIOS/uart.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index c33341d8..cd8fe8fb 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -1176,11 +1176,11 @@ UART_CFG_MFP: .DW 0 ; SHOULD NEVER NEED INT HANDLER ; .ECHO "UART: MODE=DUAL, IO=" - .ECHO UARTDBASE+0 + .ECHO UARTDBASE+8 .ECHO "\n" ; .ECHO "UART: MODE=DUAL, IO=" - .ECHO UARTDBASE+8 + .ECHO UARTDBASE+0 .ECHO "\n" ; #ENDIF