From 70742d5083c5c45a07ff88afee761e25a9bbb8e3 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 23 Jun 2025 15:36:48 -0700 Subject: [PATCH] Fonts in ROM Beginning multi-step process to migrate font data to ROM. --- Source/HBIOS/Build.cmd | 25 +++++----- Source/HBIOS/Makefile | 33 +++++++------ Source/HBIOS/hwmon.asm | 30 ++++++++++++ Source/HBIOS/layout.inc | 2 +- Source/HBIOS/romfonts.asm | 97 +++++++++++++++++++++++++++++++++++++++ Source/HBIOS/std.asm | 9 ++-- 6 files changed, 164 insertions(+), 32 deletions(-) create mode 100644 Source/HBIOS/hwmon.asm create mode 100644 Source/HBIOS/romfonts.asm diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 4fba30af..6ba03418 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -97,13 +97,24 @@ call :asm nascom || exit /b call :asm game || exit /b call :asm usrrom || exit /b call :asm updater || exit /b - -:: call :asm fonts || exit /b +call :asm romfonts || 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 tasm -t%CPUType% -g3 -fFF -dCPM sysconf.asm sysconf.com sysconf_com.lst || exit /b +:: Create platform specific hardware monitor + +if %Platform%==S100 ( + zxcc slr180 -s100mon/fh || exit /b + zxcc mload25 -s100mon || exit /b + set HwMon=s100mon.com +) else ( + call :asm hwmon || exit /b + set HwMon=hwmon.bin +) + :: :: Create additional ROM bank images by assembling components into :: 32K chunks which can be concatenated later. Note that @@ -113,15 +124,7 @@ tasm -t%CPUType% -g3 -fFF -dCPM sysconf.asm sysconf.com sysconf_com.lst || exit 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 rom3.bin || exit /b -) else ( - copy nul rom3.bin -) - +copy /b %HwMon% + romfonts.bin rom3.bin copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin appboot.bin || exit /b :: diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index 34d56286..2c99bfc5 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -5,7 +5,7 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \ DEST = ../../Binary TOOLS =../../Tools -OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh netboot.mod +OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh # DIFFMAKE = 1 @@ -25,7 +25,6 @@ include $(TOOLS)/Makefile.inc FONTS := font6x8c.asm font6x8u.asm font8x8c.asm font8x8u.asm \ font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm - ifeq ($(CPUFAM),2) TASM=$(BINDIR)/uz80as -t hd64180 @@ -33,7 +32,7 @@ else ifeq ($(CPUFAM),3) TASM=$(BINDIR)/uz80as -t z280 endif -DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin sysconf.bin sysconf.com usrrom.bin +DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin sysconf.bin sysconf.com usrrom.bin romfonts.bin ifeq ($(ROM_PLATFORM),UNA) ROMDEPS=romldr.bin dbgmon.bin @@ -44,9 +43,19 @@ else endif ifeq ($(ROM_PLATFORM),S100) - ROMDEPS += s100mon.bin + HWMON=s100mon.bin +else + HWMON=hwmon.bin +endif + +ifeq ($(ROM_PLATFORM),DUO) + NETBOOT=netboot-duo.mod +else + NETBOOT=netboot-mt.mod endif +DEPS += $(HWMON) $(NETBOOT) + ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} # $(info DEPS=$(DEPS)) @@ -61,18 +70,9 @@ ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} $(OBJECTS) : $(ROMDEPS) @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 >rom2.bin ; \ - if [ $(ROM_PLATFORM) = S100 ] ; then \ - cat s100mon.bin >rom3.bin ; \ - else \ - >rom3.bin ; \ - fi ; \ + cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin $(NETBOOT) updater.bin sysconf.bin usrrom.bin >rom2.bin ; \ + cat $(HWMON) romfonts.bin >rom3.bin ; \ 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 \ @@ -135,6 +135,9 @@ dbgmon.bin: build.inc nascom.bin: build.inc eastaegg.bin: build.inc updater.bin: build.inc +romfonts.bin: build.inc +hwmon.bin: build.inc +s100mon.bin: build.inc dumps: for i in $(MOREDIFF) ; do \ diff --git a/Source/HBIOS/hwmon.asm b/Source/HBIOS/hwmon.asm new file mode 100644 index 00000000..9c7121ac --- /dev/null +++ b/Source/HBIOS/hwmon.asm @@ -0,0 +1,30 @@ +; +;============================================================================= +; HWMON.ASM - BARE METAL HARDWARE MONITOR +;============================================================================= +; +; THIS IS JUST A STUB FOR NOW. +; +#INCLUDE "std.asm" +; +; MONITOR WILL BE LOADED AT HWMON_LOC +; + .ORG HWMON_LOC +; +; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY HWMON_SIZ BYTES. +; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY +; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. +; +SLACK .EQU (HWMON_END - $) +; +#IF (SLACK < 0) + .ECHO "*** HWMON IS TOO BIG!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR +#ENDIF +; + .FILL SLACK,$00 + .ECHO "Hardware Monitor space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" +; + .END diff --git a/Source/HBIOS/layout.inc b/Source/HBIOS/layout.inc index 2f7b5250..815dfa67 100644 --- a/Source/HBIOS/layout.inc +++ b/Source/HBIOS/layout.inc @@ -186,7 +186,7 @@ BNK_NXTLOC .SET HWMON_IMGLOC + HWMON_SIZ ; IMG LOC OF NEXT COMPONENT ; FONTS_BNK .EQU BNK_CUR FONTS_LOC .EQU $0000 -FONTS_SIZ .EQU $4000 +FONTS_SIZ .EQU $2100 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 diff --git a/Source/HBIOS/romfonts.asm b/Source/HBIOS/romfonts.asm new file mode 100644 index 00000000..ea679298 --- /dev/null +++ b/Source/HBIOS/romfonts.asm @@ -0,0 +1,97 @@ +; +;============================================================================= +; ROMFONTS.ASM - ROM HOSTED FONTS +;============================================================================= +; +; THIS ASSEMBLY IS PURELY A DATA ASSEMBLY USED TO INCLUDE THE ROM-HOSTED +; FONTS. +; +; FOR NOW, WE ARE JUST INCLUDING 3 FONTS AND THEY ARE NOT COMPRESSED. +; THESE THREE FONTS SHOULD ALWAYS RESULT IN AN 8K BINARY. +; +#INCLUDE "std.asm" +; +; +; +USEFONT6X8 .EQU TRUE +USEFONT8X8 .EQU TRUE +USEFONT8X11 .EQU FALSE +USEFONT8X16 .EQU TRUE +; + .ORG FONTS_LOC +; +; FONT LOCATION MAP +; +#IF USEFONT6X8 + .DB FONTID_6X8 + .DW FONT6X8 +#ENDIF +; +#IF USEFONT8X8 + .DB FONTID_8X8 + .DW FONT8X8 +#ENDIF +; +#IF USEFONT8X11 + .DB FONTID_8X11 + .DW FONT8X11 +#ENDIF +; +#IF USEFONT8X16 + .DB FONTID_8X16 + .DW FONT8X16 +#ENDIF +; + .DB 0 ; END OF TABLE +; +; +; +#IF USEFONT6X8 + .ECHO "FONT6X8: " +FONT6X8: +#INCLUDE "font6x8u.asm" + .ECHO $ - FONT6X8 + .ECHO " BYTES\n" +#ENDIF +; +#IF USEFONT8X8 + .ECHO "FONT8X8: " +FONT8X8: +#INCLUDE "font8x8u.asm" + .ECHO $ - FONT8X8 + .ECHO " BYTES\n" +#ENDIF +; +#IF USEFONT8X11 + .ECHO "FONT8X11: " +FONT8X11: +#INCLUDE "font8x11u.asm" + .ECHO $ - FONT8X11 + .ECHO " BYTES\n" +#ENDIF +; +#IF USEFONT8X16 + .ECHO "FONT8X16: " +FONT8X16: +#INCLUDE "font8x16u.asm" + .ECHO $ - FONT8X16 + .ECHO " BYTES\n" +#ENDIF +; +; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY USR_SIZ BYTES. +; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY +; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. +; +SLACK .EQU (FONTS_END - $) +; +#IF (SLACK < 0) + .ECHO "*** FONTS IS TOO BIG!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR +#ENDIF +; + .FILL SLACK,$00 + .ECHO "FONTS space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" +; + .END diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index fe9b96df..7c05541c 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -551,11 +551,10 @@ V40X24 .EQU 7 ; EF9345 ; ; FONT IDS ; -FONTID_8X8 .EQU 1 -FONTID_8X11 .EQU 2 -FONTID_8X16 .EQU 3 -FONTID_CGA .EQU 4 -FONTID_VGARC .EQU 5 +FONTID_6X8 .EQU 1 +FONTID_8X8 .EQU 2 +FONTID_8X11 .EQU 3 +FONTID_8X16 .EQU 4 ; ; KEYBOARD LAYOUTS ;