The Z80 peripherals also decode the z80 instructions during M1 fetch, to watch for RETI, so I think they need to be able to run at the same clock speed as the z80.
Mark
Another option except for the DMA is just to use non Zilog parts, they
were OK but even in their heyday often not the best choice. So you can
for example often swap the PIO, CTC and SIO for a single 26C92 derived
chip (which is one reason so many S100 boards used those not the Zilog
parts).
The easy solution is z80 at 20mhz with z80 kio.
Assuming memories and peripherals can keep up, 20MHz CMOS Z80 can reliably operate to 24MHz, some of them up to 30MHz. KIO is rated at 12.5MHz, but it can be overclocked recklessly to 24MHz, even 30MHz. The first picture of this link shows a Z80 with KIO running at 29.5MHz. https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:k80
VGA frequency is 25.175MHz, so it would be nice to run Z80+peripherals at that frequency.
I have a number of UG32F01 LCD panels (monochrome 5.2" 320x240) which has no controller. I'm interested in driving it with Z80 as well. I haven't figure out how to interface to it. Love to hear more about your plan of driving LCD panel directly.
Bill
1. Scanstart, FLM
2. DF, (M)
3. CP1 (line latch)
4. CP2 (data clock),
5. DispOff,
6. D0,
7. D1,
8. D2,
9. D3,
10. VDD (+5V)
11. VSS
12. VEE
13. VO
14. GROUND
If you go by the datasheet, 25MHz Z80 requires memories with negative access time!
Yet, I know for fact that Z80 with 55nS RAM can run to 30MHz.
So I just throw away the data sheet (my mentor is spinning in his grave right now!).
Inserting a wait state to Z80 is actually pretty tricky above 20MHz, so I run everything with 0 wait state.
For memory access, chip select to data valid is the long path, so I enable chip select as early as possible (using MREQ only) and decode the output enable & write enable with additional logic. The CPLD I use is either 15nS or 10nS part.
Phillip Stevens wrote:
The SC130 and SC131 don't use any buffering, and use a 74AHCT139 (using /MREQ and A19 with 4.5ns propagation delay) to generate the chip select.So they should have the chip select available about 5 ns earlier, which may be enough to avoid using a memory wait state.Experimentation will see. ;-)
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
;
Z180_CLKDIV .SET 2 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
Z180_MEMWAIT .SET 1 ; Z180: MEMORY WAIT STATES (0-3)
Z180_IOWAIT .SET 0 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)