Browse Source

eZ80: updated tms.asm to support eZ80 16 bit i/o operations

master
Dean Netherton 2 years ago
parent
commit
4ac7c1213a
  1. 6
      Source/HBIOS/Config/RCEZ80_std.asm
  2. 50
      Source/HBIOS/tms.asm

6
Source/HBIOS/Config/RCEZ80_std.asm

@ -26,7 +26,7 @@
;
#include "cfg_rcez80.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ
;
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
;
@ -44,9 +44,9 @@ EZ80UARTENABLE .SET TRUE ; EZ80UART: ENABLE EZ80 UART DRIVER (EZ80UART.ASM)
;
LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
;
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
TMSMODE .SET TMSMODE_MSX9958 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM)

50
Source/HBIOS/tms.asm

@ -182,9 +182,9 @@ TMS_PREINIT:
; DISABLE INTERRUPT GENERATION UNTIL AFTER INTERRUPT HANDLER
; HAS BEEN INSTALLED.
LD A, (TMS_INITVDU_REG_1)
RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT
RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT
LD (TMS_INITVDU_REG_1), A
LD C, TMSCTRL1
LD C, TMSCTRL1
JP TMS_SET
;
TMS_INIT:
@ -194,6 +194,7 @@ TMS_INIT:
;
#IF ((TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO))
LD A,$FF
EZ80_IO
OUT (TMS_ACR),A ; INIT AUX CONTROL REG
#ENDIF
;
@ -202,6 +203,7 @@ TMS_INIT:
#IF ((TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO))
LD A,$FE
EZ80_IO
OUT (TMS_ACR),A ; CLEAR VDP RESET
#ENDIF
;
@ -288,10 +290,12 @@ TMS_INIT1:
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
; ENABLE VDP INTERRUPTS ON NABU INTERRUPT CONTROLLER
LD A,14 ; PSG R14 (PORT A DATA)
EZ80_IO
OUT (NABU_RSEL),A ; SELECT IT
LD A,(NABU_CTLVAL) ; GET NABU CTL PORT SHADOW REG
SET 4,A ; ENABLE VDP INTERRUPTS
LD (NABU_CTLVAL),A ; UPDATE SHADOW REG
EZ80_IO
OUT (NABU_RDAT),A ; WRITE TO HARDWARE
#ENDIF
;
@ -551,10 +555,12 @@ TMS_READ:
;
TMS_SET:
HB_DI
EZ80_IO
OUT (TMS_CMDREG),A ; WRITE IT
TMS_IODELAY
LD A,C ; GET THE DESIRED REGISTER
OR $80 ; SET BIT 7
EZ80_IO
OUT (TMS_CMDREG),A ; SELECT THE DESIRED REGISTER
TMS_IODELAY
HB_EI
@ -568,13 +574,15 @@ TMS_SET:
;
TMS_WR:
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80))
; CLEAR R#14 FOR V9958
; CLEAR R#14 FOR V9958
HB_DI
XOR A
OUT (TMS_CMDREG), A
XOR A
EZ80_IO
OUT (TMS_CMDREG), A
TMS_IODELAY
LD A, $80 | 14
OUT (TMS_CMDREG), A
LD A, $80 | 14
EZ80_IO
OUT (TMS_CMDREG), A
TMS_IODELAY
HB_EI
#ENDIF
@ -588,9 +596,11 @@ TMS_WR:
TMS_RD:
HB_DI
LD A,L
EZ80_IO
OUT (TMS_CMDREG),A
TMS_IODELAY
LD A,H
EZ80_IO
OUT (TMS_CMDREG),A
TMS_IODELAY
HB_EI
@ -608,10 +618,12 @@ TMS_PROBE:
CALL TMS_WR
; WRITE TEST PATTERN TO FIRST TWO BYTES
LD A,$A5 ; FIRST BYTE
EZ80_IO
OUT (TMS_DATREG),A ; OUTPUT
;TMS_IODELAY ; DELAY
CALL DLY64 ; DELAY
CPL ; COMPLEMENT ACCUM
EZ80_IO
OUT (TMS_DATREG),A ; SECOND BYTE
;TMS_IODELAY ; DELAY
CALL DLY64 ; DELAY
@ -621,11 +633,13 @@ TMS_PROBE:
CALL TMS_RD
; READ TEST PATTERN
LD C,$A5 ; VALUE TO EXPECT
EZ80_IO
IN A,(TMS_DATREG) ; READ FIRST BYTE
;TMS_IODELAY ; DELAY
CALL DLY64 ; DELAY
CP C ; COMPARE
RET NZ ; RETURN ON MISCOMPARE
EZ80_IO
IN A,(TMS_DATREG) ; READ SECOND BYTE
;TMS_IODELAY ; DELAY
CALL DLY64 ; DELAY
@ -646,6 +660,7 @@ TMS_CRTINIT:
LD DE,$4000 ; 16KB
TMS_CRTINIT1:
XOR A
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY ; DELAY
DEC DE
@ -672,7 +687,7 @@ TMS_CRTINIT2:
LD A,%00000100 ; ONLY WTE BIT SET
CALL TMS_SET ; DO IT
#ENDIF
RET
RET
;
;----------------------------------------------------------------------
; CLEAR SCREEN AND HOME CURSOR
@ -730,6 +745,7 @@ TMS_LOADFONT:
LD DE,TMS_FNTSIZE
TMS_LOADFONT1:
LD A,(HL)
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY ; DELAY
INC HL
@ -766,11 +782,13 @@ TMS_SETCUR:
PUSH DE ; PRESERVE DE
LD HL,(TMS_POS) ; GET CURSOR POSITION
CALL TMS_RD ; SETUP TO READ VDU BUF
EZ80_IO
IN A,(TMS_DATREG) ; GET REAL CHAR UNDER CURSOR
TMS_IODELAY ; DELAY
PUSH AF ; SAVE THE CHARACTER
CALL TMS_WR ; SETUP TO WRITE TO THE SAME PLACE
LD A,$FF ; REPLACE REAL CHAR WITH 255
EZ80_IO
OUT (TMS_DATREG),A ; DO IT
TMS_IODELAY ; DELAY
POP AF ; RECOVER THE REAL CHARACTER
@ -794,6 +812,7 @@ TMS_SETCUR0: ; MULT BY 8 FOR FONT INDEX
LD B,8 ; 8 BYTES
LD HL,TMS_BUF ; INTO BUFFER
TMS_SETCUR1: ; READ GLYPH LOOP
EZ80_IO
IN A,(TMS_DATREG) ; GET NEXT BYTE
TMS_IODELAY ; IO DELAY
LD (HL),A ; SAVE VALUE IN BUF
@ -809,6 +828,7 @@ TMS_SETCUR2: ; WRITE INVERTED GLYPH LOOP
LD A,(HL) ; GET THE BYTE
INC HL ; BUMP THE BUF POINTER
XOR $FF ; INVERT THE VALUE
EZ80_IO
OUT (TMS_DATREG),A ; WRITE IT TO VDU
TMS_IODELAY ; IO DELAY
DJNZ TMS_SETCUR2 ; LOOP FOR ALL 8 BYTES OF GLYPH
@ -825,6 +845,7 @@ TMS_CLRCUR: ; REMOVE VIRTUAL CURSOR FROM SCREEN
LD HL,(TMS_POS) ; POINT TO CURRENT CURSOR POS
CALL TMS_WR ; SET UP TO WRITE TO VDU
LD A,(TMS_CURSAV) ; GET THE REAL CHARACTER
EZ80_IO
OUT (TMS_DATREG),A ; WRITE IT
TMS_IODELAY ; IO DELAY
POP HL ; RECOVER HL
@ -864,6 +885,7 @@ TMS_PUTCHAR:
LD HL,(TMS_POS) ; LOAD CURRENT POSITION INTO HL
CALL TMS_WR ; SET THE WRITE ADDRESS
POP AF ; RECOVER CHARACTER TO WRITE
EZ80_IO
OUT (TMS_DATREG),A ; WRITE THE CHARACTER
TMS_IODELAY
LD HL,(TMS_POS) ; LOAD CURRENT POSITION INTO HL
@ -885,6 +907,7 @@ TMS_FILL:
;
TMS_FILL1:
LD A,C ; RECOVER CHARACTER TO WRITE
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY
DEC DE
@ -910,6 +933,7 @@ TMS_SCROLL0: ; READ LINE THAT IS ONE PAST CURRENT DESTINATION
LD DE,TMS_BUF
LD B,TMS_COLS
TMS_SCROLL1:
EZ80_IO
IN A,(TMS_DATREG)
TMS_IODELAY
LD (DE),A
@ -923,6 +947,7 @@ TMS_SCROLL1:
LD B,TMS_COLS
TMS_SCROLL2:
LD A,(DE)
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY
INC DE
@ -939,6 +964,7 @@ TMS_SCROLL2:
LD A,' '
LD B,TMS_COLS
TMS_SCROLL3:
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY
DJNZ TMS_SCROLL3
@ -963,6 +989,7 @@ TMS_RSCROLL0: ; READ THE LINE THAT IS ONE PRIOR TO CURRENT DESTINATION
LD DE,TMS_BUF ; POINT TO BUFFER
LD B,TMS_COLS ; LOOP FOR EACH COLUMN
TMS_RSCROLL1:
EZ80_IO
IN A,(TMS_DATREG) ; GET THE CHAR
TMS_IODELAY ; RECOVER
LD (DE),A ; SAVE IN BUFFER
@ -976,6 +1003,7 @@ TMS_RSCROLL1:
LD B,TMS_COLS ; INIT LOOP COUNTER
TMS_RSCROLL2:
LD A,(DE) ; LOAD THE CHAR
EZ80_IO
OUT (TMS_DATREG),A ; WRITE TO SCREEN
TMS_IODELAY ; DELAY
INC DE ; BUMP BUF POINTER
@ -992,6 +1020,7 @@ TMS_RSCROLL2:
LD A,' '
LD B,TMS_COLS
TMS_RSCROLL3:
EZ80_IO
OUT (TMS_DATREG),A
TMS_IODELAY
DJNZ TMS_RSCROLL3
@ -1013,6 +1042,7 @@ TMS_BLKCPY1:
LD DE,TMS_BUF ; POINT TO BUFFER
LD B,C
TMS_BLKCPY2:
EZ80_IO
IN A,(TMS_DATREG) ; GET THE NEXT BYTE
TMS_IODELAY ; DELAY
LD (DE),A ; SAVE IN BUFFER
@ -1027,6 +1057,7 @@ TMS_BLKCPY2:
LD B,C
TMS_BLKCPY3:
LD A,(DE) ; GET THE CHAR FROM BUFFER
EZ80_IO
OUT (TMS_DATREG),A ; WRITE TO VDU
TMS_IODELAY ; DELAY
INC DE ; BUMP BUF PTR
@ -1069,7 +1100,8 @@ TMS_Z180IOX:
#IF (TMSTIMENABLE & (INTMODE > 0))
TMS_TSTINT:
IN A,(TMS_CMDREG) ; TEST FOR INT FLAG
EZ80_IO
IN A,(TMS_CMDREG) ; TEST FOR INT FLAG
AND $80
JR NZ,TMS_INTHNDL
AND $00 ; RETURN Z - NOT HANDLED

Loading…
Cancel
Save