From affc47efc2af91733495de9ed5b80d82d2cabe14 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 11 Oct 2025 15:10:58 -0700 Subject: [PATCH] Support DLP Connection on S100 Serial I/O --- Doc/ChangeLog.txt | 1 + Source/HBIOS/Config/SZ80_std.asm | 8 ++++++++ Source/HBIOS/hbios.asm | 8 +++++++- Source/HBIOS/sser.asm | 33 ++++++++++++++++++++++++++++++++ Source/ver.inc | 2 +- Source/ver.lib | 2 +- 6 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index ea905135..c4932518 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -32,6 +32,7 @@ Version 3.6 - HJB: Update PPIDE driver, add support for MSX BEER IDE interface - HJB: Added loader for MSX - HJB: Added IDE driver master media detect option +- WBW: Add support for S100 Serial I/O DLP Serial connection Version 3.5.1 ------------- diff --git a/Source/HBIOS/Config/SZ80_std.asm b/Source/HBIOS/Config/SZ80_std.asm index 75582dc1..26685630 100644 --- a/Source/HBIOS/Config/SZ80_std.asm +++ b/Source/HBIOS/Config/SZ80_std.asm @@ -56,6 +56,14 @@ MEMMGR .SET MM_SZ80 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON|EZ51 FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .SET $05 ; FP: PORT ADDRESS FOR FP LEDS ; +SSERENABLE .SET TRUE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERSTATUS .SET $AA ; SSER: STATUS PORT +SSERDATA .SET $AC ; SSER: DATA PORT +SSERIRDY .SET %10000000 ; SSER: INPUT READY BIT MASK +SSERIINV .SET TRUE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %01000000 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET TRUE ; SSER: OUTPUT READY BIT INVERTED +; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) ; ESPSDENABLE .SET TRUE ; ESPSD: ENABLE S100 ESP32 SD DISK DRIVER (ESPSD.ASM) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 83f50676..45f58ec4 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -188,7 +188,7 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT ; MBC: LED Port=0x70, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) ; RPH? ; DUO: LED Port=0x94, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) -; S100: LED Port = $0E, bit 2, inverted, dedicated port (LEDMODE_SC) +; S100 Z180 SBC: LED Port = $0E, bit 2, inverted, dedicated port (LEDMODE_SC) ; NABU: LED Port = $00, bits 5-3, normal, shared w/ control port (LEDMODE_NABU) ; #IF (LEDENABLE) @@ -3702,6 +3702,12 @@ HB_WDZ: AND %00000001 ; ISOLATE CONSOLE BIT JR NZ,INITSYS3 ; NOT SET, BYPASS CONSOLE SWITCH #ENDIF +; + #IF ((PLATFORM == PLT_SZ80) & (MEMMGR == MM_SZ80)) + IN A,($EF) ; GET IO BYTE + AND %00100000 ; ISOLATE CONSOLE BIT + JR Z,INITSYS3 ; IF ZERO, BYPASS CONSOLE SWITCH + #ENDIF ; #IF ((PLATFORM == PLT_SZ80) & (MEMMGR == MM_Z2)) ; IOBYTE: XXXXXVVC diff --git a/Source/HBIOS/sser.asm b/Source/HBIOS/sser.asm index 726b83e7..93d8669c 100644 --- a/Source/HBIOS/sser.asm +++ b/Source/HBIOS/sser.asm @@ -13,6 +13,15 @@ ; SSER_PREINIT: ; +; TEST FOR PRESENCE +; + XOR A ; CLEAR ACCUM + LD (SSER_PRESENT),A ; PRESET TO NOT PRESENT + CALL SSER_DETECT ; CHECK FOR HARDWARE, Z=PRESENT + RET NZ ; ABORT IF NOT PRESENT + OR $FF ; PRESENT FLAG + LD (SSER_PRESENT),A ; STORE IT +; ; ADD OURSELVES TO CIO DISPATCH TABLE ; LD D,0 ; PHYSICAL UNIT IS ZERO @@ -26,6 +35,9 @@ SSER_PREINIT: ; ; SSER_INIT: + LD A,(SSER_PRESENT) ; PRESENT FLAG + OR A ; SET FLAGS + RET Z ; ABORT IF NOT PRESENT CALL NEWLINE PRTS("SSER:$") PRTS(" IO=0x$") ; FORMATTING @@ -114,3 +126,24 @@ SSER_DEVICE: LD L,SSERSTATUS ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET +; +; TEST FOR HARDWARE PRESENCE BY CHECKING THE STATUS PORT. IF IT IS +; $FF, WE ASSUME NOT PRESENT. THEN READ PORT A DIFFERENT WAY. IF +; PRESENT PORT SHOULD HAVE SAME VALUE. +; +; +SSER_DETECT: + IN A,(SSERSTATUS) ; GET DATA PORT VALUE DIRECTLY + CP $FF ; CHECK FOR $FF + JR NZ,SSER_DETECT1 ; IF NOT $FF, MAY BE ACTIVE, CONTINUE + OR A ; SWITCH ZF BACK TO NZ + RET ; DONE +SSER_DETECT1: + LD C,SSERSTATUS ; PORT ADR TO C + IN B,(C) ; GET DATA PORT VALUE VIA (C) + CP B ; COMPARE, EQUAL IMPLIES ACTIVE PORT + RET +; +; +; +SSER_PRESENT .DB 0 ; FLAG FOR HARDWARE PRESENT \ No newline at end of file diff --git a/Source/ver.inc b/Source/ver.inc index 8926ee02..2a8d9914 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 6 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.6.0-dev.32" +#DEFINE BIOSVER "3.6.0-dev.33" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 306eaa19..3502ac45 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 6 rup equ 0 rtp equ 0 biosver macro - db "3.6.0-dev.32" + db "3.6.0-dev.33" endm