Files
RomWBW/Source/HBIOS/layout.inc
Wayne Warthen 3513b220c0 Improve ROM Layout Management, Issue #554
General cleanup and refactoring of the ROM bank layout mechanism in the build scripts.  This will make it easier to add and adjust the components in the ROM banks.

This commit does not yet implement the pending bank layout changes.  Those will be part of the next commit.
2025-05-30 19:21:10 -07:00

225 lines
8.9 KiB
PHP

;
;==================================================================================================
; ROMWBW CPU MEMORY AND ROM BANK LAYOUT DEFINITIONS
;==================================================================================================
;
; THIS FILE DEFINES THE MEMORY LAYOUT OF THE CPU ADDRESS SPACE AND
; THE LAYOUT OF CODE IMAGES IN ROM. THIS FILE IS INTENDED TO BE
; INCLUDED IN SOURCE FILES AS NEEDED TO ADAPT TO THE ROMWBW BUILD
; CONFIGURATION.
;
; THE FIRST 4 BANKS OF ROMWBW ROMS CONTAIN ROMWBW SOFTWARE COMPONENTS.
; THE REMAINING BANKS ARE USED AS ROM DISK CONTENTS.
;
; ROM BANK SUMMARY
; ----------------
;
; ROM BANK BANK ID DESCRIPTION
; -------- -------- ----------------------------------------
; 0 (ROM0) BID_BOOT HBIOS KERNEL (HBIOS.ASM)
; 1 (ROM1) BID_IMG0 MONITOR, BOOT LOADER, ROM OS IMAGES
; 2 (ROM2) BID_IMG1 ROM APPLICATIONS
; 3 (ROM3) BID_IMG2 ROM UTILITIES
;
;--------------------------------------------------------------------------------------------------
; CPU ADDRESS SPACE MEMORY LAYOUT
;--------------------------------------------------------------------------------------------------
;
MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY
BNKTOP .EQU $8000 ; BANK MEMORY BARRIER
;
HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE)
HBX_LOC .EQU MEMTOP - HBX_SIZ ; RUNNING LOCATION OF HBIOS PROXY
;
CPM_LOC .EQU $D000 ; START OF CPM COMPONENTS
CPM_SIZ .EQU HBX_LOC - CPM_LOC ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY)
;
CCP_SIZ .EQU $0800 ; INVARIANT SIZE OF CCP
BDOS_SIZ .EQU $0E00 ; INVARIANT SIZE OF BDOS
CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; REMAINDER IS CBIOS SIZE
;
CBIOS_LOC .EQU HBX_LOC - CBIOS_SIZ ; START OF CBIOS
BDOS_LOC .EQU CBIOS_LOC - BDOS_SIZ ; START OF BDOS
CCP_LOC .EQU BDOS_LOC - CCP_SIZ ; START OF CCP
;
CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS)
;
; THE SIZE OF THE CPM IMAGE STORED ON A ROM BANK IS GREATER THAN THE
; SIZE TO BE LOADED. THE FORMER INCLUDES HBIOS SPACE AND THE LATTER
; DOES NOT. USE CPM_IMGSIZ WHEN REFERRING TO IMAGE SIZE STORED ON ROM.
CPM_IMGSIZ .EQU $3000 ; CPM IMAGE SIZE ON ROM
;
;--------------------------------------------------------------------------------------------------
; ROM BANK 0 (BID_BOOT) LAYOUT (ROM0.BIN)
;--------------------------------------------------------------------------------------------------
;
; SEE HBIOS.ASM FOR CONTENT OF BANK 0
;
;--------------------------------------------------------------------------------------------------
; ROM BANK 1 (BID_IMG0) LAYOUT (ROM1.BIN)
;--------------------------------------------------------------------------------------------------
;
BNK_NXTLOC .EQU $0000 ; RESET TO START OF BANK
BNK_CUR .EQU 1 ; THIS IS ROM BANK 1 (BID_IMG0)
;
LDR_BNK .EQU BNK_CUR
LDR_LOC .EQU $0000 ; RUNNING LOCATION OF BOOT LOADER
LDR_SIZ .EQU $1000 ; SIZE OF BOOT LOADER BINARY IMAGE
LDR_END .EQU LDR_LOC + LDR_SIZ ; ENDING ADDRESS OF RUNNING BOOT LOADER
LDR_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET LDR_IMGLOC + LDR_SIZ ; IMG LOC OF NEXT COMPONENT
;
MON_BNK .EQU BNK_CUR
MON_LOC .EQU $EE00 ; RUNNING LOCATION OF MONITOR
MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE
MON_END .EQU MON_LOC + MON_SIZ ; ENDING ADDRESS OF RUNNING MONITOR
MON_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET MON_IMGLOC + MON_SIZ ; IMG LOC OF NEXT COMPONENT
;
ZSYS_BNK .EQU BNK_CUR
ZSYS_LOC .EQU CPM_LOC ; RUNNING LOCATION OF ZSYSTEM
ZSYS_SIZ .EQU CPM_SIZ ; SIZE OF ZSYSTEM BINARY IMAGE
ZSYS_END .EQU ZSYS_LOC + ZSYS_SIZ ; ENDING ADDRESS OF RUNNING ZSYSTEM
ZSYS_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
ZSYS_IMGSIZ .EQU CPM_IMGSIZ ; SIZE OF LOAD IMAGE IN BANK
BNK_NXTLOC .SET ZSYS_IMGLOC + ZSYS_IMGSIZ ; IMG LOC OF NEXT COMPONENT
;
CPM22_BNK .EQU BNK_CUR
CPM22_LOC .EQU CPM_LOC ; RUNNING LOCATION OF CPM 2.2
CPM22_SIZ .EQU CPM_SIZ ; SIZE OF CPM 2.2 BINARY IMAGE
CPM22_END .EQU CPM22_LOC + CPM22_SIZ ; ENDING ADDRESS OF RUNNING CPM 2.2
CPM22_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
CPM22_IMGSIZ .EQU CPM_IMGSIZ ; SIZE OF LOAD IMAGE IN BANK
BNK_NXTLOC .SET CPM22_IMGLOC + CPM22_IMGSIZ ; IMG LOC OF NEXT COMPONENT
;
BNK1_LEN .EQU BNK_NXTLOC ; SIZE OF BANK CONTENTS
BNK1_SLACK .EQU BNKTOP - BNK_NXTLOC ; REMAINING BANK SPACE
;
;--------------------------------------------------------------------------------------------------
; ROM BANK 2 (BID_IMG1) LAYOUT (ROM2.BIN)
;--------------------------------------------------------------------------------------------------
;
BNK_NXTLOC .SET $0000 ; RESET TO START OF BANK
BNK_CUR .SET 2 ; THIS IS ROM BANK 2 (BID_IMG1)
;
; NOTE FOLLOWING ARE COPY/PASTED INTO camel80.azm !!!!!!!!
FTH_BNK .EQU BNK_CUR
FTH_LOC .EQU $0200 ; CAMEL FORTH
FTH_SIZ .EQU $1700
FTH_END .EQU FTH_LOC + FTH_SIZ
FTH_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET FTH_IMGLOC + FTH_SIZ ; IMG LOC OF NEXT COMPONENT
;
BAS_BNK .EQU BNK_CUR
BAS_LOC .EQU $0200 ; NASCOM BASIC
BAS_SIZ .EQU $2000
BAS_END .EQU BAS_LOC + BAS_SIZ
BAS_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET BAS_IMGLOC + BAS_SIZ ; IMG LOC OF NEXT COMPONENT
;
; NOTE FOLLOWING ARE COPY/PASTED INTO tastybasic.asm !!!!!!!!
TBC_BNK .EQU BNK_CUR
TBC_LOC .EQU $0A00 ; TASTYBASIC
TBC_SIZ .EQU $0A00
TBC_END .EQU TBC_LOC + TBC_SIZ
TBC_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET TBC_IMGLOC + TBC_SIZ ; IMG LOC OF NEXT COMPONENT
;
GAM_BNK .EQU BNK_CUR
GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
GAM_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET GAM_IMGLOC + GAM_SIZ ; IMG LOC OF NEXT COMPONENT
;
EGG_BNK .EQU BNK_CUR
EGG_LOC .EQU $F000 ; EASTER EGG
EGG_SIZ .EQU $0200
EGG_END .EQU EGG_LOC + EGG_SIZ
EGG_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET EGG_IMGLOC + EGG_SIZ ; IMG LOC OF NEXT COMPONENT
;
NET_BNK .EQU BNK_CUR
NET_LOC .EQU $0100 ; NETWORK BOOT
NET_SIZ .EQU $1000
NET_END .EQU NET_LOC + NET_SIZ
NET_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET NET_IMGLOC + NET_SIZ ; IMG LOC OF NEXT COMPONENT
;
UPD_BNK .EQU BNK_CUR
UPD_LOC .EQU $0200 ; ROM UPDATER
UPD_SIZ .EQU $0D00
UPD_END .EQU UPD_LOC + UPD_SIZ
UPD_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET UPD_IMGLOC + UPD_SIZ ; IMG LOC OF NEXT COMPONENT
;
NVR_BNK .EQU BNK_CUR
NVR_LOC .EQU $0100 ; NVRAM CONFIG
NVR_SIZ .EQU $0800
NVR_END .EQU NVR_LOC + NVR_SIZ
NVR_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET NVR_IMGLOC + NVR_SIZ ; IMG LOC OF NEXT COMPONENT
;
USR_BNK .EQU BNK_CUR
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU $0200
USR_END .EQU USR_LOC + USR_SIZ
USR_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET USR_IMGLOC + USR_SIZ ; IMG LOC OF NEXT COMPONENT
;
BNK2_LEN .EQU BNK_NXTLOC ; SIZE OF BANK CONTENTS
BNK2_SLACK .EQU BNKTOP - BNK_NXTLOC ; REMAINING BANK SPACE
;
;--------------------------------------------------------------------------------------------------
; ROM BANK 3 (BID_IMG2) LAYOUT (ROM3.BIN)
;--------------------------------------------------------------------------------------------------
;
BNK_NXTLOC .SET $0000 ; RESET TO START OF BANK
BNK_CUR .SET 3 ; THIS IS ROM BANK 3 (BID_IMG2)
;
HWMON_BNK .EQU BNK_CUR
HWMON_LOC .EQU $E000
HWMON_SIZ .EQU $2000
HWMON_END .EQU HWMON_LOC + HWMON_SIZ
HWMON_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET HWMON_IMGLOC + HWMON_SIZ ; IMG LOC OF NEXT COMPONENT
;
FONTS_BNK .EQU BNK_CUR
;;;FONTS_LOC .EQU $E000
FONTS_SIZ .EQU $2000
;;;FONTS_END .EQU FONTS_LOC + FONTS_SIZ
FONTS_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK
BNK_NXTLOC .SET FONTS_IMGLOC + FONTS_SIZ ; IMG LOC OF NEXT COMPONENT
;
BNK3_LEN .EQU BNK_NXTLOC ; SIZE OF BANK CONTENTS
BNK3_SLACK .EQU BNKTOP - BNK_NXTLOC ; REMAINING BANK SPACE
;
;--------------------------------------------------------------------------------------------------
;
#IFDEF BNKINFO
;
.ECHO "-------------------------------\n"
.ECHO "ROM BANK INFO \tLENGTH \tSLACK \n"
.ECHO "---------------\t-------\t-------\n"
.ECHO "BANK1 BID_IMG0 \t" \ .ECHO BNK1_LEN \ .ECHO "\t" \ .ECHO BNK1_SLACK \ .ECHO "\n"
.ECHO "BANK2 BID_IMG1 \t" \ .ECHO BNK2_LEN \ .ECHO "\t" \ .ECHO BNK2_SLACK \ .ECHO "\n"
.ECHO "BANK3 BID_IMG2 \t" \ .ECHO BNK3_LEN \ .ECHO "\t" \ .ECHO BNK3_SLACK \ .ECHO "\n"
.ECHO "-------------------------------\n"
;
#IF (BNK1_LEN > BNKTOP)
.ECHO "*** ROM BANK 1 IS TOO BIG!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR IF BANK SIZE EXCEEDS SPACE
#ENDIF
;
#IF (BNK2_LEN > BNKTOP)
.ECHO "*** ROM BANK 2 IS TOO BIG!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR IF BANK SIZE EXCEEDS SPACE
#ENDIF
;
#IF (BNK3_LEN > BNKTOP)
.ECHO "*** ROM BANK 3 IS TOO BIG!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR IF BANK SIZE EXCEEDS SPACE
#ENDIF
;
#ENDIF