Dr Jefyll wrote:
Hm, so are you only partially motivated to achieve higher clocks speeds?
Exactly
I've actually never been very motivated to run with high clock speeds, but I am curious to see in practice how limited it will be with PDIP parts. If it works well on a PCB then I might even try it on a breadboard!
Quote:
I like the simplicity of sending /Phi2 directly to the RAM /CS, but with some RAMs that arrangement will degrade the response time. It may be faster to have /CS low in advance of the time /OE or /WE (triggered by Phi2) go low, and the datasheet will reveal whether this is true. If so, use Phi2 to qualify /WE and /OE. I'm sure you've seen this done with a couple of NAND gates, or half of a 'AHC139 can also do the trick.
It is potentially slower with the RAM that I'm using, yes (e.g. 5-6ns slower, though comparable to the address decoding time, and my inverted phi2 also incurs 3-4ns of propagation delay in theory). I wonder if it's worth thinking through the timing more carefully, it might just be wishful thinking though, if something else will limit it more in the end. An AHC139 would take a little longer than the NAND inverter I put in the circuit, but would be able to output much richer information in that time, so does seem better overall.
Quote:
It's late and I'm sleepy, but I suspect your wait-state system needs a re-think. Will it perform as expected when two successive ROM accesses occur? It seems to me the first access will cause the counter to leave its "standby" count of $F and count up to 1, 2, 4 or 8, at which point the wait state ends. But if the next memory access also has A15 high, it seems to me you won't get the same sequence as before. That's because the counter isn't beginning from its "standby" count of $F.
Yes you're right, I'll check out your linked circuit, thanks for that. I also have a variant that uses a D flipflop to drive RDY, with the counter just used to reset the flipflop, so perhaps that's also an alternative that still doesn't have too much propagation delay. I didn't plan to use this counter for long - in the longer term if this goes well I am planning to just have a more self-contained I/O system that can take its time signalling when the data is ready, so the main CPU circuit will just have a flipflop driving RDY.
Edit: Looking at your circuit, it's interesting. I could even use two 163s with opposite preset bit patterns, to generate a nearly-synchronized inverted clock signal. But having to use an oscillator of double the final clock frequency is something I was trying to avoid.
Quote:
I like the (admittedly "very crude"
) logic for selecting the '259 output port. But won't vector fetches still access the ROM (and hence the '259)?
There shouldn't be any vector fetches in this iteration apart from on the initial reset, as I don't handle IRQs or NMIs, and won't issue BRK instructions.
Quote:
This needn't entirely spoil the idea, though. Instead of A3 to A0, you could use higher-order address lines to drive the '259. With said arrangement, vector fetches would only access one of the 259's eight outputs, rather than several.
... though another benefit of that would be that it would form a kind of progress indicator while the ROM gets copied to RAM!
Quote:
ETA: Oops, sorry! -- one more detail. The /EN input of the '259 mustn't be allowed to go low until the CPU address lines driving it are stable; otherwise writes to unintended addresses may occur. Qualifying /EN with Phi2 will prevent the rogue writes.
I think that would be fine in my current circuit (broken though it is) because the /EN input goes low at or shortly after the rising edge of PHI2, which ought to be after the address lines are stable, and it goes high again at another rising edge of PHI2 after the wait is complete.