From 3513b220c0ce7251e24370485d77e6eb1f6a1d77 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 30 May 2025 19:21:10 -0700 Subject: [PATCH] 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. --- Source/HBIOS/Build.cmd | 43 ++++---- Source/HBIOS/Makefile | 32 +++--- Source/HBIOS/hbios.asm | 3 +- Source/HBIOS/layout.inc | 228 +++++++++++++++++++++++++++------------- Source/HBIOS/romldr.asm | 48 +++++---- Source/HBIOS/std.asm | 12 +-- 6 files changed, 224 insertions(+), 142 deletions(-) diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 505aa599..5f86f255 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -17,8 +17,8 @@ set CPMDIR80=%TOOLS%/cpm/ :: :: This PowerShell script validates the build variables passed in. If -:: necessary, the user is prmopted to pick the variables. It then creates -:: an include file that is imbedded in the HBIOS assembly (build.inc). +:: necessary, the user is prompted to pick the variables. It then creates +:: an include file that is embedded in the HBIOS assembly (build.inc). :: It also creates a batch command file that sets environment variables :: for use by the remainder of this batch file (build_env.cmd). :: @@ -97,7 +97,6 @@ call :asm nascom || exit /b call :asm game || exit /b call :asm usrrom || exit /b call :asm updater || exit /b -call :asm imgpad2 || exit /b :: Sysconf builds as both BIN and COM files tasm -t%CPUType% -g3 -fFF -dROMWBW sysconf.asm sysconf.bin sysconf_bin.lst || exit /b @@ -106,30 +105,32 @@ tasm -t%CPUType% -g3 -fFF -dCPM sysconf.asm sysconf.com sysconf_com.lst || exit :: :: Create additional ROM bank images by assembling components into :: 32K chunks which can be concatenated later. Note that -:: osimg_small is a special case because it is 20K in size. This +:: appboot is a special case because it is 20K in size. This :: image is subsequently used to generate the .com loadable file. :: -copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin osimg.bin || exit /b -copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + %NETBOOT% + updater.bin + sysconf.bin + usrrom.bin osimg1.bin || exit /b +copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin rom1.bin || exit /b +copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + %NETBOOT% + updater.bin + sysconf.bin + usrrom.bin rom2.bin || exit /b if %Platform%==S100 ( zxcc slr180 -s100mon/fh zxcc mload25 -s100mon || exit /b - copy /b s100mon.com osimg2.bin || exit /b + copy /b s100mon.com rom3.bin || exit /b ) else ( - copy /b imgpad2.bin osimg2.bin || exit /b + copy nul rom3.bin ) -copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin osimg_small.bin || exit /b +copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin appboot.bin || exit /b :: :: Inject one byte checksum at the last byte of all 4 ROM bank image files. -:: This means that computing a checksum over any of the 32K osimg banks -:: should yield a result of zero. +:: This means that computing a checksum over any of the 32K rom banks +:: should yield a result of zero. Any bank image file that is not +:: 32K will be automatically normalized to 32K by the srec_cat +:: formula (extended or truncated)!!! :: -for %%f in (hbios_rom.bin osimg.bin osimg1.bin osimg2.bin) do ( +for %%f in (hbios_rom.bin rom1.bin rom2.bin rom3.bin) do ( "%TOOLS%\srecord\srec_cat.exe" %%f -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o %%f -Binary || exit /b ) @@ -150,13 +151,13 @@ for %%f in (hbios_rom.bin osimg.bin osimg1.bin osimg2.bin) do ( :: if %ROMSize% gtr 0 ( - copy /b hbios_rom.bin + osimg.bin + osimg1.bin + osimg2.bin + ..\RomDsk\rom%ROMDiskSize%_wbw.dat %ROMName%.rom || exit /b - copy /b hbios_rom.bin + osimg.bin + osimg1.bin + osimg2.bin %ROMName%.upd || exit /b - copy /b hbios_app.bin + osimg_small.bin %ROMName%.com || exit /b + copy /b hbios_rom.bin + rom1.bin + rom2.bin + rom3.bin + ..\RomDsk\rom%ROMDiskSize%_wbw.dat %ROMName%.rom || exit /b + copy /b hbios_rom.bin + rom1.bin + rom2.bin + rom3.bin %ROMName%.upd || exit /b + copy /b hbios_app.bin + appboot.bin %ROMName%.com || exit /b ) else ( - copy /b hbios_rom.bin + osimg.bin + osimg1.bin + osimg2.bin + ..\RomDsk\rom%RAMDiskSize%_wbw.dat %ROMName%.rom || exit /b - copy /b hbios_rom.bin + osimg.bin + osimg1.bin + osimg2.bin %ROMName%.upd || exit /b - copy /b hbios_app.bin + osimg_small.bin %ROMName%.com || exit /b + copy /b hbios_rom.bin + rom1.bin + rom2.bin + rom3.bin + ..\RomDsk\rom%RAMDiskSize%_wbw.dat %ROMName%.rom || exit /b + copy /b hbios_rom.bin + rom1.bin + rom2.bin + rom3.bin %ROMName%.upd || exit /b + copy /b hbios_app.bin + appboot.bin %ROMName%.com || exit /b ) :: @@ -187,14 +188,14 @@ call :asm dbgmon || exit /b call :asm romldr || exit /b :: Create the OS bank -copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_una.bin + ..\cpm22\cpm_una.bin osimg.bin || exit /b +copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_una.bin + ..\cpm22\cpm_una.bin rom2.bin || exit /b :: Copy OS Bank and ROM Disk image files to output -copy /b osimg.bin ..\..\Binary\UNA_WBW_SYS.bin || exit /b +copy /b rom2.bin ..\..\Binary\UNA_WBW_SYS.bin || exit /b copy /b ..\RomDsk\rom%ROMDiskSize%_una.dat ..\..\Binary\UNA_WBW_ROM%ROMDiskSize%.bin || exit /b :: Create the final ROM image -copy /b ..\UBIOS\UNA-BIOS.BIN + osimg.bin + ..\UBIOS\FSFAT.BIN + ..\RomDsk\rom%ROMDiskSize%_una.dat %ROMName%.rom || exit /b +copy /b ..\UBIOS\UNA-BIOS.BIN + rom2.bin + ..\UBIOS\FSFAT.BIN + ..\RomDsk\rom%ROMDiskSize%_una.dat %ROMName%.rom || exit /b :: Copy to output copy %ROMName%.rom ..\..\Binary || exit /b diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index 3e5cb57e..771732d4 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -1,7 +1,7 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \ - dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \ - eastaegg.bin hbios_img.bin osimg.bin game.bin updater.bin usrrom.bin + dbgmon.bin hbios_app.bin imgpad2.bin rom2.bin rom3.bin romldr.bin \ + eastaegg.bin hbios_img.bin rom1.bin game.bin updater.bin usrrom.bin DEST = ../../Binary TOOLS =../../Tools @@ -58,37 +58,37 @@ ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} # $(info TASM=$(TASM)) $(OBJECTS) : $(ROMDEPS) - @cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin - cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin + @cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >rom1.bin + cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >appboot.bin if [ $(ROM_PLATFORM) = DUO ] ; then \ cat netboot-duo.mod >netboot.mod ; \ else \ cat netboot-mt.mod >netboot.mod ; \ fi if [ $(ROM_PLATFORM) != UNA ] ; then \ - cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin sysconf.bin usrrom.bin >osimg1.bin ; \ + cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin sysconf.bin usrrom.bin >rom2.bin ; \ if [ $(ROM_PLATFORM) = S100 ] ; then \ - cat s100mon.bin >osimg2.bin ; \ + cat s100mon.bin >rom3.bin ; \ else \ - cat imgpad2.bin >osimg2.bin ; \ + >rom3.bin ; \ fi ; \ - for f in hbios_rom.bin osimg.bin osimg1.bin osimg2.bin ; do \ + for f in hbios_rom.bin rom1.bin rom2.bin rom3.bin ; do \ srec_cat $$f -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o $$f -Binary ; \ done \ fi if [ $(ROM_PLATFORM) = UNA ] ; then \ - cp osimg.bin $(DEST)/UNA_WBW_SYS.bin ; \ + cp rom1.bin $(DEST)/UNA_WBW_SYS.bin ; \ cp ../RomDsk/rom$(ROMDISKSIZE)_una.dat $(DEST)/UNA_WBW_ROM$(ROMDISKSIZE).bin ; \ - cat ../UBIOS/UNA-BIOS.BIN osimg.bin ../UBIOS/FSFAT.BIN ../RomDsk/rom$(ROMDISKSIZE)_una.dat >$(ROMNAME).rom ; \ + cat ../UBIOS/UNA-BIOS.BIN rom1.bin ../UBIOS/FSFAT.BIN ../RomDsk/rom$(ROMDISKSIZE)_una.dat >$(ROMNAME).rom ; \ else \ if [ $(ROMSIZE) -gt 0 ] ; then \ - cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin ../RomDsk/rom$(ROMDISKSIZE)_wbw.dat >$(ROMNAME).rom ; \ - cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin >$(ROMNAME).upd ; \ - cat hbios_app.bin osimg_small.bin > $(ROMNAME).com ; \ + cat hbios_rom.bin rom1.bin rom2.bin rom3.bin ../RomDsk/rom$(ROMDISKSIZE)_wbw.dat >$(ROMNAME).rom ; \ + cat hbios_rom.bin rom1.bin rom2.bin rom3.bin >$(ROMNAME).upd ; \ + cat hbios_app.bin appboot.bin > $(ROMNAME).com ; \ else \ - cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin ../RomDsk/rom$(RAMDISKSIZE)_wbw.dat >$(ROMNAME).rom ; \ - cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin >$(ROMNAME).upd ; \ - cat hbios_app.bin osimg_small.bin > $(ROMNAME).com ; \ + cat hbios_rom.bin rom1.bin rom2.bin rom3.bin ../RomDsk/rom$(RAMDISKSIZE)_wbw.dat >$(ROMNAME).rom ; \ + cat hbios_rom.bin rom1.bin rom2.bin rom3.bin >$(ROMNAME).upd ; \ + cat hbios_app.bin appboot.bin > $(ROMNAME).com ; \ fi \ fi diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index efaea809..e12fd369 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -522,8 +522,9 @@ HB_HCB_END .EQU $ ; THE FOLLOWING CODE IS RELOCATED TO THE TOP OF MEMORY TO HANDLE INVOCATION DISPATCHING ; HB_PROXY_BEG .EQU $ +HBX_IMG .EQU $ ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK ; - .FILL (HBX_IMG - $) ; FILL TO START OF PROXY IMAGE START +;;; .FILL (HBX_IMG - $) ; FILL TO START OF PROXY IMAGE START .ORG HBX_LOC ; ADJUST FOR RELOCATION ; ; MEMORY LAYOUT: diff --git a/Source/HBIOS/layout.inc b/Source/HBIOS/layout.inc index e2fd12ae..79fdb6d1 100644 --- a/Source/HBIOS/layout.inc +++ b/Source/HBIOS/layout.inc @@ -1,146 +1,224 @@ ; -; The was extracted out of STD.ASM, so can be included -; in BIOS apps that are NOT in HBIOS directory! +;================================================================================================== +; ROMWBW CPU MEMORY AND ROM BANK LAYOUT DEFINITIONS +;================================================================================================== ; -; ============= -; MEMORY LAYOUT -; ============= +; 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. ; -SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY) -HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K -HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE) -CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY) -CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP -BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS -CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER +; 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_IMG .EQU $200 ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK -; -HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS -HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER -HBX_END .EQU MEMTOP ; END OF HBIOS PROXY -HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY -CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS) -CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS -CBIOS_END .EQU HBX_LOC ; END OF CBIOS -CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS +HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE) +HBX_LOC .EQU MEMTOP - HBX_SIZ ; RUNNING LOCATION OF HBIOS PROXY ; -CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) +CPM_LOC .EQU $D000 ; START OF CPM COMPONENTS +CPM_SIZ .EQU HBX_LOC - CPM_LOC ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY) ; -CPM_IMGSIZ .EQU $3000 +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 ; -; ============================= -; ROM BANK 0 (hbios_rom.bin) -; ============================= +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 ; -; See hbios.asm for content of Bank 0 +CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) ; -; ============================= -; ROM BANK 1 LAYOUT (osimg.bin) -; ============================= +; 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 ; -LDR_LOC .EQU $0000 ; ROM LOADER -LDR_SIZ .EQU $1000 -LDR_END .EQU LDR_LOC +LDR_SIZ -LDR_IMGLOC .EQU $0000 +;-------------------------------------------------------------------------------------------------- +; ROM BANK 0 (BID_BOOT) LAYOUT (ROM0.BIN) +;-------------------------------------------------------------------------------------------------- ; -MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM -MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE -MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR -MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ +; SEE HBIOS.ASM FOR CONTENT OF BANK 0 ; -ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ ; ZSDOS / Z-System +;-------------------------------------------------------------------------------------------------- +; ROM BANK 1 (BID_IMG0) LAYOUT (ROM1.BIN) +;-------------------------------------------------------------------------------------------------- ; -CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ ; CP/M 2.2 +BNK_NXTLOC .EQU $0000 ; RESET TO START OF BANK +BNK_CUR .EQU 1 ; THIS IS ROM BANK 1 (BID_IMG0) ; -BNK1_IMGEND .EQU CPM_IMGLOC + CPM_IMGSIZ ; END OF BANK -BNK1_REMAIN .EQU BNKTOP - BNK1_IMGEND ; REMAINING +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 ; -; ============================== -; ROM BANK 2 LAYOUT (osimg1.bin) -; ============================== +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 $0000 - +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 FTH_IMGLOC + FTH_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 BAS_IMGLOC + BAS_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 TBC_IMGLOC + TBC_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 GAM_IMGLOC + GAM_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 EGG_IMGLOC + EGG_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 NET_IMGLOC + NET_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 UPD_IMGLOC + UPD_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 NVR_IMGLOC + NVR_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) +;-------------------------------------------------------------------------------------------------- ; -BNK2_IMGEND .EQU USR_IMGLOC + USR_SIZ ; END OF BANK -BNK2_REMAIN .EQU BNKTOP - BNK2_IMGEND ; REMAINING +BNK_NXTLOC .SET $0000 ; RESET TO START OF BANK +BNK_CUR .SET 3 ; THIS IS ROM BANK 3 (BID_IMG2) ; -; ============================== -; ROM BANK 3 LAYOUT (osimg2.bin) -; ============================== +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 ; -; not defined here, see build files -; optionally contains S100 monitor +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 \tREMAIN \n" + .ECHO "ROM BANK INFO \tLENGTH \tSLACK \n" .ECHO "---------------\t-------\t-------\n" - .ECHO "BANK1 BID_IMG0 \t" \ .ECHO BNK1_IMGEND \ .ECHO "\t" \ .ECHO BNK1_REMAIN \ .ECHO "\n" - .ECHO "BANK2 BID_IMG1 \t" \ .ECHO BNK2_IMGEND \ .ECHO "\t" \ .ECHO BNK2_REMAIN \ .ECHO "\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_IMGEND > BNKTOP) - .ECHO "*** BANK 1 IS TOO BIG!!!\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_IMGEND > BNKTOP) - .ECHO "*** BANK 2 IS TOO BIG!!!\n" +; + #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 - - - - diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 84177edb..12470dbf 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -1553,7 +1553,7 @@ s100mon1: ; Launch S100 Monitor from ROM Bank 3 call ldelay ; wait for UART buf to empty di ; suspend interrupts - ld a,BID_IMG2 ; S100 monitor bank + ld a,HWMON_BNK ; S100 monitor bank ld ix,0 ; execution resumes here jp HB_BNKCALL ; do it ; @@ -2629,31 +2629,32 @@ ra_ent .equ 12 ; ra_tbl: ; -; Name Key Dsky Bank Src Dest Size Entry -; --------- ------- ----- -------- ----- ------- ------- ---------- -ra_ent(str_mon, 'M', KY_CL, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL) -ra_entsiz .equ $ - ra_tbl -#if (BIOS == BIOS_WBW) - #if (PLATFORM == PLT_S100) -ra_ent(str_smon, 'S', $FF, bid_cur , $8000, $8000, $0001, s100mon) - #endif -#endif -ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, CPM_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) -ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) -#if (BIOS == BIOS_WBW) -ra_ent(str_bas, 'B', KY_DE, BID_IMG1, BAS_IMGLOC, BAS_LOC, BAS_SIZ, BAS_LOC) -ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, TBC_IMGLOC, TBC_LOC, TBC_SIZ, TBC_LOC) -ra_ent(str_fth, 'F', KY_EX, BID_IMG1, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LOC) -ra_ent(str_play, 'P', $FF, BID_IMG1, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_LOC) -ra_ent(str_net, 'N', $FF, BID_IMG1, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC) -ra_ent(str_upd, 'X', $FF, BID_IMG1, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC) -ra_ent(str_nvr, 'W'+$80, $FF, BID_IMG1, NVR_IMGLOC, NVR_LOC, NVR_SIZ, NVR_LOC) -ra_ent(str_user, 'U', $FF, BID_IMG1, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC) +; Name Key Dsky Bank Src Dest Size Entry +; --------- ------- ----- -------- ----- ------- ------- ---------- +ra_ent(str_mon, 'M', KY_CL, MON_BNK, MON_IMGLOC, MON_LOC, MON_SIZ, MON_SERIAL) +ra_entsiz .equ $ - ra_tbl +#if (BIOS == BIOS_WBW) + #if (PLATFORM == PLT_S100) +ra_ent(str_smon, 'S', $FF, bid_cur, $8000, $8000, $0001, s100mon) + #endif +#endif +ra_ent(str_cpm22, 'C', KY_BK, CPM22_BNK, CPM22_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) +ra_ent(str_zsys, 'Z', KY_FW, ZSYS_BNK, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) +#if (BIOS == BIOS_WBW) +ra_ent(str_bas, 'B', KY_DE, BAS_BNK, BAS_IMGLOC, BAS_LOC, BAS_SIZ, BAS_LOC) +ra_ent(str_tbas, 'T', KY_EN, TBC_BNK, TBC_IMGLOC, TBC_LOC, TBC_SIZ, TBC_LOC) +ra_ent(str_fth, 'F', KY_EX, FTH_BNK, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LOC) +ra_ent(str_play, 'P', $FF, GAM_BNK, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_LOC) +ra_ent(str_net, 'N', $FF, NET_BNK, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC) +ra_ent(str_upd, 'X', $FF, UPD_BNK, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC) +ra_ent(str_nvr, 'W'+$80, $FF, NVR_BNK, NVR_IMGLOC, NVR_LOC, NVR_SIZ, NVR_LOC) +ra_ent(str_user, 'U', $FF, USR_BNK, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC) #endif #if (DSKYENABLE) -ra_ent(str_dsky, 'Y'+$80, KY_GO, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY) +ra_ent(str_dsky, 'Y'+$80, KY_GO, MON_BNK, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY) #endif -ra_ent(str_egg, 'E'+$80, $FF, BID_IMG1, EGG_IMGLOC, EGG_LOC, EGG_SIZ, EGG_LOC) +ra_ent(str_egg, 'E'+$80, $FF, EGG_BNK, EGG_IMGLOC, EGG_LOC, EGG_SIZ, EGG_LOC) +; .dw 0 ; table terminator ; ra_tbl_app: @@ -2665,6 +2666,7 @@ ra_ent(str_zsys, 'Z', KY_FW, bid_cur, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_EN #if (DSKYENABLE) ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY) #endif +; .dw 0 ; table terminator ; str_mon .db "Monitor",0 diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 87bdd7f9..274f0199 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -881,8 +881,8 @@ ROMD_BNKS .SET 0 ; -- TYPICAL -- BID_BOOT .EQU BID_ROM0 + 0 ; BOOT BANK 0x00 BID_IMG0 .EQU BID_ROM0 + 1 ; ROM LOADER AND FIRST IMAGES BANK 0x01 -BID_IMG1 .EQU BID_ROM0 + 2 ; SECOND IMAGES BANK 0x02 -BID_IMG2 .EQU BID_ROM0 + 3 ; RESERVED 0x03 +BID_IMG1 .EQU BID_ROM0 + 2 ; ROM APPS IMAGES BANK 0x02 +BID_IMG2 .EQU BID_ROM0 + 3 ; ROM UTILITIES IMAGES BANK 0x03 BID_ROMD0 .EQU BID_ROM0 + 4 ; FIRST ROM DRIVE BANK 0x04 BID_BIOS .EQU BID_RAM0 + 0 ; HBIOS BANK 0x80 BID_RAMD0 .EQU BID_RAM0 + 1 ; FIRST RAM DRIVE BANK 0x81 @@ -899,8 +899,8 @@ BID_COM .EQU BID_RAMN - 0 ; COMMON BANK, UPPER 32K 0x8F ; -- TYPICAL -- BID_BOOT .EQU BID_RAM0 + 0 ; BOOT BANK 0x80 BID_IMG0 .EQU BID_RAM0 + 1 ; ROM LOADER AND FIRST IMAGES BANK 0x81 -BID_IMG1 .EQU BID_RAM0 + 2 ; SECOND IMAGES BANK 0x82 -BID_IMG2 .EQU BID_RAM0 + 3 ; RESERVED 0x83 +BID_IMG1 .EQU BID_RAM0 + 2 ; ROM APPS IMAGES BANK 0x82 +BID_IMG2 .EQU BID_RAM0 + 3 ; ROM UTILITIES IMAGES BANK 0x83 BID_RAMD0 .EQU BID_RAM0 + 4 ; FIRST RAM DRIVE BANK 0x84 BID_APP0 .EQU BID_RAMD0 + RAMD_BNKS ; FIRST APP BANK 0x89 BID_BUF .EQU BID_RAMN - 3 ; OS BUFFERS (CP/M3) 0x8C @@ -1093,8 +1093,8 @@ INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B #ENDIF -#DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1 -#DEFINE VEC(INTX) INTX*2 +#DEFINE IVT(INTX) HB_IVT + (INTX * 4) + 1 +#DEFINE VEC(INTX) INTX * 2 ; ; SET DEFAULT CSIO SPEED (INTERNAL CLOCK, SLOW AS POSSIBLE)