Support 40 and 80 Column Video for NABU

- 40 column mode will work with original TMS9918 video chip
- 80 column mode requires FPGA TMS video chip replacement
This commit is contained in:
Wayne Warthen
2024-04-17 17:02:41 -07:00
parent 47120dcf8c
commit e41cd6d8d2
25 changed files with 49 additions and 56 deletions

View File

@@ -48,10 +48,6 @@ TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT
#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958))
TMS_DATREG .EQU $98 ; READ/WRITE DATA
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
;TMS_PPIA .EQU 0 ; PPI PORT A
;TMS_PPIB .EQU 0 ; PPI PORT B
;TMS_PPIC .EQU 0 ; PPI PORT C
;TMS_PPIX .EQU 0 ; PPI CONTROL PORT
;
#IF (TMSMODE == TMSMODE_MSX)
.ECHO "MSX"
@@ -64,10 +60,6 @@ TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
#IF (TMSMODE == TMSMODE_COLECO)
TMS_DATREG .EQU $BE ; READ/WRITE DATA
TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL
;TMS_PPIA .EQU 0 ; PPI PORT A
;TMS_PPIB .EQU 0 ; PPI PORT B
;TMS_PPIC .EQU 0 ; PPI PORT C
;TMS_PPIX .EQU 0 ; PPI CONTROL PORT
.ECHO "COLECO"
#ENDIF
;
@@ -93,10 +85,6 @@ TMS_PPIX .EQU $87 ; PPI CONTROL PORT
TMS_DATREG .EQU $98 ; READ/WRITE DATA
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER
;TMS_PPIA .EQU 0 ; PPI PORT A
;TMS_PPIB .EQU 0 ; PPI PORT B
;TMS_PPIC .EQU 0 ; PPI PORT C
;TMS_PPIX .EQU 0 ; PPI CONTROL PORT
.ECHO "SCG"
#ENDIF
;
@@ -104,10 +92,6 @@ TMS_ACR .EQU $9C ; AUX CONTROL REGISTER
TMS_DATREG .EQU $98 ; READ/WRITE DATA
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER
;TMS_PPIA .EQU 0 ; PPI PORT A
;TMS_PPIB .EQU 0 ; PPI PORT B
;TMS_PPIC .EQU 0 ; PPI PORT C
;TMS_PPIX .EQU 0 ; PPI CONTROL PORT
TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT
TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT
.ECHO "MBC"
@@ -117,19 +101,21 @@ TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT
TMS_DATREG .EQU $A0 ; READ/WRITE DATA
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL
TMS_ACR .EQU $A6 ; AUX CONTROL REGISTER
;TMS_PPIA .EQU 0 ; PPI PORT A
;TMS_PPIB .EQU 0 ; PPI PORT B
;TMS_PPIC .EQU 0 ; PPI PORT C
;TMS_PPIX .EQU 0 ; PPI CONTROL PORT
TMS_KBDDATA .EQU $4C ; KBD CTLR DATA PORT
TMS_KBDST .EQU $4D ; KBD CTLR STATUS/CMD PORT
.ECHO "DUO"
#ENDIF
;
#IF (TMSMODE == TMSMODE_NABU)
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
TMS_DATREG .EQU $A0 ; READ/WRITE DATA
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL
.ECHO "NABU"
;
#IF (TMSMODE == TMSMODE_NABU40)
.ECHO "NABU-40"
#ENDIF
#IF (TMSMODE == TMSMODE_NABU80)
.ECHO "NABU-80"
#ENDIF
#ENDIF
;
.ECHO ", IO="
@@ -141,7 +127,7 @@ TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL
;
TMS_ROWS .EQU 24
;
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80))
TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA
TMS_FNTSIZE .EQU 8*256 ; ### JLC Mod for JBL compatibility ### = 8x8 Font 256 Chars
TMS_CHRVADDR .EQU $0000 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400
@@ -168,7 +154,7 @@ PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT
KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT
#ENDIF
;
#IF (TMSMODE == TMSMODE_NABU)
#IF ((TMSMODE == TMSMODE_NABU40) |(TMSMODE == TMSMODE_NABU80))
NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT
#ENDIF
;
@@ -181,7 +167,7 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT
;#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP ; 20 W/S ### JLC Mod for Clock/2 (9 MHz) ###
#ELSE
; BELOW WAS TUNED FOR SBC AT 8MHZ
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
#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
@@ -244,8 +230,11 @@ TMS_INIT:
#IF (TMSMODE == TMSMODE_MSX9958)
PRTS("RC_V9958$")
#ENDIF
#IF (TMSMODE == TMSMODE_NABU)
PRTS("NABU$")
#IF (TMSMODE == TMSMODE_NABU40)
PRTS("NABU-40$")
#ENDIF
#IF (TMSMODE == TMSMODE_NABU80)
PRTS("NABU-80$")
#ENDIF
;
PRTS(" IO=0x$")
@@ -272,7 +261,7 @@ TMS_INIT1:
#IF MKYENABLE
CALL MKY_INIT ; INITIALIZE MKY KEYBOARD DRIVER
#ENDIF
#IF (TMSMODE == TMSMODE_NABU)
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
CALL NABUKB_INIT ; INITIALIZE NABU KEYBOARD DRIVER
#ENDIF
@@ -329,7 +318,7 @@ TMS_FNTBL:
.DW KBD_FLUSH
.DW KBD_READ
#ENDIF
#IF (TMSMODE == TMSMODE_NABU)
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
.DW NABUKB_STAT
.DW NABUKB_FLUSH
.DW NABUKB_READ
@@ -557,7 +546,7 @@ TMS_SET:
;----------------------------------------------------------------------
;
TMS_WR:
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80))
; CLEAR R#14 FOR V9958
XOR A
OUT (TMS_CMDREG), A
@@ -653,7 +642,7 @@ TMS_CRTINIT2:
DJNZ TMS_CRTINIT2 ; LOOP
;
; ENABLE WAIT SIGNAL IF 9938/58
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80))
LD C,25 ; REGISTER 25
LD A,%00000100 ; ONLY WTE BIT SET
CALL TMS_SET ; DO IT
@@ -1101,7 +1090,7 @@ TMS_IDAT:
.DB TMS_KBDDATA ; 8242 DATA PORT
.DB 0 ; FILLER
#ENDIF
#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_COLECO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_COLECO) | (TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
.FILL 4,0 ; DUMMY KEYBOARD CONFIG DATA
#ENDIF
;
@@ -1150,7 +1139,7 @@ TMS_IDAT:
; 5S Fifth sprite (not displayed) detected. Value in FS* is valid.
; INT Set at each screen update, used for interrupts.
;
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU))
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80))
;
; NOTE: YAMAHA 9938/58 DOCUMENTATION SAYS R3 IS SAME AS 9918 (ADR >> 10),
; BUT THIS SEEMS TO BE WRONG AND CORRECTLY DOCUMENTED AT