diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 3c13dfb5..bd82c8e3 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 diff --git a/Source/HBIOS/romfonts.asm b/Source/HBIOS/romfonts.asm index 8e892822..2cfd77be 100644 --- a/Source/HBIOS/romfonts.asm +++ b/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 diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm index bdc9414c..740dba3d 100644 --- a/Source/HBIOS/vrc.asm +++ b/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