Browse Source

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
pull/256/head
b1ackmai1er 4 years ago
parent
commit
68f00df56d
  1. 188
      Source/HBIOS/conflict.inc
  2. 6
      Source/HBIOS/hbios.asm
  3. 8
      Source/HBIOS/md.asm

188
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
;
; ...
;

6
Source/HBIOS/hbios.asm

@ -5233,6 +5233,12 @@ SIZ_AY38910 .EQU $ - ORG_AY38910
#ENDIF #ENDIF
#ENDIF #ENDIF
; ;
; CHECK FOR CONFLICTING PORTS
;
#IF (1)
#INCLUDE "conflict.inc"
#ENDIF
;
; INCLUDE LZSA2 decompression engine if required. ; INCLUDE LZSA2 decompression engine if required.
; ;
#IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USELZSA2) #IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USELZSA2)

8
Source/HBIOS/md.asm

@ -376,7 +376,7 @@ MD_SECM:
ADD HL,DE ; WANT TO COPY ADD HL,DE ; WANT TO COPY
LD DE,(MD_DSKBUF) LD DE,(MD_DSKBUF)
; ;
#IF (DMAENABLE & (DMAMODE!DMAMODE_NONE))
#IF (DMAENABLE & (DMAMODE!=DMAMODE_NONE))
#IF (DMA_FBACK) #IF (DMA_FBACK)
LD A,(DMA_FAIL_FLAG) LD A,(DMA_FAIL_FLAG)
OR A OR A
@ -386,7 +386,7 @@ MD_SECM:
JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER
#ENDIF #ENDIF
MD_NODMA: MD_NODMA:
#IF (!(DMAENABLE & (DMAMODE!DMAMODE_NONE)))
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE)))
LD BC,512 ; COPY ONE 512B SECTOR FROM THE LD BC,512 ; COPY ONE 512B SECTOR FROM THE
LDIR ; 4K SECTOR TO THE DISK BUFFER LDIR ; 4K SECTOR TO THE DISK BUFFER
XOR A XOR A
@ -510,7 +510,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
EX DE,HL EX DE,HL
; ;
LD HL,(MD_DSKBUF) LD HL,(MD_DSKBUF)
#IF (DMAENABLE & (DMAMODE!DMAMODE_NONE))
#IF (DMAENABLE & (DMAMODE!=DMAMODE_NONE))
#IF (DMA_FBACK) #IF (DMA_FBACK)
LD A,(DMA_FAIL_FLAG) LD A,(DMA_FAIL_FLAG)
OR A OR A
@ -522,7 +522,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
JR MD_NODMAERR JR MD_NODMAERR
#ENDIF #ENDIF
MD_NODMA1: MD_NODMA1:
#IF (!(DMAENABLE & (DMAMODE!DMAMODE_NONE)))
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE)))
LD BC,512 ; COPY ONE 512B SECTOR FROM THE LD BC,512 ; COPY ONE 512B SECTOR FROM THE
LDIR LDIR
#ELSE #ELSE

Loading…
Cancel
Save