diff --git a/Source/HBIOS/Config/RCEZ80_std.asm b/Source/HBIOS/Config/RCEZ80_std.asm index 7aa6a916..a2d33aed 100644 --- a/Source/HBIOS/Config/RCEZ80_std.asm +++ b/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) diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index e8fbbf40..8c776315 100644 --- a/Source/HBIOS/tms.asm +++ b/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