diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index c53feceb..dd2d09be 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -1,6 +1,7 @@ Version 3.0.1 ------------- - WBW: Increase XModem timeout waiting for host to start sending +- WBW: Update TMS driver to dynamically increase Z180 I/O W/S inside driver Version 3.0.0 ------------- diff --git a/Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom.pdf b/Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom_v.1.1.pdf similarity index 70% rename from Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom.pdf rename to Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom_v.1.1.pdf index eb4d5b48..8a215aa1 100644 Binary files a/Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom.pdf and b/Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom_v.1.1.pdf differ diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 69374e39..73fe5b0e 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -38,6 +38,7 @@ ; 2018-01-28 [WBW] Added support for MYM sound files ; 2019-11-21 [WBW] Added table-driven configuration ; 2020-02-11 [WBW] Made hardware config & detection more flexible +; 2020-03-29 [WBW] Fix error in Z180 I/O W/S bracketing ;_______________________________________________________________________________ ; ; ToDo: @@ -124,8 +125,10 @@ PROBE: LD C,A ; ... to C IN A,(C) ; Read back value in register 2 CP $AA ; Value as written? - JR Z,MAT ; Hardware matched! + PUSH AF ; Save AF CALL NORMIO ; Back to normal I/O speeds + POP AF ; Recover AF + JR Z,MAT ; Hardware matched! JR CFGSEL ; And keep trying ; MAT: @@ -766,7 +769,7 @@ FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM) TMP .DB 0 ; work around use of undocumented Z80 ; -MSGBAN .DB "Tune Player for RomWBW v2.4, 23-Mar-2020",0 +MSGBAN .DB "Tune Player for RomWBW v2.5, 29-Mar-2020",0 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 diff --git a/Source/HBIOS/Config/N8_std.asm b/Source/HBIOS/Config/N8_std.asm index f66b2692..d8654771 100644 --- a/Source/HBIOS/Config/N8_std.asm +++ b/Source/HBIOS/Config/N8_std.asm @@ -25,8 +25,8 @@ #include "cfg_n8.asm" ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 1 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 3 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 1d046bce..65db812a 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -34,8 +34,8 @@ RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE ; Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 1 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 3 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 2fb8b48a..4759cf61 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -51,11 +51,11 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! ; #IF (TMSMODE == TMSMODE_N8) -; BELOW WAS TUNED FOR N8 AT 18MHZ WITH 3 IO WAIT STATES -#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP +; BELOW WAS TUNED FOR N8 AT 18MHZ +#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 +#DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S #ENDIF ; ;====================================================================== @@ -63,6 +63,10 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ;====================================================================== ; TMS_INIT: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF +; #IF (TMSMODE == TMSMODE_SCG) LD A,$FF OUT (TMS_ACR),A ; INIT AUX CONTROL REG @@ -85,7 +89,7 @@ TMS_INIT: TMS_INIT1: CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE - CALL TMS_VDARES + CALL TMS_VDARES1 #IF (TMSMODE == TMSMODE_N8) CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER #ENDIF @@ -150,6 +154,10 @@ TMS_VDAQRY: RET TMS_VDARES: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF +TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION LD DE,0 ; ROW = 0, COL = 0 CALL TMS_XY ; SEND CURSOR TO TOP LEFT LD A,' ' ; BLANK THE SCREEN @@ -175,6 +183,9 @@ TMS_VDASCS: CALL PANIC ; NOT IMPLEMENTED (YET) TMS_VDASCP: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF CALL TMS_CLRCUR CALL TMS_XY ; SET CURSOR POSITION CALL TMS_SETCUR @@ -190,6 +201,9 @@ TMS_VDASCO: RET TMS_VDAWRC: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF CALL TMS_CLRCUR ; CURSOR OFF LD A,E ; CHARACTER TO WRITE GOES IN A CALL TMS_PUTCHAR ; PUT IT ON THE SCREEN @@ -198,6 +212,9 @@ TMS_VDAWRC: RET TMS_VDAFIL: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF CALL TMS_CLRCUR LD A,E ; FILL CHARACTER GOES IN A EX DE,HL ; FILL LENGTH GOES IN DE @@ -207,6 +224,9 @@ TMS_VDAFIL: RET TMS_VDACPY: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF CALL TMS_CLRCUR ; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS TMS_POS ; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT @@ -220,6 +240,9 @@ TMS_VDACPY: RET TMS_VDASCR: +#IF (CPUFAM == CPU_Z180) + CALL TMS_Z180IO +#ENDIF CALL TMS_CLRCUR TMS_VDASCR0: LD A,E ; LOAD E INTO A @@ -689,6 +712,39 @@ TMS_BLKCPY3: ; RET ; +;---------------------------------------------------------------------- +; Z180 LOW SPEED I/O CODE BRACKETING +;---------------------------------------------------------------------- +; +#IF (CPUFAM == CPU_Z180) +; +TMS_Z180IO: + ; HOOK CALLERS RETURN TO RESTORE DCNTL + EX (SP),HL ; SAVE HL & HL := RET ADR + LD (TMS_Z180IOR),HL ; SET RET ADR + LD HL,TMS_Z180IOX ; HL := SPECIAL RETURN ADR + EX (SP),HL ; RESTORE HL, INS NEW RET ADR + ; SET Z180 MAX I/O WAIT STATES + PUSH AF ; SAVE AF + IN0 A,(Z180_DCNTL) ; GET CURRENT Z180 DCNTL + LD (TMS_DCNTL),A ; SAVE IT + OR %00110000 ; NEW DCNTL VALUE (MAX I/O W/S) + OUT0 (Z180_DCNTL),A ; IMPLEMENT IT + POP AF ; RESTORE AF + ; BACK TO CALLER +TMS_Z180IOR .EQU $+1 + JP $0000 ; BACK TO CALLER +; +TMS_Z180IOX: + ; RESTORE ORIGINAL DCNTL + PUSH AF ; SAVE AF + LD A,(TMS_DCNTL) ; ORIG DCNTL + OUT0 (Z180_DCNTL),A ; IMPLEMENT IT + POP AF ; RESTORE AF + RET ; DONE +; +#ENDIF +; ;================================================================================================== ; TMS DRIVER - DATA ;================================================================================================== @@ -751,6 +807,10 @@ TMS_INIT9918: ; TMS_INIT9918LEN .EQU $ - TMS_INIT9918 ; +#IF (CPUFAM == CPU_Z180) +TMS_DCNTL .DB $00 ; SAVE Z180 DCNTL AS NEEDED +#ENDIF +; ;================================================================================================== ; TMS DRIVER - INSTANCE DATA ;==================================================================================================