mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
V9958: Updated TMS driver to support V9958
This commit is contained in:
@@ -5635,13 +5635,14 @@ PIO_MODE_STR: .TEXT "Output$"
|
||||
; VIDEO DEVICE STRINGS
|
||||
;
|
||||
PS_VDSTRREF:
|
||||
.DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA
|
||||
.DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA, PS_VDV9958
|
||||
;
|
||||
PS_VDVDU .TEXT "VDU$"
|
||||
PS_VDCVDU .TEXT "CVDU$"
|
||||
PS_VDNEC .TEXT "NEC$"
|
||||
PS_VDTMS .TEXT "TMS$"
|
||||
PS_VDVGA .TEXT "VGA$"
|
||||
PS_VDV9958 .TEXT "V9958-$"
|
||||
;
|
||||
; VIDEO TYPE STRINGS
|
||||
;
|
||||
|
||||
@@ -200,6 +200,7 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
|
||||
VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220
|
||||
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
|
||||
VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445
|
||||
VDADEV_V9958 .EQU $50 ; V9958 VDU
|
||||
;
|
||||
; SOUND DEVICE IDS
|
||||
;
|
||||
|
||||
@@ -199,7 +199,8 @@ AYMODE_MSX .EQU 5 ; RC2014 SOUND MODULE REV6 BY ED BRINDLEY ON Z80/Z180 AT MSX
|
||||
TMSMODE_NONE .EQU 0
|
||||
TMSMODE_SCG .EQU 1 ; SCG ECB BOARD
|
||||
TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO
|
||||
TMSMODE_RC .EQU 3 ; RC2014 BUILT-IN VIDEO
|
||||
TMSMODE_RC .EQU 3 ; RC2014 TMS9918 VIDEO BOARD
|
||||
TMSMODE_RCV9958 .EQU 4 ; RC2014 V9958 VIDEO BOARD
|
||||
;
|
||||
; SERIAL DEVICE CONFIGURATION CONSTANTS
|
||||
;
|
||||
@@ -427,7 +428,7 @@ SYSTIM .SET TM_CTC
|
||||
#IF (TMSENABLE & (INTMODE == 1))
|
||||
#IF (TMSTIMENABLE)
|
||||
SYSTIM .SET TM_TMS
|
||||
.ECHO " TMS9918"
|
||||
.ECHO " TMS9918/V9958"
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;======================================================================
|
||||
; N8 VDU DRIVER FOR SBC PROJECT
|
||||
; TM9918 AND V9958 VDU DRIVER
|
||||
;
|
||||
; WRITTEN BY: DOUGLAS GOODALL
|
||||
; UPDATED BY: WAYNE WARTHEN -- 4/7/2013
|
||||
@@ -19,10 +19,10 @@ TMSCTRL1: .EQU 1 ; CONTROL BITS
|
||||
TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT
|
||||
|
||||
#IF TMSTIMENABLE
|
||||
.ECHO "TMS INTERRUPTS ENABLED\n"
|
||||
.ECHO "TMS/V9958 INTERRUPTS ENABLED\n"
|
||||
#ENDIF
|
||||
|
||||
#IF (TMSMODE == TMSMODE_RC)
|
||||
#IF ((TMSMODE == TMSMODE_RC) | (TMSMODE == TMSMODE_RCV9958))
|
||||
TMS_DATREG .EQU $98 ; READ/WRITE DATA
|
||||
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
|
||||
TMS_PPIA .EQU 0 ; PPI PORT A
|
||||
@@ -58,14 +58,21 @@ TMS_PPIX .EQU 0 ; PPI CONTROL PORT
|
||||
#ENDIF
|
||||
;
|
||||
TMS_ROWS .EQU 24
|
||||
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA
|
||||
TMS_COLS .EQU 80
|
||||
#ELSE
|
||||
TMS_FNTVADDR .EQU $0800 ; VRAM ADDRESS OF FONT DATA
|
||||
TMS_COLS .EQU 40
|
||||
#ENDIF
|
||||
;
|
||||
#DEFINE USEFONT8X8
|
||||
#DEFINE TMS_FONT FONT8X8
|
||||
;
|
||||
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
|
||||
;
|
||||
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918 ACCESSES
|
||||
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES
|
||||
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
|
||||
;
|
||||
#IF (CPUFAM == CPU_Z180)
|
||||
@@ -73,7 +80,11 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
|
||||
#DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S
|
||||
#ELSE
|
||||
; BELOW WAS TUNED FOR SBC AT 8MHZ
|
||||
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP ; V9958 NEEDS AT WORST CASE, APPROX 4us (28T) DELAY BETWEEN I/O (WHEN IN TEXT MODE)
|
||||
#ELSE
|
||||
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
;======================================================================
|
||||
@@ -101,7 +112,11 @@ TMS_INIT:
|
||||
LD IY,TMS_IDAT ; POINTER TO INSTANCE DATA
|
||||
;
|
||||
CALL NEWLINE ; FORMATTING
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
PRTS("V9958: IO=0x$")
|
||||
#ELSE
|
||||
PRTS("TMS: IO=0x$")
|
||||
#ENDIF
|
||||
LD A,TMS_DATREG
|
||||
CALL PRTHEXBYTE
|
||||
CALL TMS_PROBE ; CHECK FOR HW EXISTENCE
|
||||
@@ -149,12 +164,6 @@ TMS_INIT1:
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
#IF TMSTIMENABLE
|
||||
; DISABLE INTERRUPT
|
||||
TMS_INT_DIS:
|
||||
|
||||
#ENDIF
|
||||
;
|
||||
;======================================================================
|
||||
; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
|
||||
@@ -230,7 +239,11 @@ TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION
|
||||
RET
|
||||
|
||||
TMS_VDADEV:
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
LD D, VDADEV_V9958
|
||||
#ELSE
|
||||
LD D,VDADEV_TMS ; D := DEVICE TYPE
|
||||
#ENDIF
|
||||
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
|
||||
LD H,TMSMODE ; H := MODE
|
||||
LD L,TMS_DATREG ; L := BASE I/O ADDRESS
|
||||
@@ -366,6 +379,14 @@ TMS_SET:
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
TMS_WR:
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
; CLEAR R#14 FOR V9958
|
||||
XOR A
|
||||
OUT (TMS_CMDREG), A
|
||||
LD A, $80 | 14
|
||||
OUT (TMS_CMDREG), A
|
||||
#ENDIF
|
||||
|
||||
PUSH HL
|
||||
SET 6,H ; SET WRITE BIT
|
||||
CALL TMS_RD
|
||||
@@ -450,8 +471,8 @@ TMS_CRTINIT2:
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
TMS_LOADFONT:
|
||||
; SET WRITE ADDRESS TO $800
|
||||
LD HL,$800
|
||||
; SET WRITE ADDRESS TO TMS_FNTVADDR
|
||||
LD HL,TMS_FNTVADDR
|
||||
CALL TMS_WR
|
||||
|
||||
#IF USELZSA2
|
||||
@@ -470,8 +491,8 @@ TMS_LOADFONT:
|
||||
LD HL,TMS_FONT ; START OF FONT DATA
|
||||
#ENDIF
|
||||
;
|
||||
; FILL $800 BYTES FROM FONTDATA
|
||||
LD DE,$800
|
||||
; FILL TMS_FNTVADDR BYTES FROM FONTDATA
|
||||
LD DE,TMS_FNTVADDR
|
||||
TMS_LOADFONT1:
|
||||
LD A,(HL)
|
||||
OUT (TMS_DATREG),A
|
||||
@@ -532,7 +553,7 @@ TMS_SETCUR0: ; MULT BY 8 FOR FONT INDEX
|
||||
SLA L ; SHIFT LSB INTO CARRY
|
||||
RL H ; SHFT MSB FROM CARRY
|
||||
DJNZ TMS_SETCUR0 ; LOOP 3 TIMES
|
||||
LD DE,$800 ; OFFSET TO START OF FONT TABLE
|
||||
LD DE,TMS_FNTVADDR ; OFFSET TO START OF FONT TABLE
|
||||
ADD HL,DE ; ADD TO FONT INDEX
|
||||
CALL TMS_RD ; SETUP TO READ GLYPH
|
||||
LD B,8 ; 8 BYTES
|
||||
@@ -545,7 +566,7 @@ TMS_SETCUR1: ; READ GLYPH LOOP
|
||||
DJNZ TMS_SETCUR1 ; LOOP FOR 8 BYTES
|
||||
;
|
||||
; NOW WRITE INVERTED GLYPH INTO FONT INDEX 255
|
||||
LD HL,$800 + (255 * 8) ; LOC OF GLPYPH DATA FOR CHAR 255
|
||||
LD HL,TMS_FNTVADDR + (255 * 8) ; LOC OF GLPYPH DATA FOR CHAR 255
|
||||
CALL TMS_WR ; SETUP TO WRITE THE INVERTED GLYPH
|
||||
LD B,8 ; 8 BYTES PER GLYPH
|
||||
LD HL,TMS_BUF ; POINT TO BUFFER
|
||||
@@ -891,16 +912,33 @@ TMS_PORTS:
|
||||
; 5S Fifth sprite (not displayed) detected. Value in FS* is valid.
|
||||
; INT Set at each screen update, used for interrupts.
|
||||
;
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
TMS_INIT9918:
|
||||
.DB $04 ; REG 0 - NO EXTERNAL VID, SET M4 = 1
|
||||
TMS_INIT9918_REG_1:
|
||||
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
|
||||
.DB $03 ; REG 2 - PATTERN NAME TABLE := 0
|
||||
.DB $00 ; REG 3 - NO COLOR TABLE
|
||||
.DB $02 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $1000)
|
||||
.DB $00 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT
|
||||
.DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE
|
||||
.DB $F0 ; REG 7 - WHITE ON BLACK
|
||||
|
||||
.DB $88 ; REG 8 - COLOUR BUS INPUT, DRAM 64K
|
||||
.DB $00 ; REG 9
|
||||
.DB $00 ; REG 10 - COLOUR TABLE A14-A16 (TMS_FNTVADDR - $1000)
|
||||
|
||||
#ELSE ; TMS REGISTER SET
|
||||
.DB $00 ; REG 0 - NO EXTERNAL VID
|
||||
TMS_INIT9918_REG_1:
|
||||
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
|
||||
.DB $00 ; REG 2 - PATTERN NAME TABLE := 0
|
||||
.DB $00 ; REG 3 - NO COLOR TABLE
|
||||
.DB $01 ; REG 4 - SET PATTERN GENERATOR TABLE TO $800
|
||||
.DB $01 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $0800)
|
||||
.DB $00 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT
|
||||
.DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE
|
||||
.DB $F0 ; REG 7 - WHITE ON BLACK
|
||||
#ENDIF
|
||||
;
|
||||
TMS_INIT9918LEN .EQU $ - TMS_INIT9918
|
||||
;
|
||||
@@ -909,6 +947,10 @@ TMS_INIT9918LEN .EQU $ - TMS_INIT9918
|
||||
TMS_DCNTL .DB $00 ; SAVE Z180 DCNTL AS NEEDED
|
||||
#ENDIF
|
||||
|
||||
#IF (TMSMODE == TMSMODE_RCV9958)
|
||||
.ECHO "V9958 instance data occupies "
|
||||
#ELSE
|
||||
.ECHO "TMS instance data occupies "
|
||||
#ENDIF
|
||||
.ECHO $ - TMS_IDAT
|
||||
.ECHO " bytes\n"
|
||||
|
||||
Reference in New Issue
Block a user