@ -51,11 +51,11 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
;
;
# IF ( TMSMODE = = TMSMODE_N8 )
# IF ( TMSMODE = = TMSMODE_N8 )
; BELOW WAS TUNED FOR N8 AT 18MHZ WITH 3 IO WAIT STATES
# DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP
; BELOW WAS TUNED FOR N8 AT 18MHZ
# DEFINE TMS_IODELAY EX ( SP ), HL \ EX ( SP ), HL ; 38 W/S
# ELSE
# ELSE
; BELOW WAS TUNED FOR SBC AT 8MHZ
; BELOW WAS TUNED FOR SBC AT 8MHZ
# DEFINE TMS_IODELAY NOP \ NOP
# DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S
# ENDIF
# ENDIF
;
;
;======================================================================
;======================================================================
@ -63,6 +63,10 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;======================================================================
;======================================================================
;
;
TMS_INIT:
TMS_INIT:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
;
# IF ( TMSMODE = = TMSMODE_SCG )
# IF ( TMSMODE = = TMSMODE_SCG )
LD A , $ FF
LD A , $ FF
OUT ( TMS_ACR ), A ; INIT AUX CONTROL REG
OUT ( TMS_ACR ), A ; INIT AUX CONTROL REG
@ -85,7 +89,7 @@ TMS_INIT:
TMS_INIT1:
TMS_INIT1:
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE
CALL TMS_VDARES
CALL TMS_VDARES1
# IF ( TMSMODE = = TMSMODE_N8 )
# IF ( TMSMODE = = TMSMODE_N8 )
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
# ENDIF
# ENDIF
@ -150,6 +154,10 @@ TMS_VDAQRY:
RET
RET
TMS_VDARES:
TMS_VDARES:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION
LD DE , 0 ; ROW = 0, COL = 0
LD DE , 0 ; ROW = 0, COL = 0
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
LD A , ' ' ; BLANK THE SCREEN
LD A , ' ' ; BLANK THE SCREEN
@ -175,6 +183,9 @@ TMS_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET)
CALL PANIC ; NOT IMPLEMENTED (YET)
TMS_VDASCP:
TMS_VDASCP:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
CALL TMS_CLRCUR
CALL TMS_CLRCUR
CALL TMS_XY ; SET CURSOR POSITION
CALL TMS_XY ; SET CURSOR POSITION
CALL TMS_SETCUR
CALL TMS_SETCUR
@ -190,6 +201,9 @@ TMS_VDASCO:
RET
RET
TMS_VDAWRC:
TMS_VDAWRC:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
CALL TMS_CLRCUR ; CURSOR OFF
CALL TMS_CLRCUR ; CURSOR OFF
LD A , E ; CHARACTER TO WRITE GOES IN A
LD A , E ; CHARACTER TO WRITE GOES IN A
CALL TMS_PUTCHAR ; PUT IT ON THE SCREEN
CALL TMS_PUTCHAR ; PUT IT ON THE SCREEN
@ -198,6 +212,9 @@ TMS_VDAWRC:
RET
RET
TMS_VDAFIL:
TMS_VDAFIL:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
CALL TMS_CLRCUR
CALL TMS_CLRCUR
LD A , E ; FILL CHARACTER GOES IN A
LD A , E ; FILL CHARACTER GOES IN A
EX DE , HL ; FILL LENGTH GOES IN DE
EX DE , HL ; FILL LENGTH GOES IN DE
@ -207,6 +224,9 @@ TMS_VDAFIL:
RET
RET
TMS_VDACPY:
TMS_VDACPY:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
CALL TMS_CLRCUR
CALL TMS_CLRCUR
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS TMS_POS
; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS TMS_POS
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT
; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT
@ -220,6 +240,9 @@ TMS_VDACPY:
RET
RET
TMS_VDASCR:
TMS_VDASCR:
# IF ( CPUFAM = = CPU_Z180 )
CALL TMS_Z180IO
# ENDIF
CALL TMS_CLRCUR
CALL TMS_CLRCUR
TMS_VDASCR0:
TMS_VDASCR0:
LD A , E ; LOAD E INTO A
LD A , E ; LOAD E INTO A
@ -689,6 +712,39 @@ TMS_BLKCPY3:
;
;
RET
RET
;
;
;----------------------------------------------------------------------
; Z180 LOW SPEED I/O CODE BRACKETING
;----------------------------------------------------------------------
;
# IF ( CPUFAM = = CPU_Z180 )
;
TMS_Z180IO:
; HOOK CALLERS RETURN TO RESTORE DCNTL
EX ( SP ), HL ; SAVE HL & HL := RET ADR
LD ( TMS_Z180IOR ), HL ; SET RET ADR
LD HL , TMS_Z180IOX ; HL := SPECIAL RETURN ADR
EX ( SP ), HL ; RESTORE HL, INS NEW RET ADR
; SET Z180 MAX I/O WAIT STATES
PUSH AF ; SAVE AF
IN0 A ,( Z180_DCNTL ) ; GET CURRENT Z180 DCNTL
LD ( TMS_DCNTL ), A ; SAVE IT
OR % 00110000 ; NEW DCNTL VALUE (MAX I/O W/S)
OUT0 ( Z180_DCNTL ), A ; IMPLEMENT IT
POP AF ; RESTORE AF
; BACK TO CALLER
TMS_Z180IOR .EQU $ + 1
JP $ 0000 ; BACK TO CALLER
;
TMS_Z180IOX:
; RESTORE ORIGINAL DCNTL
PUSH AF ; SAVE AF
LD A ,( TMS_DCNTL ) ; ORIG DCNTL
OUT0 ( Z180_DCNTL ), A ; IMPLEMENT IT
POP AF ; RESTORE AF
RET ; DONE
;
# ENDIF
;
;==================================================================================================
;==================================================================================================
; TMS DRIVER - DATA
; TMS DRIVER - DATA
;==================================================================================================
;==================================================================================================
@ -751,6 +807,10 @@ TMS_INIT9918:
;
;
TMS_INIT9918LEN .EQU $ - TMS_INIT9918
TMS_INIT9918LEN .EQU $ - TMS_INIT9918
;
;
# IF ( CPUFAM = = CPU_Z180 )
TMS_DCNTL .DB $ 00 ; SAVE Z180 DCNTL AS NEEDED
# ENDIF
;
;==================================================================================================
;==================================================================================================
; TMS DRIVER - INSTANCE DATA
; TMS DRIVER - INSTANCE DATA
;==================================================================================================
;==================================================================================================