@ -8312,6 +8312,21 @@ FNT_SELECT:
LD ( FNT_BID ), A ; SAVE IN WORKING VARIABLE
LD ( FNT_BID ), A ; SAVE IN WORKING VARIABLE
LD D , FNT_BNKID ; D = BANK FOR FONT DATA
LD D , FNT_BNKID ; D = BANK FOR FONT DATA
LD HL , FNT_MAP ; POINT TO START OF MAP
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:
FNT_SELECT0:
CALL FNT_BYTE ; LOAD THE FONT ID FROM MAP
CALL FNT_BYTE ; LOAD THE FONT ID FROM MAP
;;;CALL PC_SPACE ; ** DEBUG ***
;;;CALL PC_SPACE ; ** DEBUG ***
@ -8337,7 +8352,7 @@ FNT_SELECT1:
CALL FNT_BYTE ; HI BYTE OF ADDRESS
CALL FNT_BYTE ; HI BYTE OF ADDRESS
LD D , A ; PUT IN D
LD D , A ; PUT IN D
EX DE , HL ; FULL ADDRESS TO HL
EX DE , HL ; FULL ADDRESS TO HL
;
;;;#IF ROMFONTS
;;;#IF ROMFONTS
;;; CALL PC_SPACE ; ** DEBUG ***
;;; CALL PC_SPACE ; ** DEBUG ***
;;; LD A,'R' ; ** DEBUG ***
;;; LD A,'R' ; ** DEBUG ***
@ -8347,7 +8362,7 @@ FNT_SELECT1:
;;; LD A,'H' ; ** DEBUG ***
;;; LD A,'H' ; ** DEBUG ***
;;; CALL COUT ; ** DEBUG ***
;;; CALL COUT ; ** DEBUG ***
;;;#ENDIF
;;;#ENDIF
;
POP AF ; RECOVER FONT ID
POP AF ; RECOVER FONT ID
AND $ 80 ; COMPRESSED FONT DATA?
AND $ 80 ; COMPRESSED FONT DATA?
JR Z , FNT_SELECT2 ; IF NOT, SKIP DECOMP
JR Z , FNT_SELECT2 ; IF NOT, SKIP DECOMP
@ -8383,8 +8398,6 @@ FNT_SELECT1:
LD ( FNT_BID ), A ; UPDATE FNT_BID
LD ( FNT_BID ), A ; UPDATE FNT_BID
LD HL , $ E000 ; DEOMP BUF ADR TO HL
LD HL , $ E000 ; DEOMP BUF ADR TO HL
# ELSE
# ELSE
;;;LD A,'I' ; ** DEBUG ***
;;;CALL COUT ; ** DEBUG ***
LD DE , $ E000 ; DECOMP BUF ADR TO DE
LD DE , $ E000 ; DECOMP BUF ADR TO DE
CALL DL ZSA2 ; DECOMPRESS
CALL DL ZSA2 ; DECOMPRESS
LD HL , $ E000 ; DECOMP BUF ADR TO HL
LD HL , $ E000 ; DECOMP BUF ADR TO HL
@ -8431,17 +8444,33 @@ FNT_BYTE:
# IF ( MEMMGR = = MM_Z280 )
# IF ( MEMMGR = = MM_Z280 )
; HBX_PEEK FOR Z280 DOES NOT WORK WHEN INVOKED WHILE IN
; HBX_PEEK FOR Z280 DOES NOT WORK WHEN INVOKED WHILE IN
; SYSTEM MODE. THIS SHOULD BE REVISITED.
; 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
# ELSE
PUSH DE
PUSH DE
LD A ,( FNT_BID )
LD A ,( FNT_BID )
@ -9689,6 +9718,7 @@ FNT_CMPMASK .EQU $00
; FONT LOCATION MAP
; FONT LOCATION MAP
;
;
FNT_MAP:
FNT_MAP:
.DB 'F' , 'M' ; TABLE SIGNATURE
# IFDEF USEFONT6X8
# IFDEF USEFONT6X8
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER.
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER.
;;; .DB FONTID_6X8 | FNT_CMPMASK
;;; .DB FONTID_6X8 | FNT_CMPMASK