diff --git a/Source/HBIOS/Bank Layout.txt b/Source/HBIOS/Bank Layout.txt index f7f957cb..b859c174 100644 --- a/Source/HBIOS/Bank Layout.txt +++ b/Source/HBIOS/Bank Layout.txt @@ -2,13 +2,15 @@ ROM Bank Layout Bank ID Module Start Size ------ ------ ------ ------ -0x00 hbios 0x0000 0x8000 +0x00 hbios 0x0000 0x7FFF + 0x7FFF 0x0001 0x8000 0x01 loader 0x0000 0x1000 dbgmon 0x1000 0x2000 cpm22 0x2000 0x3000 - zsys 0x5000 0x3000 + zsys 0x5000 0x2FFF + 0x7FFF 0x0001 0x8000 0x02 forth 0x0000 0x1700 @@ -18,10 +20,12 @@ Bank ID Module Start Size egg 0x4900 0x0200 netboot 0x4B00 0x1000 updater 0x5B00 0x0D00 - usrrom 0x6800 0x1800 + usrrom 0x6800 0x7FFF + 0x7FFF 0x0001 0x8000 -0x03 imgpad2 0x0000 0x8000 +0x03 [fonts] 0x0000 0x7FFF + 0x7FFF 0x0001 0x8000 0x04 - N ROM Disk Data @@ -34,7 +38,7 @@ Bank ID Usage 0x00 Boot Bank (HBIOS image) 0x01 ROM Loader, Monitor, ROM OSes 0x02 ROM Applications -0x03 Reserved +0x03 Optional Font storage, Cache. 0x04-0x0F ROM Disk Banks (12) diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 920b8d1a..e963b679 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -17,7 +17,7 @@ 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 +:: necessary, the user is prompted to pick the variables. It then creates :: an include file that is imbedded 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). @@ -114,7 +114,7 @@ copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin o 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 if %Platform%==S100 ( - zxcc slr180 -s100mon/fh + zxcc slr180 -s100mon/fh || exit /b zxcc mload25 -s100mon || exit /b copy /b s100mon.com osimg2.bin || exit /b ) else ( @@ -123,6 +123,12 @@ if %Platform%==S100 ( copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin osimg_small.bin || exit /b +:: +:: Split off anything above 32K mark of the hbios. This will be relocated to rom bank 3 +:: + +"%TOOLS%\srecord\srec_cat.exe" hbios_rom.bin -Binary -crop 0x8000 0x10000 -offset -0x8000 -o osimg2.bin -Binary || 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 diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 45720b91..4a448f39 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -52,6 +52,7 @@ BIOS .EQU BIOS_NONE ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) USELZSA2 .EQU FALSE ; ENABLE FONT COMPRESSION +FONTS_INLINE .EQU TRUE ; FONT DATA LOCATION: TRUE=IN HBIOS FALSE=IN ROM BANK 3 TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 9b4d6f64..92ce2c28 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -105,7 +105,7 @@ CVDU_INIT1: CALL CVDU_CRTINIT ; SETUP THE CVDU CHIP REGISTERS CALL PRTDEC PRTS("KB$") - CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE + CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STORAGE CALL CVDU_VDARES CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER @@ -439,11 +439,11 @@ CVDU_LOADFONT: LD SP,HL ; HL POINTS TO BUFFER EX DE,HL ; START OF STACK BUFFER PUSH DE ; SAVE IT - LD HL,CVDU_FONT ; START OF FONT DATA + LD HL,CVDU_FONT & $7FFF ; START OF FONT DATA CALL DLZSA2 ; DECOMPRESS TO DE POP HL ; RECALL STACK BUFFER POSITION #ELSE - LD HL,CVDU_FONT ; START OF FONT DATA + LD HL,CVDU_FONT & $7FFF ; START OF FONT DATA #ENDIF LD DE,$2000 ; LENGTH OF FONT DATA diff --git a/Source/HBIOS/eastaegg.asm b/Source/HBIOS/eastaegg.asm index 7d291165..d29c9ed9 100644 --- a/Source/HBIOS/eastaegg.asm +++ b/Source/HBIOS/eastaegg.asm @@ -1,7 +1,7 @@ ; Adapted from https://rosettacode.org/wiki/Mandelbrot_set#Z80_Assembly ; by Phillip Summers difficultylevelhigh@gmail.com ; -; WBWROM SBV V2 Easteregg +; WBWROM Easteregg ; ; Compute a Mandelbrot set on a simple Z80 computer. ; diff --git a/Source/HBIOS/ef.asm b/Source/HBIOS/ef.asm index 63ba2bf4..554c5413 100644 --- a/Source/HBIOS/ef.asm +++ b/Source/HBIOS/ef.asm @@ -48,7 +48,7 @@ EF_NOP .EQU $91 ; EF_IND .EQU $80 ; EF_CLF .EQU $05 ; EF_OCT .EQU $30 ; -EF_OCTAUX .EQU $04 ; AUXILIARY POITER +EF_OCTAUX .EQU $04 ; AUXILIARY POINTER EF_KRF .EQU $00 ; NO AUTOINCREMENT EF_KRL .EQU $50 ; NO AUTOINCREMENT EF_INY .EQU $B0 ; INC Y @@ -383,7 +383,7 @@ EF_LOAD_INDIR: ; D = TARGET REGISTER, E = VALUE TO WRITE RET ; EF_LOAD_MODE: ; LOAD MODE - LD D,EF_TGSREG ; START INDIRECT REGISTER 1 : TGS + LD D,EF_TGSREG ; START INDIRECT REGISTER 1 : TGS LD B,EF_INIT_CNT ; LOAD 5 INDIRECT REGISTERS EF_MODEREG: LD E,(HL) diff --git a/Source/HBIOS/fonts.inc b/Source/HBIOS/fonts.inc new file mode 100644 index 00000000..0ff3c1cc --- /dev/null +++ b/Source/HBIOS/fonts.inc @@ -0,0 +1,70 @@ +; +;================================================================================================== +; FONTS +;================================================================================================== +; +HB_FONTS_BEG .EQU $ +; +ORG_FONTS .EQU $ +; + MEMECHO "FONTS" +; +#IFDEF USEFONT8X8 +FONT8X8: + +; WE NEVER COMPRESS THE 8X8 FONT AS THERE IS NOT ENOUGH SPACE TO DECOMPRESS THEM AT WARM BOOT + + #IF USELZSA2 & FALSE + #INCLUDE "font8x8c.asm" + #ELSE + #INCLUDE "font8x8u.asm" + #ENDIF + MEMECHO " 8X8" +#ENDIF +; +#IFDEF USEFONT8X11 +FONT8X11: + #IF USELZSA2 + #INCLUDE "font8x11c.asm" + #ELSE + #INCLUDE "font8x11u.asm" + #ENDIF + MEMECHO " 8X11" +#ENDIF +; +#IFDEF USEFONT8X16 +FONT8X16: + #IF USELZSA2 + #INCLUDE "font8x16c.asm" + #ELSE + #INCLUDE "font8x16u.asm" + #ENDIF + MEMECHO " 8X16" +#ENDIF +; +#IFDEF USEFONTCGA +FONTCGA: + #IF USELZSA2 + #INCLUDE "fontcgac.asm" + #ELSE + #INCLUDE "fontcgau.asm" + #ENDIF + MEMECHO " CGA" +#ENDIF +; +#IFDEF USEFONTVGARC +FONTVGARC: + #IF USELZSA2 + #INCLUDE "fontvgarcc.asm" + #ELSE + #INCLUDE "fontvgarcu.asm" + #ENDIF + MEMECHO " VGARC" +#ENDIF +; +SIZ_FONTS .EQU $ - ORG_FONTS + MEMECHO " occupy " + MEMECHO SIZ_FONTS + MEMECHO " bytes.\n" +; +HB_FONTS_END .EQU $ \ No newline at end of file diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 6e2dfa99..4d99c50f 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -9398,75 +9398,13 @@ SIZ_EZ80DRVS .EQU $ - ORG_EZ80DRVS HB_DRIVERS_END .EQU $ ; ;================================================================================================== -; FONTS +; IF WE ARE INCLUDING FONTS IN THE HBIOS AREA WE IMPORT THEM HERE ;================================================================================================== ; -HB_FONTS_BEG .EQU $ -; -ORG_FONTS .EQU $ -; - MEMECHO "FONTS" -; -#IFDEF USEFONT8X8 -FONT8X8: -; -; FOR NOW, WE NEVER COMPRESS THE 8X8 FONT. SEE TMS DRIVER. -; - #IF USELZSA2 & FALSE - #INCLUDE "font8x8c.asm" - #ELSE - #INCLUDE "font8x8u.asm" - #ENDIF - MEMECHO " 8X8" -#ENDIF -; -#IFDEF USEFONT8X11 -FONT8X11: - #IF USELZSA2 - #INCLUDE "font8x11c.asm" - #ELSE - #INCLUDE "font8x11u.asm" - #ENDIF - MEMECHO " 8X11" -#ENDIF -; -#IFDEF USEFONT8X16 -FONT8X16: - #IF USELZSA2 - #INCLUDE "font8x16c.asm" - #ELSE - #INCLUDE "font8x16u.asm" - #ENDIF - MEMECHO " 8X16" -#ENDIF -; -#IFDEF USEFONTCGA -FONTCGA: - #IF USELZSA2 - #INCLUDE "fontcgac.asm" - #ELSE - #INCLUDE "fontcgau.asm" - #ENDIF - MEMECHO " CGA" +#IF (FONTS_INLINE == TRUE) +#INCLUDE "fonts.inc") #ENDIF ; -#IFDEF USEFONTVGARC -FONTVGARC: - #IF USELZSA2 - #INCLUDE "fontvgarcc.asm" - #ELSE - #INCLUDE "fontvgarcu.asm" - #ENDIF - MEMECHO " VGARC" -#ENDIF -; -SIZ_FONTS .EQU $ - ORG_FONTS - MEMECHO " occupy " - MEMECHO SIZ_FONTS - MEMECHO " bytes.\n" -; -HB_FONTS_END .EQU $ -; ;================================================================================================== ; HBIOS GLOBAL DATA ;================================================================================================== @@ -9687,6 +9625,8 @@ MG014_STATMAPHI: ; HB_DATA_END .EQU $ ; +HB_CRC .DB $00 ; RESERVE ONE BYTE FOR CRC BYTE TO BE PATCHED BY BUILD PROCESS +; HB_END .EQU $ ; SLACK .EQU BNKTOP - $ @@ -9748,5 +9688,26 @@ SLACK .EQU BNKTOP - $ .FILL SLACK #ENDIF #ENDIF +; +; <<< +; <<< 0X8000 STARTS HERE :) +; <<< +; +;================================================================================================== +; RESERVE SPACE FOR CCP CACHE ? +;================================================================================================== +; +; .FILL 2048,0 +; +;================================================================================================== +; IF WE ARE PUTTING FIXED FONTS ROM BANK 3 WE IMPORT THEM HERE AT 0x8000. +; THE BUILD PROCESS SPLITS THEM OUT LATER +;================================================================================================== +; +#IF (FONTS_INLINE == FALSE) +#INCLUDE "fonts.inc") +K64 .EQU -1-$+1 + .FILL K64,0 +#ENDIF ; .END diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 6633f696..4941080d 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -757,55 +757,89 @@ TMS_CLEAR: ; LOAD FONT DATA ;---------------------------------------------------------------------- ; +; THE 8X8 FONT DATA USED BY THE TMS DRIVER IS UNCOMPRESSED +; WE COPY IT DIRECTLY FROM ITS LOCATION IN THE HBIOS OR ROM BANK 3 +; TO THE TMS BOARD MEMORY +; TMS_LOADFONT: ; SET WRITE ADDRESS TO TMS_FNTVADDR LD HL,TMS_FNTVADDR CALL TMS_WR ; -; THE USE OF COMPRESSED FONT STORAGE FOR THE TMS DRIVER IS DISABLED -; SO THAT WE CAN RELOAD THE FONT DATA ON USER RESET. THE TMS CHIP -; IS FREQUENTLY REPROGRAMMED BY GAMES, ETC., SO IT IS NECESSARY TO -; REINIT AND RELOAD FONTS. RELOADING A COMPRESSED FONT AFTER -; SYSTEM INITIALIZATION REQUIRES A LARGE DECOMPRESSION BUFFER THAT WE -; HAVE NO WAY TO ACCOMMODATE WITHOUT TRASHING OS/APP MEMORY. -; -#IF USELZSA2 & FALSE - LD (TMS_STACK),SP ; SAVE STACK - LD HL,(TMS_STACK) ; AND SHIFT IT - LD DE,$2000 ; DOWN 4KB TO - CCF ; CREATE A - SBC HL,DE ; DECOMPRESSION BUFFER - LD SP,HL ; HL POINTS TO BUFFER - EX DE,HL ; START OF STACK BUFFER - PUSH DE ; SAVE IT - LD HL,TMS_FONT ; START OF FONT DATA - CALL DLZSA2 ; DECOMPRESS TO DE - POP HL ; RECALL STACK BUFFER POSITION -#ELSE - LD HL,TMS_FONT ; START OF FONT DATA -#ENDIF -; - ; FILL TMS_FNTVADDR BYTES FROM FONTDATA + LD HL,TMS_FONT & $7FFF ; START OF FONT DATA LD DE,TMS_FNTSIZE TMS_LOADFONT1: - LD A,(HL) +#IF (FONTS_INLINE == TRUE) + LD A,(HL) ; READ FONT DATA FROM HBIOS +#ELSE + push de + ld d,BID_IMG2 + call HBX_PEEK ; READ FONT DATA FROM ROM BANK 3 + ld a,e + pop de +#ENDIF + CALL PRTHEXBYTE EZ80_IO - OUT (TMS_DATREG),A + OUT (TMS_DATREG),A ; WRITE TO THE TMS BOARD MEMORY TMS_IODELAY ; DELAY INC HL DEC DE LD A,D OR E JR NZ,TMS_LOADFONT1 -; -#IF USELZSA2 & FALSE - LD HL,(TMS_STACK) ; ERASE DECOMPRESS BUFFER - LD SP,HL ; BY RESTORING THE STACK - RET ; DONE -TMS_STACK .DW 0 -#ELSE RET -#ENDIF +; +; +; +;TMS_LOADFONT: +; ; SET WRITE ADDRESS TO TMS_FNTVADDR +; LD HL,TMS_FNTVADDR +; CALL TMS_WR +; +; THE USE OF COMPRESSED FONT STORAGE FOR THE TMS DRIVER IS DISABLED +; SO THAT WE CAN RELOAD THE FONT DATA ON USER RESET. THE TMS CHIP +; IS FREQUENTLY REPROGRAMMED BY GAMES, ETC., SO IT IS NECESSARY TO +; REINIT AND RELOAD FONTS. RELOADING A COMPRESSED FONT AFTER +; SYSTEM INITIALIZATION REQUIRES A LARGE DECOMPRESSION BUFFER THAT WE +; HAVE NO WAY TO ACCOMMODATE WITHOUT TRASHING OS/APP MEMORY. +; +;#IF USELZSA2 & FALSE +; LD (TMS_STACK),SP ; SAVE STACK +; LD HL,(TMS_STACK) ; AND SHIFT IT +; LD DE,$2000 ; DOWN 4KB TO +; CCF ; CREATE A +; SBC HL,DE ; DECOMPRESSION BUFFER +; LD SP,HL ; HL POINTS TO BUFFER +; EX DE,HL ; START OF STACK BUFFER +; PUSH DE ; SAVE IT +; LD HL,TMS_FONT & $7FFF ; START OF FONT DATA +; CALL DLZSA2 ; DECOMPRESS TO DE +; POP HL ; RECALL STACK BUFFER POSITION +;#ELSE +; LD HL,TMS_FONT & $7FFF ; START OF FONT DATA +;#ENDIF +; +; ; FILL TMS_FNTVADDR BYTES FROM FONTDATA +; LD DE,TMS_FNTSIZE +;TMS_LOADFONT1: +; LD A,(HL) +; EZ80_IO +; OUT (TMS_DATREG),A +; TMS_IODELAY ; DELAY +; INC HL +; DEC DE +; LD A,D +; OR E +; JR NZ,TMS_LOADFONT1 +; +;#IF USELZSA2 & FALSE +; LD HL,(TMS_STACK) ; ERASE DECOMPRESS BUFFER +; LD SP,HL ; BY RESTORING THE STACK +; RET ; DONE +;TMS_STACK .DW 0 +;#ELSE +; RET +;#ENDIF ; ;---------------------------------------------------------------------- ; VIRTUAL CURSOR MANAGEMENT diff --git a/Source/HBIOS/unlzsa2s.asm b/Source/HBIOS/unlzsa2s.asm index 7fbc74fb..75617a9e 100644 --- a/Source/HBIOS/unlzsa2s.asm +++ b/Source/HBIOS/unlzsa2s.asm @@ -12,6 +12,7 @@ ; ver.06 by spke (11-12/04/2021, added some comments) ; ver.07 by spke (04-05/04/2022, 134(-5) bytes, +1% speed, using self-modifying code by default) ; ver.071 by PSummers (6/1/2023), ROMWBW version. +; ver.072 by PSummers (2/1/2025), ROMWBW version support decompress from another bank. ; ; The data must be compressed using the command line compressor by Emmanuel Marty ; The compression is done as follows: @@ -71,8 +72,17 @@ #DEFINE ADD_OFFSET \ #DEFCONT \ add hl,de - #DEFINE BLOCKCOPY \ - #DEFCONT \ ldir + #IF (FONTS_INLINE == TRUE) + #DEFINE BLOCKCOPY ldir + #DEFINE GETHLA ld a,(hl) + #DEFINE GETHLB ld b,(hl) + #DEFINE GETHLC ld c,(hl) + #ELSE + #DEFINE BLOCKCOPY call BLKCOPY + #DEFINE GETHLA call READSRCHLA + #DEFINE GETHLB call READSRCHLB + #DEFINE GETHLC call READSRCHLC + #ENDIF #ELSE #DEFINE NEXT_HL \ #DEFCONT \ dec hl @@ -86,6 +96,7 @@ #ENDIF DLZSA2: + ; in many places we assume that B = 0 ; flag P in A' signals the need to re-load the nibble store xor a \ ld b,a \ ex af,af' \ jr ReadToken @@ -106,7 +117,7 @@ CASE01x: ; token "01Z" stands for 9-bit offsets cp %01100000 doRLB rl b -OffsetReadC: ld c,(hl) \ NEXT_HL +OffsetReadC: GETHLC \ NEXT_HL #IFNDEF AVOID_SELFMODIFYING_CODE SaveOffset: ld (PrevOffset),bc \ ld b,0 @@ -129,7 +140,7 @@ PrevOffset .EQU $+1 \ ld hl,0 BLOCKCOPY ; BC = 0, DE = dest pop hl ; HL = src -ReadToken: ld a,(hl) \ NEXT_HL \ push af +ReadToken: GETHLA \ NEXT_HL \ push af and %00011000 \ jr z,NoLiterals rrca \ rrca \ rrca @@ -147,7 +158,7 @@ CASE1xx cp %11000000 \ jr c,CASE10x CASE110: ; token "110" stands for 16-bit offset ; (read a byte for offset bits 8-15, then another byte for offset bits 0-7) - ld b,(hl) \ NEXT_HL \ jr OffsetReadC + GETHLB \ NEXT_HL \ jr OffsetReadC CASE10x: ; token "10Z" stands for 13-bit offsets ; (read a nibble for offset bits 9-12 and use the inverted bit Z @@ -160,19 +171,69 @@ CASE10x: ; token "10Z" stands for 13-bit offsets ExtendedCode: call ReadNibble \ inc a \ jr z,ExtraByte sub $F0+1 \ add a,c \ ret -ExtraByte ld a,15 \ add a,c \ add a,(hl) \ NEXT_HL \ ret nc - ld a,(hl) \ NEXT_HL - ld b,(hl) \ NEXT_HL \ ret nz +ExtraByte GETHLA \ add a,15 \ add a,c \ NEXT_HL \ ret nc + GETHLA \ NEXT_HL + GETHLB \ NEXT_HL \ ret nz pop bc ; RET is not needed, because RET from ReadNibble is sufficient ReadNibble: ld c,a skipLDCA xor a \ nop \ ex af,af' \ ret m ; NOP for Z280 bug - ld a,(hl) \ or $F0 \ ex af,af' - ld a,(hl) \ NEXT_HL \ or $0F + GETHLA \ or $F0 \ ex af,af' + GETHLA \ NEXT_HL \ or $0F rrca \ rrca \ rrca \ rrca \ ret ; The extraneous NOP instruction above is to workaround a bug in the ; Z280 processor where ex af,af' can copy rather than swap the flags ; register. ; See https://www.retrobrewcomputers.org/forum/index.php?t=msg&goto=10183& + +#IF (FONTS_INLINE == FALSE) +; +; +; READ A SOURCE BYTE FROM ANOTHER BANK +; SOURCE ADDRESS IN HL AND BANK IN D, VALUE RETURNED IN A, B or C +; +READSRCHLA: + push de + push af + ld d,BID_IMG2 + call HBX_PEEK + pop af + ld a,e + pop de + ret +; +READSRCHLB: + push de + push af + ld d,BID_IMG2 + call HBX_PEEK + pop af + ld b,e + pop de + ret +; +READSRCHLC: + push de + push af + ld d,BID_IMG2 + call HBX_PEEK + pop af + ld c,e + pop de + ret +; +BLKCOPY:push af +BLKCOPY_lp: + call READSRCHLA + ld (de),a + inc hl + inc de + dec bc + ld a,b + or c + jr nz,BLKCOPY_lp + pop af + ret +#ENDIF diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index 171b32c2..607283e6 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -544,8 +544,20 @@ VGA_CRTCDUMP1: ; ;---------------------------------------------------------------------- ; LOAD FONT DATA +; +; IF V80X60 MODE IS USED THEN THE 8*8 UNCOMPRESSED FONT IS ALWAYS USED. +; THE FONT DATA MAY BE STORED IN THE HBIOS AREA OR ROM BANK 3 (BID_IMG2) +; EXCEPT FOR THE 8X8 FONT, DATA MAY BE COMPRESSED OR UNCOMPRESSED. ;---------------------------------------------------------------------- - +; +; IF FONTS ARE STORED INLINE IN HBIOS: +; IF 8x8 - NO COMPRESSION SO PROGRAM STRAIGHT FROM HBIOS +; IF UNCOMPRESSED - PROGRAM STRAIGHT FROM HBIOS +; IF COMPRESSED - DECOMPRESS FIRST +; IF FONTS ARE STORED IN BANK3 +; IF 8x8 - NO COMPRESSION - SO PROGRAM FROM BANK3 USING PEEK +; IF UNCOMPRESSED - PROGRAM FROM BANK3 USING PEEK +; IF COMPRESSED - DECOMPRESS FIRST ; VGA_LOADFONT: LD HL,$7000 | VGA_89BIT ; CLEAR FONT PAGE NUM @@ -560,18 +572,32 @@ VGA_LOADFONT: LD SP,HL ; HL POINTS TO BUFFER EX DE,HL ; START OF STACK BUFFER PUSH DE ; SAVE IT - LD HL,VGA_FONT ; START OF FONT DATA + LD HL,VGA_FONT & $7FFF ; START OF FONT DATA CALL DLZSA2 ; DECOMPRESS TO DE POP HL ; RECALL STACK BUFFER POSITION #ELSE - LD HL,VGA_FONT ; START OF FONT DATA + LD HL,VGA_FONT & $7FFF ; START OF FONT DATA #ENDIF - +; +; AT THIS POINT HL POINTS TO UNCOMPRESSED FONT DATA +; THIS DATA MAY BE IN THE HBIOS AREA, IN THE STACK BUFFER +; OR IN BANK 3 +; LD DE,$7000 ; PAGE 7 OF VIDEO RAM VGA_LOADFONT1: LD B,VGA_SCANL ; # BYTES FOR EACH CHAR VGA_LOADFONT2: - LD A,(HL) ; GET NEXT BYTE + +#IF ((USELZSA2 == FALSE) & (FONTS_INLINE == FALSE)) + PUSH DE + LD D,BID_IMG2 + CALL HBX_PEEK ; GET NEXT BYTE FROM ROM BANK 3 + LD A,E + POP DE +#ELSE + LD A,(HL) ; GET NEXT BYTE FROM HBIOS OR STACK BUFFER +#ENDIF +; CALL PRTHEXBYTE CALL VGA_MEMWR ; MEM(DE) := A INC HL ; NEXT FONT BYTE INC DE ; NEXT MEM BYTE diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm index 98b12a59..5c5a580e 100644 --- a/Source/HBIOS/vrc.asm +++ b/Source/HBIOS/vrc.asm @@ -283,11 +283,11 @@ VRC_LOADFONT: LD SP,HL ; HL POINTS TO BUFFER EX DE,HL ; START OF STACK BUFFER PUSH DE ; SAVE IT - LD HL,VRC_FONT ; START OF FONT DATA + LD HL,VRC_FONT & $7FFF ; START OF FONT DATA CALL DLZSA2 ; DECOMPRESS TO DE POP HL ; RECALL STACK BUFFER POSITION #ELSE - LD HL,VRC_FONT ; START OF FONT DATA + LD HL,VRC_FONT & $7FFF ; START OF FONT DATA #ENDIF ; #IF 0