gfoot wrote:
AndersNielsen wrote:
Attached update - that should be more like what I intended, but cost another gate since I can't gate RAM CS with A15... Or "maybe" I can - I'm a bit fuzzy on that. I'll have to pass A15 through my tristate buffer as well and have a pulldown on it as well as the other lines.. I think..?
Hmm. You'd need the RAM's chip select active whenever phi2 is low (for the video side to read from it) and also when phi2 is high so long as A15 is also low. Then the RAM's ~WE is only low if RWB is low while phi2 is high.
To be clear, I think your first diagram still has this problem - the RAM will have its WE enabled whenever the CPU is writing to something, and writing to $8000 will cause writes to $0000.
In fact you probably want to delay WE bit beyond the start of phi2, because at the point phi2 goes high, you enable those transceivers and start giving the RAM a new address to be written to; you need a little time to let that settle before the RAM actually starts writing, otherwise it can corrupt other unrelated addresses. I think we discussed that a bit recently elsewhere!
Correct - that's not unintentional. I'm aware writing to $8000 will also write to RAM and I don't really mind the compromise.
RAM's OE is low when Ø1(B indicates "buffered" and is Ø0 inverted through an and gate) is low while ~RW is LOW. The two gates phi2 goes through before reaching ~WE is ok.
gfoot wrote:
Another point is that you ought to provide some definite signal to U11 pin 9 - it's an input pin on a CMOS IC, so even if you don't care what value it passes through, you need to pull it one way or the other. Connecting it to pin 8 or pin 10 would be an easy fix.
For the second diagram, ~IO_SEL is still the inverse of ~LDCTRL - so one or the other is always active. Writes to $7000-$7FFF will set ~LDCTRL low; and any other operation (any read, or a write to a different address range, including ROM) will set ~IO_SEL. So the way you've set the other 6522 pin becomes pretty important there.
Also correct, sadly. If I run A15 through the '245 and put a pulldown resistor on the other side like A11-A14 for when it floats, I should be able to use it to disable the RAM when reading ROM/phi2 is low. And also ensure a defined state.
I'm afraid it's too slow though.
I guess it's time to dig through some address decoding examples as what I intended isn't as easy as it seemed.