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. 32
      Source/HBIOS/tms.asm

6
Source/HBIOS/Config/RCEZ80_std.asm

@ -26,7 +26,7 @@
; ;
#include "cfg_rcez80.asm" #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 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) 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) 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) MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM)

32
Source/HBIOS/tms.asm

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

Loading…
Cancel
Save