Browse Source

More ROM Font Tweaks

- Add a signature to the start of the font map table to prevent accidentally applying/decompressing invalid font data.
- Improve Z280 font byte retrieval to properly restore the user mode bank.
pull/578/head
Wayne Warthen 7 months ago
parent
commit
1cba90ff15
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 60
      Source/HBIOS/hbios.asm
  2. 1
      Source/HBIOS/romfonts.asm
  3. 6
      Source/HBIOS/vrc.asm

60
Source/HBIOS/hbios.asm

@ -8312,6 +8312,21 @@ FNT_SELECT:
LD (FNT_BID),A ; SAVE IN WORKING VARIABLE
LD D,FNT_BNKID ; D = BANK FOR FONT DATA
LD HL,FNT_MAP ; POINT TO START OF MAP
;
; FONT MAP TABLE BEGINS WITH A 2 BYTE SIGNATURE. ATTEMPTING
; TO DECOMPRESS INVALID DATA WOULD BE VERY BAD.
CALL FNT_BYTE ; FIRST SIGNATURE BYTE
;;;CALL PC_SPACE ; ** DEBUG ***
;;;CALL COUT ; ** DEBUG ***
INC HL ; BUMP PTR
CP 'F' ; SHOULD BE 'F'
JR NZ,FNT_SELECT_ERR ; IF MISMATCH, BAIL OUT W/ ERR
CALL FNT_BYTE ; SECOND SIGNATURE BYTE
;;;CALL COUT ; ** DEBUG ***
INC HL ; BUMP PTR
CP 'M' ; SHOULD BE 'M'
JR NZ,FNT_SELECT_ERR ; IF MISMATCH, BAIL OUT W/ ERR
;
FNT_SELECT0:
CALL FNT_BYTE ; LOAD THE FONT ID FROM MAP
;;;CALL PC_SPACE ; ** DEBUG ***
@ -8337,7 +8352,7 @@ FNT_SELECT1:
CALL FNT_BYTE ; HI BYTE OF ADDRESS
LD D,A ; PUT IN D
EX DE,HL ; FULL ADDRESS TO HL
;
;;;#IF ROMFONTS
;;; CALL PC_SPACE ; ** DEBUG ***
;;; LD A,'R' ; ** DEBUG ***
@ -8347,7 +8362,7 @@ FNT_SELECT1:
;;; LD A,'H' ; ** DEBUG ***
;;; CALL COUT ; ** DEBUG ***
;;;#ENDIF
;
POP AF ; RECOVER FONT ID
AND $80 ; COMPRESSED FONT DATA?
JR Z,FNT_SELECT2 ; IF NOT, SKIP DECOMP
@ -8383,8 +8398,6 @@ FNT_SELECT1:
LD (FNT_BID),A ; UPDATE FNT_BID
LD HL,$E000 ; DEOMP BUF ADR TO HL
#ELSE
;;;LD A,'I' ; ** DEBUG ***
;;;CALL COUT ; ** DEBUG ***
LD DE,$E000 ; DECOMP BUF ADR TO DE
CALL DLZSA2 ; DECOMPRESS
LD HL,$E000 ; DECOMP BUF ADR TO HL
@ -8431,17 +8444,33 @@ FNT_BYTE:
#IF (MEMMGR == MM_Z280)
; HBX_PEEK FOR Z280 DOES NOT WORK WHEN INVOKED WHILE IN
; SYSTEM MODE. THIS SHOULD BE REVISITED.
LD A,(FNT_BID)
PUSH BC
PUSH DE
PUSH HL
LD B,$00
CALL Z280_BNKSEL
POP HL
POP DE
POP BC
LDUP A,(HL)
RET
;
; NOTE: WHEN WE GO TO RESTORE THE USER SPACE BANK, WE DON'T
; REALLY HAVE A GOOD SOURCE OF WHAT BANK ID TO RESTORE IT TO.
; IN THEORY, WE ARE BEING INVOKED EITHER DURING SYSTEM BOOT OR
; VIA HB_INVOKE. DURING SYSTEM BOOT, THE USER BANK IS NOT
; RELEVANT. FOR HB_INVOKE, THE PREVIOUS USER BANK WILL BE
; RECORDED IN HB_INVBNK. SO, WE BLINDLY USE HB_INVBNK. THIS
; WILL BE CORRECT WHEN INVOKED VIA HB_INVOKE AND SHOULD DO NO
; HARM WHEN INVOKED DURING SYSTEM BOOT. THIS REALLY NEEDS TO
; BE REVIEWED.
;
LD A,(FNT_BID) ; GET THE FONT BANK ID
PUSH BC ; SAVE BC
PUSH HL ; SAVE HL
LD B,$00 ; POINT TO USER PDRS
CALL Z280_BNKSEL ; SELECT Z280 USER BANK
POP HL ; RECOVER HL
PUSH HL ; AND RESAVE IT
LDUP A,(HL) ; GET THE BYTE FROM USER SPACE
PUSH AF ; SAVE THE BYTE
LD A,(HB_INVBNK) ; GET PRIOR BANK (SEE NOTE ABOVE)
LD B,$00 ; POINT TO USER PDRS
CALL Z280_BNKSEL ; SELECT IT
POP AF ; RECOVER VALUE
POP HL ; RECOVER HL
POP BC ; RECOVER BC
RET ; DONE
#ELSE
PUSH DE
LD A,(FNT_BID)
@ -9689,6 +9718,7 @@ FNT_CMPMASK .EQU $00
; FONT LOCATION MAP
;
FNT_MAP:
.DB 'F','M' ; TABLE SIGNATURE
#IFDEF USEFONT6X8
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER.
;;; .DB FONTID_6X8 | FNT_CMPMASK

1
Source/HBIOS/romfonts.asm

@ -35,6 +35,7 @@ FMT_8X16 .EQU COMP
;
; FONT LOCATION MAP
;
.DB 'F','M' ; TABLE SIGNATURE
#IF USEFONT6X8
.DB FONTID_6X8 | FMT_6X8
.DW FONT6X8

6
Source/HBIOS/vrc.asm

@ -23,9 +23,11 @@ VRC_COLS .EQU 64
;
#DEFINE USEFONT8X8
#DEFINE VRC_FONT FONT8X8
;
VRC_FONTID .EQU FONTID_8X8
;VRC_FONTID .EQU FONTID_6X8
;
;;;#DEFINE USEFONT6X8
;;;#DEFINE VRC_FONT FONT6X8
;;;VRC_FONTID .EQU FONTID_6X8
;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT

Loading…
Cancel
Save