|
|
|
@ -5454,7 +5454,7 @@ SYS_RESUSER: |
|
|
|
; |
|
|
|
IN0 A,(Z180_ITC) ; GET ITC REGISTER |
|
|
|
XOR $80 ; PRECLEAR TRAP BIT |
|
|
|
RET M ; IF TRAP BIT NOT SET, DONE |
|
|
|
JP M,SYS_RESUSER3 ; IF TRAP BIT NOT SET, DONE |
|
|
|
; |
|
|
|
; HANDLE INVALID OPCODE |
|
|
|
DEC HL ; BACK UP TO OPCODE START |
|
|
|
@ -5488,6 +5488,7 @@ SYS_RESUSER2: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
SYS_RESUSER3: |
|
|
|
; RESET ACTIVE VIDEO DISPLAY ATTACHED TO EMULATOR |
|
|
|
CALL TERM_RESET |
|
|
|
; |
|
|
|
@ -8287,6 +8288,175 @@ HB_CPUSPD2: |
|
|
|
RET ; AND DONE |
|
|
|
#ENDIF ; CPUFAM != CPU_EZ80 |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; FONT MANAGEMENT ROUTINES |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
; SELECT A FONT BASED ON THE FONT ID PASSED IN REGISTER A. THIS WILL |
|
|
|
; PREPARE TO STREAM FONT DATA VIA THE FNT_NEXT ROUTINE. USES AF, BC, |
|
|
|
; DE, AND HL. RETURNS ZERO (ZF SET) FOR SUCCESS OR NON-ZERO (ZF CLEAR) |
|
|
|
; IF FONT NOT FOUND. |
|
|
|
; |
|
|
|
#IF ROMFONTS |
|
|
|
FNT_BNKID .EQU FONTS_BNK |
|
|
|
FNT_MAP .EQU FONTS_LOC |
|
|
|
#ELSE |
|
|
|
FNT_BNKID .EQU BID_BIOS |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
FNT_SELECT: |
|
|
|
;;;CALL PC_SPACE ; ** DEBUG *** |
|
|
|
;;;CALL PRTHEXBYTE ; ** DEBUG *** |
|
|
|
LD E,A ; DESIRED FONT ID TO E |
|
|
|
LD A,FNT_BNKID ; FONT BANK ID TO A |
|
|
|
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 |
|
|
|
FNT_SELECT0: |
|
|
|
CALL FNT_BYTE ; LOAD THE FONT ID FROM MAP |
|
|
|
;;;CALL PC_SPACE ; ** DEBUG *** |
|
|
|
;;;CALL PRTHEXBYTE ; ** DEBUG *** |
|
|
|
AND $7F ; MASK OUT COMP INDICATOR |
|
|
|
OR A ; CHECK FOR END OF TABLE |
|
|
|
JR Z,FNT_SELECT_ERR ; IF SO, BAIL OUT W/ ERR |
|
|
|
CP E ; CHECK FOR DESIRED FONT ID |
|
|
|
JR Z,FNT_SELECT1 ; IF SO, LOCK IT IN |
|
|
|
INC HL ; BUMP PAST FONT ID |
|
|
|
INC HL ; BUMP TO |
|
|
|
INC HL ; ... NEXT TABLE ENTRY |
|
|
|
JR FNT_SELECT0 ; AND LOOP |
|
|
|
; |
|
|
|
FNT_SELECT1: |
|
|
|
CALL FNT_BYTE ; GET FONT ID BYTE |
|
|
|
PUSH AF ; SAVE IT |
|
|
|
LD C,A ; SAVE IT IN E |
|
|
|
INC HL ; BUMP PAST FONT ID |
|
|
|
CALL FNT_BYTE ; LO BYTE OF ADDRESS |
|
|
|
LD E,A ; PUT IN E |
|
|
|
INC HL ; BUMP |
|
|
|
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 *** |
|
|
|
;;; CALL COUT ; ** DEBUG *** |
|
|
|
;;;#ELSE |
|
|
|
;;; CALL PC_SPACE ; ** DEBUG *** |
|
|
|
;;; 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 |
|
|
|
; |
|
|
|
#IF ((CVDUENABLE | GDCENABLE | TMSENABLE | VGAENABLE | VRCENABLE) & USELZSA2) |
|
|
|
; |
|
|
|
; DECOMPRESS THE FONT DATA. WE USURP $E000-$EFFF AS A BUFFER FOR THE |
|
|
|
; DECOMPRESSED DATA. IF THE FONT DATA IS IN ROM, WE FIRST COPY THE |
|
|
|
; COMPRESSED DATA TO $D000-DFFF. THE BUFFER SIZES ARE LARGE ENOUGH TO |
|
|
|
; CONTAIN THE LARGEST FONT IN ITS DECOMPRESSED STATE. THE BUFFER |
|
|
|
; LOCATIONS ARE SAFE DURING BOOT, BUT *NOT* FOR A RUNNING SYSTEM. SO, |
|
|
|
; ANY FONT THAT MUST BE RELOADED AFTER BOOT WILL NEED TO BE SAVED IN |
|
|
|
; DECOMPRESSED STATE! SPECIFICALLY THE 6X8 TMS FONT. |
|
|
|
; |
|
|
|
;;;LD A,'C' ; ** DEBUG *** |
|
|
|
;;;CALL COUT ; ** DEBUG *** |
|
|
|
; |
|
|
|
#IF ROMFONTS |
|
|
|
; COPY THE COMPRESSED DATA FROM ROM TO RAM BUFFER |
|
|
|
LD A,(FNT_BID) ; GET ROM FONT BANK ID |
|
|
|
LD (HB_SRCBNK),A ; SETUP SOURCE BANK |
|
|
|
LD A,BID_BIOS ; DEST BANK IS BIOS BANK |
|
|
|
LD (HB_DSTBNK),A ; SETUP DESTINATION BANK |
|
|
|
LD DE,$D000 ; PUT DEST IN DE |
|
|
|
LD BC,$1000 ; BLINDLY COPY 4K |
|
|
|
CALL HBX_BNKCPY ; COPY COMP FONT DATA TO RAM |
|
|
|
; |
|
|
|
; DO THE DECOMPRESSION |
|
|
|
LD HL,$D000 ; COMP BUF ADR TO HL |
|
|
|
LD DE,$E000 ; DECOMP BUF ADR TO DE |
|
|
|
CALL DLZSA2 ; DECOMPRESS |
|
|
|
LD A,BID_BIOS ; BANK OF DECOMP BUF |
|
|
|
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 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#ELSE |
|
|
|
JR FNT_SELECT_ERR ; OOPS, CAN'T DECOMPRESS |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
FNT_SELECT2: |
|
|
|
LD (FNT_PTR),HL ; SAVE STARTING POINTER |
|
|
|
;;;LD A,(FNT_BID) ; ** DEBUG *** |
|
|
|
;;;CALL PC_SPACE ; ** DEBUG *** |
|
|
|
;;;CALL PRTHEXBYTE ; ** DEBUG *** |
|
|
|
;;;LD HL,(FNT_PTR) ; ** DEBUG *** |
|
|
|
;;;CALL PC_SPACE ; ** DEBUG *** |
|
|
|
;;;CALL PRTHEXWORDHL ; ** DEBUG *** |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
|
|
|
|
FNT_SELECT_ERR: |
|
|
|
OR $FF ; SIGNAL FAILURE |
|
|
|
RET |
|
|
|
; |
|
|
|
; RETURN THE NEXT BYTE OF FONT DATA IN REGISTER A. EACH CALL RETURNS |
|
|
|
; THE NEXT BYTE OF DATA. THERE IS NO INDICATION OF THE END OF THE |
|
|
|
; FONT DATA. THE CALLER CONTROLS NUMBER OF BYTES REQUESTED. |
|
|
|
; ONLY REGISTER A IS MODIFIED. |
|
|
|
; |
|
|
|
FNT_NEXT: |
|
|
|
PUSH HL |
|
|
|
LD HL,(FNT_PTR) |
|
|
|
CALL FNT_BYTE |
|
|
|
INC HL |
|
|
|
LD (FNT_PTR),HL |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; |
|
|
|
; HELPER FUNCTION TO RETRIEVE A BYTE OF ROM FONT DATA FROM THE |
|
|
|
; ROM FONT BANK. RETURNS BYTE FROM (FNT_BID:HL). RETURNS BYTE IN A. |
|
|
|
; ALL OTHER REGSITERS UNCHANGED. |
|
|
|
; |
|
|
|
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 |
|
|
|
#ELSE |
|
|
|
PUSH DE |
|
|
|
LD A,(FNT_BID) |
|
|
|
LD D,A |
|
|
|
HB_DI |
|
|
|
CALL HBX_PEEK |
|
|
|
HB_EI |
|
|
|
LD A,E |
|
|
|
POP DE |
|
|
|
RET |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
FNT_BID .DB 0 ; BANK CONTAINING FONT DATA |
|
|
|
FNT_PTR .DW 0 ; POINTER TO NEXT BYTE OF DATA |
|
|
|
; |
|
|
|
HB_UTIL_END .EQU $ |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
@ -9506,68 +9676,87 @@ ORG_FONTS .EQU $ |
|
|
|
; |
|
|
|
MEMECHO "FONTS" |
|
|
|
; |
|
|
|
#IFDEF USEFONT6X8 |
|
|
|
FONT6X8: |
|
|
|
#IF !ROMFONTS |
|
|
|
; |
|
|
|
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER. |
|
|
|
; HIGH BIT OF THE FONTID BYTE INDICATES THAT THE FONT DATA IS COMPRESSED |
|
|
|
; |
|
|
|
#IF USELZSA2 & FALSE |
|
|
|
#INCLUDE "font6x8c.asm" |
|
|
|
#IF USELZSA2 |
|
|
|
FNT_CMPMASK .EQU $80 |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font6x8u.asm" |
|
|
|
FNT_CMPMASK .EQU $00 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; FONT LOCATION MAP |
|
|
|
; |
|
|
|
FNT_MAP: |
|
|
|
#IFDEF USEFONT6X8 |
|
|
|
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER. |
|
|
|
;;; .DB FONTID_6X8 | FNT_CMPMASK |
|
|
|
.DB FONTID_6X8 |
|
|
|
.DW FONT6X8 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X8 |
|
|
|
.DB FONTID_8X8 | FNT_CMPMASK |
|
|
|
.DW FONT8X8 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X11 |
|
|
|
.DB FONTID_8X11 | FNT_CMPMASK |
|
|
|
.DW FONT8X11 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X16 |
|
|
|
.DB FONTID_8X16 | FNT_CMPMASK |
|
|
|
.DW FONT8X16 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
.DB 0 ; END OF TABLE |
|
|
|
; |
|
|
|
#IFDEF USEFONT6X8 |
|
|
|
FONT6X8: |
|
|
|
; |
|
|
|
; FOR NOW, WE NEVER COMPRESS THE 6X8 FONT. SEE TMS DRIVER. |
|
|
|
; |
|
|
|
#IF USELZSA2 & FALSE |
|
|
|
#INCLUDE "font6x8c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font6x8u.asm" |
|
|
|
#ENDIF |
|
|
|
MEMECHO " 6X8" |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X8 |
|
|
|
#IFDEF USEFONT8X8 |
|
|
|
FONT8X8: |
|
|
|
; |
|
|
|
#IF USELZSA2 |
|
|
|
#INCLUDE "font8x8c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font8x8u.asm" |
|
|
|
#ENDIF |
|
|
|
#IF USELZSA2 |
|
|
|
#INCLUDE "font8x8c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font8x8u.asm" |
|
|
|
#ENDIF |
|
|
|
MEMECHO " 8X8" |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X11 |
|
|
|
#IFDEF USEFONT8X11 |
|
|
|
FONT8X11: |
|
|
|
#IF USELZSA2 |
|
|
|
#INCLUDE "font8x11c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font8x11u.asm" |
|
|
|
#ENDIF |
|
|
|
#IF USELZSA2 |
|
|
|
#INCLUDE "font8x11c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font8x11u.asm" |
|
|
|
#ENDIF |
|
|
|
MEMECHO " 8X11" |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IFDEF USEFONT8X16 |
|
|
|
#IFDEF USEFONT8X16 |
|
|
|
FONT8X16: |
|
|
|
#IF USELZSA2 |
|
|
|
#INCLUDE "font8x16c.asm" |
|
|
|
#ELSE |
|
|
|
#INCLUDE "font8x16u.asm" |
|
|
|
#ENDIF |
|
|
|
#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 |
|
|
|
|