Browse Source

TMS Driver Z180 Improvements

- TMS driver udpated to insert Z180 I/O waitstates internally so other code can run at full speed.
- Updated How-To documents from David.
- Fixed TUNE app to properly restore Z180 I/O waitstates after manipulating them.
pull/110/head
Wayne Warthen 6 years ago
parent
commit
a8b29e44f3
  1. 1
      Doc/ChangeLog.txt
  2. BIN
      Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom_v.1.1.pdf
  3. 7
      Source/Apps/Tune/Tune.asm
  4. 4
      Source/HBIOS/Config/N8_std.asm
  5. 4
      Source/HBIOS/cfg_n8.asm
  6. 68
      Source/HBIOS/tms.asm

1
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
-------------

BIN
Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom.pdf → Doc/Contrib/SC126_How-To_No_1_Serial_Comms_Using_Minicom_v.1.1.pdf

Binary file not shown.

7
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

4
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
;

4
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

68
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
;==================================================================================================

Loading…
Cancel
Save