Browse Source

Option to move Fonts out of HBIOS area to ROM Bank 3

The FONTS_INLINE equate controls whether the fonts are included in the HBIOS area as per existing behaviour or whether they are placed in the currently unused ROM bank 3.
In the case where we use bank 3 for font storage, the HBIOS is built with the font data located at 0x8000 onwards. The build process splits this off for relocation to the correct image position.  Unlzsa, the TMS and VGA driver have been updated to access the font data from either location, whether compressed or not.

Moving the font data to bank 3 results in significant savings in HBIOS space.

If you are happy with this approach, I will continue developing and roll changes into other display drivers and do some hardware testing.

Further on, as mentioned, I would like to look see if i can get the decompressor to decompress one byte at a time and move the CCP cache to bank 3 as well.

Regards Phil
pull/486/head
b1ackmai1er 1 year ago
parent
commit
25a9ce046f
  1. 14
      Source/HBIOS/Bank Layout.txt
  2. 10
      Source/HBIOS/Build.cmd
  3. 1
      Source/HBIOS/cfg_MASTER.asm
  4. 6
      Source/HBIOS/cvdu.asm
  5. 2
      Source/HBIOS/eastaegg.asm
  6. 4
      Source/HBIOS/ef.asm
  7. 70
      Source/HBIOS/fonts.inc
  8. 91
      Source/HBIOS/hbios.asm
  9. 102
      Source/HBIOS/tms.asm
  10. 81
      Source/HBIOS/unlzsa2s.asm
  11. 36
      Source/HBIOS/vga.asm
  12. 4
      Source/HBIOS/vrc.asm

14
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
<crc> 0x7FFF 0x0001
<end> 0x8000
0x01 loader 0x0000 0x1000
dbgmon 0x1000 0x2000
cpm22 0x2000 0x3000
zsys 0x5000 0x3000
zsys 0x5000 0x2FFF
<crc> 0x7FFF 0x0001
<end> 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
<crc> 0x7FFF 0x0001
<end> 0x8000
0x03 imgpad2 0x0000 0x8000
0x03 [fonts] 0x0000 0x7FFF
<crc> 0x7FFF 0x0001
<end> 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)

10
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

1
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

6
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

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

4
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)

70
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 $

91
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

102
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

81
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

36
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

4
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

Loading…
Cancel
Save