|
|
@ -1,5 +1,5 @@ |
|
|
;====================================================================== |
|
|
;====================================================================== |
|
|
; TM9918 AND V9958 VDU DRIVER |
|
|
|
|
|
|
|
|
; TMS9918, V9938/58 VDU DRIVER |
|
|
; |
|
|
; |
|
|
; WRITTEN BY: DOUGLAS GOODALL |
|
|
; WRITTEN BY: DOUGLAS GOODALL |
|
|
; UPDATED BY: WAYNE WARTHEN -- 4/7/2013 |
|
|
; UPDATED BY: WAYNE WARTHEN -- 4/7/2013 |
|
|
@ -43,32 +43,21 @@ |
|
|
TMSCTRL1: .EQU 1 ; CONTROL BITS |
|
|
TMSCTRL1: .EQU 1 ; CONTROL BITS |
|
|
TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT |
|
|
TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT |
|
|
; |
|
|
; |
|
|
DEVECHO "TMS: MODE=" |
|
|
|
|
|
; |
|
|
|
|
|
#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958)) |
|
|
|
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
|
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
|
|
|
|
|
|
TMSKBD_NONE .EQU 0 |
|
|
|
|
|
TMSKBD_KBD .EQU 1 |
|
|
|
|
|
TMSKBD_PPK .EQU 2 |
|
|
|
|
|
TMSKBD_MKY .EQU 3 |
|
|
|
|
|
TMSKBD_NABU .EQU 4 |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_MSX) |
|
|
|
|
|
DEVECHO "MSX" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSX9958) |
|
|
|
|
|
DEVECHO "MSX9958" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
TMSKBD .EQU TMSKBD_NONE ; ASSUME NONE |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_COLECO) |
|
|
|
|
|
TMS_DATREG .EQU $BE ; READ/WRITE DATA |
|
|
|
|
|
TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL |
|
|
|
|
|
DEVECHO "COLECO" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
DEVECHO "TMS: MODE=" |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_MSXKBD) |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_SCG) |
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
TMS_KBDDATA .EQU $60 ; KBD CTLR DATA PORT |
|
|
|
|
|
TMS_KBDST .EQU $64 ; KBD CTLR STATUS/CMD PORT |
|
|
|
|
|
DEVECHO "MSXKBD" |
|
|
|
|
|
|
|
|
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER |
|
|
|
|
|
DEVECHO "SCG" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_N8) |
|
|
#IF (TMSMODE == TMSMODE_N8) |
|
|
@ -78,14 +67,29 @@ TMS_PPIA .EQU $84 ; PPI PORT A |
|
|
TMS_PPIB .EQU $85 ; PPI PORT B |
|
|
TMS_PPIB .EQU $85 ; PPI PORT B |
|
|
TMS_PPIC .EQU $86 ; PPI PORT C |
|
|
TMS_PPIC .EQU $86 ; PPI PORT C |
|
|
TMS_PPIX .EQU $87 ; PPI CONTROL PORT |
|
|
TMS_PPIX .EQU $87 ; PPI CONTROL PORT |
|
|
|
|
|
TMSKBD .SET TMSKBD_PPK ; PPK KEYBOARD |
|
|
DEVECHO "N8" |
|
|
DEVECHO "N8" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_SCG) |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSX) |
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER |
|
|
|
|
|
DEVECHO "SCG" |
|
|
|
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSXKBD) |
|
|
|
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
|
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
|
|
|
TMS_KBDDATA .EQU $60 ; KBD CTLR DATA PORT |
|
|
|
|
|
TMS_KBDST .EQU $64 ; KBD CTLR STATUS/CMD PORT |
|
|
|
|
|
TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD |
|
|
|
|
|
DEVECHO "MSXKBD" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSXMKY) |
|
|
|
|
|
TMS_DATREG .EQU $98 ; READ/WRITE DATA |
|
|
|
|
|
TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
|
|
|
TMSKBD .SET TMSKBD_MKY ; MSX KEYBOARD |
|
|
|
|
|
DEVECHO "MSXMKY" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_MBC) |
|
|
#IF (TMSMODE == TMSMODE_MBC) |
|
|
@ -94,40 +98,38 @@ TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL |
|
|
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER |
|
|
TMS_ACR .EQU $9C ; AUX CONTROL REGISTER |
|
|
TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT |
|
|
TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT |
|
|
TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT |
|
|
TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT |
|
|
|
|
|
TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD |
|
|
DEVECHO "MBC" |
|
|
DEVECHO "MBC" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_COLECO) |
|
|
|
|
|
TMS_DATREG .EQU $BE ; READ/WRITE DATA |
|
|
|
|
|
TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL |
|
|
|
|
|
DEVECHO "COLECO" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_DUO) |
|
|
#IF (TMSMODE == TMSMODE_DUO) |
|
|
TMS_DATREG .EQU $A0 ; READ/WRITE DATA |
|
|
TMS_DATREG .EQU $A0 ; READ/WRITE DATA |
|
|
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL |
|
|
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL |
|
|
TMS_ACR .EQU $A6 ; AUX CONTROL REGISTER |
|
|
TMS_ACR .EQU $A6 ; AUX CONTROL REGISTER |
|
|
TMS_KBDDATA .EQU $4C ; KBD CTLR DATA PORT |
|
|
TMS_KBDDATA .EQU $4C ; KBD CTLR DATA PORT |
|
|
TMS_KBDST .EQU $4D ; KBD CTLR STATUS/CMD PORT |
|
|
TMS_KBDST .EQU $4D ; KBD CTLR STATUS/CMD PORT |
|
|
|
|
|
TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD |
|
|
DEVECHO "DUO" |
|
|
DEVECHO "DUO" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_NABU) |
|
|
TMS_DATREG .EQU $A0 ; READ/WRITE DATA |
|
|
TMS_DATREG .EQU $A0 ; READ/WRITE DATA |
|
|
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL |
|
|
TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL |
|
|
; |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_NABU40) |
|
|
|
|
|
DEVECHO "NABU-40" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_NABU80) |
|
|
|
|
|
DEVECHO "NABU-80" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
TMSKBD .SET TMSKBD_NABU ; NABU KEYBOARD |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
DEVECHO ", IO=" |
|
|
DEVECHO ", IO=" |
|
|
DEVECHO TMS_DATREG |
|
|
DEVECHO TMS_DATREG |
|
|
#IF (TMSTIMENABLE & (INTMODE > 0)) |
|
|
|
|
|
DEVECHO ", INTERRUPTS ENABLED" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
DEVECHO "\n" |
|
|
|
|
|
; |
|
|
; |
|
|
TMS_ROWS .EQU 24 |
|
|
TMS_ROWS .EQU 24 |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMS80COLS) |
|
|
TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA |
|
|
TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA |
|
|
TMS_FNTSIZE .EQU 8*256 ; ### JLC Mod for JBL compatibility ### = 8x8 Font 256 Chars |
|
|
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 |
|
|
TMS_CHRVADDR .EQU $0000 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400 |
|
|
@ -140,23 +142,47 @@ TMS_FNTSIZE .EQU 8*256 ; ### JLC Mod for JBL compatibility ### = 8x8 Font 256 C |
|
|
TMS_CHRVADDR .EQU $3800 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400 |
|
|
TMS_CHRVADDR .EQU $3800 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400 |
|
|
TMS_COLS .EQU 40 |
|
|
TMS_COLS .EQU 40 |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
DEVECHO ", SCREEN=" |
|
|
|
|
|
DEVECHO TMS_COLS |
|
|
|
|
|
DEVECHO "X" |
|
|
|
|
|
DEVECHO TMS_ROWS |
|
|
; |
|
|
; |
|
|
#DEFINE USEFONT8X8 |
|
|
#DEFINE USEFONT8X8 |
|
|
#DEFINE TMS_FONT FONT8X8 |
|
|
#DEFINE TMS_FONT FONT8X8 |
|
|
; |
|
|
; |
|
|
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER |
|
|
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER |
|
|
; |
|
|
; |
|
|
#IF (TMSMODE == TMSMODE_N8) |
|
|
|
|
|
|
|
|
DEVECHO ", KEYBOARD=" |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSKBD == TMSKBD_NONE) |
|
|
|
|
|
DEVECHO "NONE" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSKBD == TMSKBD_PPK) |
|
|
PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT |
|
|
PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT |
|
|
|
|
|
DEVECHO "PPK" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) |
|
|
|
|
|
KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_KBD) |
|
|
|
|
|
KBDENABLE .SET TRUE ; INCLUDE PS2 KEYBOARD SUPPORT |
|
|
|
|
|
DEVECHO "KBD" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_NABU40) |(TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_MKY) |
|
|
|
|
|
MKYENABLE .SET TRUE ; INCLUDE MSX KEYBOARD SUPPORT |
|
|
|
|
|
DEVECHO "MKY" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSKBD == TMSKBD_NABU) |
|
|
NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT |
|
|
NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT |
|
|
|
|
|
DEVECHO "NABU" |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
#IF (TMSTIMENABLE & (INTMODE > 0)) |
|
|
|
|
|
DEVECHO ", INTERRUPTS ENABLED" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
DEVECHO "\n" |
|
|
; |
|
|
; |
|
|
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES |
|
|
; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES |
|
|
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! |
|
|
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! |
|
|
@ -166,8 +192,8 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT |
|
|
#DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S |
|
|
#DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S |
|
|
;#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP ; 20 W/S ### JLC Mod for Clock/2 (9 MHz) ### |
|
|
;#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP ; 20 W/S ### JLC Mod for Clock/2 (9 MHz) ### |
|
|
#ELSE |
|
|
#ELSE |
|
|
; BELOW WAS TUNED FOR SBC AT 8MHZ |
|
|
|
|
|
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
; BELOW WAS TUNED FOR Z80 AT 8MHZ |
|
|
|
|
|
#IF (TMS80COLS) |
|
|
#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) |
|
|
#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 |
|
|
#ELSE |
|
|
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S |
|
|
#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S |
|
|
@ -210,32 +236,29 @@ TMS_INIT: |
|
|
#IF (TMSMODE == TMSMODE_SCG) |
|
|
#IF (TMSMODE == TMSMODE_SCG) |
|
|
PRTS("SCG$") |
|
|
PRTS("SCG$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_MBC) |
|
|
|
|
|
PRTS("MBC$") |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_DUO) |
|
|
|
|
|
PRTS("DUO$") |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_N8) |
|
|
#IF (TMSMODE == TMSMODE_N8) |
|
|
PRTS("N8$") |
|
|
PRTS("N8$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_MSX) |
|
|
#IF (TMSMODE == TMSMODE_MSX) |
|
|
PRTS("MSX$") |
|
|
PRTS("MSX$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_COLECO) |
|
|
|
|
|
PRTS("COLECO$") |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSXKBD) |
|
|
#IF (TMSMODE == TMSMODE_MSXKBD) |
|
|
PRTS("MSXKBD$") |
|
|
PRTS("MSXKBD$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_MSX9958) |
|
|
|
|
|
PRTS("MSXV9958$") |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MSXMKY) |
|
|
|
|
|
PRTS("MSXMKY$") |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_MBC) |
|
|
|
|
|
PRTS("MBC$") |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSMODE == TMSMODE_COLECO) |
|
|
|
|
|
PRTS("COLECO$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_NABU40) |
|
|
|
|
|
PRTS("NABU-40$") |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_DUO) |
|
|
|
|
|
PRTS("DUO$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (TMSMODE == TMSMODE_NABU80) |
|
|
|
|
|
PRTS("NABU-80$") |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_NABU) |
|
|
|
|
|
PRTS("NABU$") |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
PRTS(" IO=0x$") |
|
|
PRTS(" IO=0x$") |
|
|
@ -250,19 +273,27 @@ TMS_INIT: |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
TMS_INIT1: |
|
|
TMS_INIT1: |
|
|
|
|
|
CALL PC_SPACE |
|
|
|
|
|
LD A,TMS_COLS |
|
|
|
|
|
CALL PRTDEC8 |
|
|
|
|
|
LD A,'X' |
|
|
|
|
|
CALL COUT |
|
|
|
|
|
LD A,TMS_ROWS |
|
|
|
|
|
CALL PRTDEC8 |
|
|
|
|
|
; |
|
|
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_CLEAR ; CLEAR SCREEN, HOME CURSOR |
|
|
CALL TMS_CLEAR ; CLEAR SCREEN, HOME CURSOR |
|
|
#IF (PPKENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_PPK) |
|
|
CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER |
|
|
CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (KBDENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_KBD) |
|
|
CALL KBD_INIT ; INITIALIZE 8242 KEYBOARD DRIVER |
|
|
CALL KBD_INIT ; INITIALIZE 8242 KEYBOARD DRIVER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (MKYENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_MKY) |
|
|
CALL MKY_INIT ; INITIALIZE MKY KEYBOARD DRIVER |
|
|
CALL MKY_INIT ; INITIALIZE MKY KEYBOARD DRIVER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (NABUKBENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_NABU) |
|
|
CALL NABUKB_INIT ; INITIALIZE NABU KEYBOARD DRIVER |
|
|
CALL NABUKB_INIT ; INITIALIZE NABU KEYBOARD DRIVER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
@ -285,7 +316,7 @@ TMS_INIT1: |
|
|
LD C, TMSCTRL1 |
|
|
LD C, TMSCTRL1 |
|
|
CALL TMS_SET |
|
|
CALL TMS_SET |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMSMODE == TMSMODE_NABU) |
|
|
; 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) |
|
|
OUT (NABU_RSEL),A ; SELECT IT |
|
|
OUT (NABU_RSEL),A ; SELECT IT |
|
|
@ -328,30 +359,30 @@ TMS_FNTBL: |
|
|
.DW TMS_VDAFIL |
|
|
.DW TMS_VDAFIL |
|
|
.DW TMS_VDACPY |
|
|
.DW TMS_VDACPY |
|
|
.DW TMS_VDASCR |
|
|
.DW TMS_VDASCR |
|
|
#IF (PPKENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_NONE) |
|
|
|
|
|
.DW TMS_STAT |
|
|
|
|
|
.DW TMS_FLUSH |
|
|
|
|
|
.DW TMS_READ |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSKBD == TMSKBD_PPK) |
|
|
.DW PPK_STAT |
|
|
.DW PPK_STAT |
|
|
.DW PPK_FLUSH |
|
|
.DW PPK_FLUSH |
|
|
.DW PPK_READ |
|
|
.DW PPK_READ |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (KBDENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_KBD) |
|
|
.DW KBD_STAT |
|
|
.DW KBD_STAT |
|
|
.DW KBD_FLUSH |
|
|
.DW KBD_FLUSH |
|
|
.DW KBD_READ |
|
|
.DW KBD_READ |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (MKYENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_MKY) |
|
|
.DW MKY_STAT |
|
|
.DW MKY_STAT |
|
|
.DW MKY_FLUSH |
|
|
.DW MKY_FLUSH |
|
|
.DW MKY_READ |
|
|
.DW MKY_READ |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF (NABUKBENABLE) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_NABU) |
|
|
.DW NABUKB_STAT |
|
|
.DW NABUKB_STAT |
|
|
.DW NABUKB_FLUSH |
|
|
.DW NABUKB_FLUSH |
|
|
.DW NABUKB_READ |
|
|
.DW NABUKB_READ |
|
|
#ENDIF |
|
|
|
|
|
#IF ((!PPKENABLE) & (!KBDENABLE) & (!NABUKBENABLE) & (!MKYENABLE)) |
|
|
|
|
|
.DW TMS_STAT |
|
|
|
|
|
.DW TMS_FLUSH |
|
|
|
|
|
.DW TMS_READ |
|
|
|
|
|
#ENDIF |
|
|
#ENDIF |
|
|
.DW TMS_VDARDC |
|
|
.DW TMS_VDARDC |
|
|
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2)) |
|
|
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2)) |
|
|
@ -567,7 +598,7 @@ TMS_SET: |
|
|
;---------------------------------------------------------------------- |
|
|
;---------------------------------------------------------------------- |
|
|
; |
|
|
; |
|
|
TMS_WR: |
|
|
TMS_WR: |
|
|
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMS80COLS) |
|
|
; CLEAR R#14 FOR V9958 |
|
|
; CLEAR R#14 FOR V9958 |
|
|
HB_DI |
|
|
HB_DI |
|
|
XOR A |
|
|
XOR A |
|
|
@ -667,7 +698,7 @@ TMS_CRTINIT2: |
|
|
DJNZ TMS_CRTINIT2 ; LOOP |
|
|
DJNZ TMS_CRTINIT2 ; LOOP |
|
|
; |
|
|
; |
|
|
; ENABLE WAIT SIGNAL IF 9938/58 |
|
|
; ENABLE WAIT SIGNAL IF 9938/58 |
|
|
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMS80COLS) |
|
|
LD C,25 ; REGISTER 25 |
|
|
LD C,25 ; REGISTER 25 |
|
|
LD A,%00000100 ; ONLY WTE BIT SET |
|
|
LD A,%00000100 ; ONLY WTE BIT SET |
|
|
CALL TMS_SET ; DO IT |
|
|
CALL TMS_SET ; DO IT |
|
|
@ -1077,9 +1108,9 @@ TMS_TSTINT: |
|
|
|
|
|
|
|
|
TMS_INTHNDL: |
|
|
TMS_INTHNDL: |
|
|
|
|
|
|
|
|
;#IF MKYENABLE |
|
|
|
|
|
; CALL MKY_INT |
|
|
|
|
|
;#ENDIF |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_MKY) |
|
|
|
|
|
CALL MKY_INT |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
CALL HB_TIMINT ; RETURN NZ - HANDLED |
|
|
CALL HB_TIMINT ; RETURN NZ - HANDLED |
|
|
OR $FF |
|
|
OR $FF |
|
|
@ -1103,21 +1134,21 @@ TMS_COLOR_TBL .DB $01,$08,$02,$0A,$04,$06,$0C,$0F,$0E,$09,$03,$0B,$05,$0D,$07,$0 |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
TMS_IDAT: |
|
|
TMS_IDAT: |
|
|
#IF ((TMSMODE == TMSMODE_N8)) |
|
|
|
|
|
|
|
|
#IF ((TMSKBD == TMSKBD_NONE) | (TMSKBD == TMSKBD_MKY) | (TMSKBD == TMSKBD_NABU)) |
|
|
|
|
|
.FILL 4,0 ; DUMMY KEYBOARD CONFIG DATA |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
#IF (TMSKBD == TMSKBD_PPK) |
|
|
.DB TMS_PPIA ; PPI PORT A |
|
|
.DB TMS_PPIA ; PPI PORT A |
|
|
.DB TMS_PPIB ; PPI PORT B |
|
|
.DB TMS_PPIB ; PPI PORT B |
|
|
.DB TMS_PPIC ; PPI PORT C |
|
|
.DB TMS_PPIC ; PPI PORT C |
|
|
.DB TMS_PPIX ; PPI CONTROL PORT |
|
|
.DB TMS_PPIX ; PPI CONTROL PORT |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) |
|
|
|
|
|
|
|
|
#IF (TMSKBD == TMSKBD_KBD) |
|
|
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER |
|
|
.DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER |
|
|
.DB TMS_KBDST ; 8242 CMD/STATUS PORT |
|
|
.DB TMS_KBDST ; 8242 CMD/STATUS PORT |
|
|
.DB TMS_KBDDATA ; 8242 DATA PORT |
|
|
.DB TMS_KBDDATA ; 8242 DATA PORT |
|
|
.DB 0 ; FILLER |
|
|
.DB 0 ; FILLER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
#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 |
|
|
|
|
|
; |
|
|
; |
|
|
.DB TMS_DATREG |
|
|
.DB TMS_DATREG |
|
|
.DB TMS_CMDREG |
|
|
.DB TMS_CMDREG |
|
|
@ -1164,11 +1195,11 @@ TMS_IDAT: |
|
|
; 5S Fifth sprite (not displayed) detected. Value in FS* is valid. |
|
|
; 5S Fifth sprite (not displayed) detected. Value in FS* is valid. |
|
|
; INT Set at each screen update, used for interrupts. |
|
|
; INT Set at each screen update, used for interrupts. |
|
|
; |
|
|
; |
|
|
#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) |
|
|
|
|
|
|
|
|
#IF (TMS80COLS) |
|
|
; |
|
|
; |
|
|
; NOTE: YAMAHA 9938/58 DOCUMENTATION SAYS R3 IS SAME AS 9918 (ADR >> 10), |
|
|
; NOTE: YAMAHA 9938/58 DOCUMENTATION SAYS R3 IS SAME AS 9918 (ADR >> 10), |
|
|
; BUT THIS SEEMS TO BE WRONG AND CORRECTLY DOCUMENTED AT |
|
|
; BUT THIS SEEMS TO BE WRONG AND CORRECTLY DOCUMENTED AT |
|
|
; https://www.msx.org/wiki/Screen_Modes_Description#SCREEN_0_in_80-column_.28Text_mode_2.29 |
|
|
|
|
|
|
|
|
; https://www.msx.org/wiki/Screen_Modes_Description#SCREEN_0_in_80-column_.28Text_mode_2.29 |
|
|
; BITS 1-0 SHOULD BE 1. BITS 8-2 SHOULD BE (ADR >> 8). |
|
|
; BITS 1-0 SHOULD BE 1. BITS 8-2 SHOULD BE (ADR >> 8). |
|
|
; |
|
|
; |
|
|
; ### JLC Mod |
|
|
; ### JLC Mod |
|
|
|