From 68f00df56df8ba95322c8147ce8029a16ebf80c3 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 23 Oct 2021 23:07:47 +0800 Subject: [PATCH] Sanity check fro conflicting port settings Hi Wayne, is this something you would be interested in? If so I will continue populating E.g. DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .SET $68 ; DMA: DMA BASE ADDRESS DMAMODE .SET DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC ..... SYSTEM TIMER: NONE HBIOS INT STACK space: 54 bytes. HBIOS TEMP STACK space: 20 bytes. DSRTC occupies 697 bytes. UART occupies 791 bytes. VDU occupies 908 bytes. DMA occupies 303 bytes. FONTS occupy 0 bytes. PPK occupies 1192 bytes. MD occupies 5545 bytes. FD occupies 2381 bytes. RF occupies 378 bytes. PPIDE occupies 1703 bytes. TERM occupies 2078 bytes. SPK occupies 714 bytes. RTCDEF=40 WARNING : DEVICE PORT CONFLICT : UARTSBC 104-111:104-105 --- Source/HBIOS/conflict.inc | 188 ++++++++++++++++++++++++++++++++++++++ Source/HBIOS/hbios.asm | 6 ++ Source/HBIOS/md.asm | 8 +- 3 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 Source/HBIOS/conflict.inc diff --git a/Source/HBIOS/conflict.inc b/Source/HBIOS/conflict.inc new file mode 100644 index 00000000..c17802e1 --- /dev/null +++ b/Source/HBIOS/conflict.inc @@ -0,0 +1,188 @@ +; +; CONFLICT.INC - CHECK TO SEE IF THERE ARE ANY CONFLICTS BETWEEN PORT ASSIGNMENTS +; +;+------------------------------------------------------+ +;| DEVICE | ENABLER | BASE | RANGE | +;+------------------------------------------------------+ +;| KIO | KIOENABLE | KIOBASE | 16 | +:| CTC | CTCENABLE | CTCBASE | 2 | +;| AY38910 | AY38910ENABLE | AY_RSEL | 4 | +;| SN76489 | SN76489ENABLE | SN76489_PORT_L | 1 | +;| SN76489 | SN76489ENABLE | SN76489_PORT_R | 1 | +;| SPK | SPKENABLE | DSRTC_IO | 1 | +;| ASCI | ASCIENABLE | ASCIBASE | 4 | +;| Z2U | Z2U_ENABLE | Z2U0BASE | 4 | +;| UART | UARTSBC | UARTSBASE | 8 | +;| UART | UARTCAS | UARTCBASE | 8 | +;| UART | UARTMFP | UARTMBASE | 8 | +;| UART | UART4 | UART4BASE | 32 | +;| UART | UARTRC | UARTRBASE | 16 | +;| DUART | DUARTENABLE | DUART0BASE | 16 | +;| DMA | DMAENABLE | DMABASE | 2 | +;| | | | | +;| | | | | +;| | | | | +;| | | | | +;| | | | | +;+------------------------------------------------------+ +; +; N1 = DEVICE BEING CHECKED +; E1 = DEVICE ENABLE EQUATE +; B1 = DEVICE BASE ADDRESS +; R1 = DEVICE ADDRESS RANGE +; E2 = DEVICE ENABLE EQUATE TO CHECK AGAINST +; B2 = DEVICE BASE ADDRESS TO CHECK AGAINST +; R2 = DEVICE ADDRESS RANGE TO CHECK AGAINST +; +#DEFINE CHKPRT(N1,E1,B1,R1,E2,B2,R2) \ +#DEFCONT \ #IF (E1 & E2) +#DEFCONT \ #IF (((B1 > B2+R2-1) & (B1+R1-1 < B2+R2-1) | ((B1>=B2) & (B1<=(B2+R2-1)))) +#DEFCONT \ .ECHO "WARNING : DEVICE PORT CONFLICT : " +#DEFCONT \ .ECHO N1 +#DEFCONT \ .ECHO " " +#DEFCONT \ .ECHO B1 +#DEFCONT \ .ECHO "-" +#DEFCONT \ .ECHO (B1+R1-1) +#DEFCONT \ .ECHO ":" +#DEFCONT \ .ECHO B2 +#DEFCONT \ .ECHO "-" +#DEFCONT \ .ECHO (B2+R2-1) +#DEFCONT \ .ECHO "\n" +#DEFCONT \ #ENDIF +#DEFCONT \ #ENDIF +; +; CHECK KIO PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("KIO",KIOENABLE,KIOBASE,16,KIOENABLE,KIOBASE,16) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,CTCENABLE,CTCBASE,2) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,AY38910ENABLE,AY_RSEL,4) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,SPKENABLE,DSRTC_IO,1) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,ASCIENABLE,ASCIBASE,4) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,Z2UENABLE,Z2U0BASE,4) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,UARTSBC,UARTSBASE,4) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,UARTCAS,UARTCBASE,8) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,UARTMFP,UARTMBASE,8) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,UART4,UART4BASE,32) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,UARTRC,UARTRBASE,16) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,DUARTENABLE,DUARTBASE,16) +CHKPRT("KIO",KIOENABLE,KIOBASE,16,DMAENABLE,DMABASE,2) +; +; CHECK CTC PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("CTC",CTCENABLE,CTCBASE,2,KIOENABLE,KIOBASE,16) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,CTCENABLE,CTCBASE,2) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,AY38910ENABLE,AY_RSEL,4) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,SPKENABLE,DSRTC_IO,1) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,ASCIENABLE,ASCIBASE,4) +CHKPRT("CTC",CTCENABLE,CTCBASE,2,Z2UENABLE,Z2U0BASE,4) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,UARTSBC,UARTSBASE,4) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,UARTCAS,UARTCBASE,8) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,UARTMFP,UARTMBASE,8) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,UART4,UART4BASE,32) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,UARTRC,UARTRBASE,16) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,DUARTENABLE,DUARTBASE,16) +CHKPRT("CTC",CTCBASE,2,CTCENABLE,DMAENABLE,DMABASE,2) +; +; CHECK AY38910 PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,KIOENABLE,KIOBASE,16) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,CTCENABLE,CTCBASE,2) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,AY38910ENABLE,AY_RSEL,4) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,SPKENABLE,DSRTC_IO,1) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,ASCIENABLE,ASCIBASE,4) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,Z2UENABLE,Z2U0BASE,4) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,UARTSBC,UARTSBASE,4) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,UARTCAS,UARTCBASE,8) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,UARTMFP,UARTMBASE,8) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,UART4,UART4BASE,32) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,UARTRC,UARTRBASE,16) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,DUARTENABLE,DUARTBASE,16) +CHKPRT("AY38910",AY38910ENABLE,AY_RSEL,4,DMAENABLE,DMABASE,2) +; +; CHECK SN76489 PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,KIOENABLE,KIOBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,CTCENABLE,CTCBASE,2) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,AY38910ENABLE,AY_RSEL,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,SPKENABLE,DSRTC_IO,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,ASCIENABLE,ASCIBASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,Z2UENABLE,Z2U0BASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,UARTSBC,UARTSBASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,UARTCAS,UARTCBASE,8) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,UARTMFP,UARTMBASE,8) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,UART4,UART4BASE,32) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,UARTRC,UARTRBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,DUARTENABLE,DUARTBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_L,1,DMAENABLE,DMABASE,2) +; +; CHECK SN76489 PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,KIOENABLE,KIOBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,CTCENABLE,CTCBASE,2) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,AY38910ENABLE,AY_RSEL,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,SPKENABLE,DSRTC_IO,1) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,ASCIENABLE,ASCIBASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,Z2UENABLE,Z2U0BASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,UARTSBC,UARTSBASE,4) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,UARTCAS,UARTCBASE,8) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,UARTMFP,UARTMBASE,8) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,UART4,UART4BASE,32) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,UARTRC,UARTRBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,DUARTENABLE,DUARTBASE,16) +CHKPRT("SN76489",SN76489ENABLE,SN76489_PORT_R,1,DMAENABLE,DMABASE,2) +; +; CHECK ASCI PORT RANGE AGAINST OTHER DEVICES +; +;... +; +; CHECK Z2U PORT RANGE AGAINST OTHER DEVICES +; +; ... +; +; CHECK UARTSBC PORT RANGE AGAINST OTHER DEVICES +; +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,KIOENABLE,KIOBASE,16) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,CTCENABLE,CTCBASE,2) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,AY38910ENABLE,AY_RSEL,4) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,SN76489ENABLE,SN76489_PORT_L,1) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,SN76489ENABLE,SN76489_PORT_R,1) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,SPKENABLE,DSRTC_IO,1) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,ASCIENABLE,ASCIBASE,4) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,Z2UENABLE,Z2U0BASE,4) +;CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,UARTSBC,UARTSBASE,8) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,UARTCAS,UARTCBASE,8) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,UARTMFP,UARTMBASE,8) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,UART4,UART4BASE,32) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,UARTRC,UARTRBASE,16) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,DUARTENABLE,DUARTBASE,16) +CHKPRT("UARTSBC",UARTSBC,UARTSBASE,8,DMAENABLE,DMABASE,2) +; +; CHECK UARTMFP PORT RANGE AGAINST OTHER DEVICES +; +; ... +; +; CHECK UART4 PORT RANGE AGAINST OTHER DEVICES +; +; ... +; +; CHECK UARTRC PORT RANGE AGAINST OTHER DEVICES +; +; ... +; +; CHECK DUART PORT RANGE AGAINST OTHER DEVICES +; +; +; CHECK DMA PORT RANGE AGAINST OTHER DEVICES +; +; ... +; \ No newline at end of file diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 924b3f0d..4cdaaa3d 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -5233,6 +5233,12 @@ SIZ_AY38910 .EQU $ - ORG_AY38910 #ENDIF #ENDIF ; +; CHECK FOR CONFLICTING PORTS +; +#IF (1) +#INCLUDE "conflict.inc" +#ENDIF +; ; INCLUDE LZSA2 decompression engine if required. ; #IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USELZSA2) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 10e08d07..f96a782c 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -376,7 +376,7 @@ MD_SECM: ADD HL,DE ; WANT TO COPY LD DE,(MD_DSKBUF) ; -#IF (DMAENABLE & (DMAMODE!DMAMODE_NONE)) +#IF (DMAENABLE & (DMAMODE!=DMAMODE_NONE)) #IF (DMA_FBACK) LD A,(DMA_FAIL_FLAG) OR A @@ -386,7 +386,7 @@ MD_SECM: JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER #ENDIF MD_NODMA: -#IF (!(DMAENABLE & (DMAMODE!DMAMODE_NONE))) +#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE))) LD BC,512 ; COPY ONE 512B SECTOR FROM THE LDIR ; 4K SECTOR TO THE DISK BUFFER XOR A @@ -510,7 +510,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER EX DE,HL ; LD HL,(MD_DSKBUF) -#IF (DMAENABLE & (DMAMODE!DMAMODE_NONE)) +#IF (DMAENABLE & (DMAMODE!=DMAMODE_NONE)) #IF (DMA_FBACK) LD A,(DMA_FAIL_FLAG) OR A @@ -522,7 +522,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER JR MD_NODMAERR #ENDIF MD_NODMA1: -#IF (!(DMAENABLE & (DMAMODE!DMAMODE_NONE))) +#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE))) LD BC,512 ; COPY ONE 512B SECTOR FROM THE LDIR #ELSE