drogon wrote:
Maybe have a look at this for some inspiration/ideas...
http://sunrise-ev.com/6502.htmIt does have a decoder - half a 74'139...
That's a great little design that I quite like, but it feels like a dead end, in that as soon as you're willing to add a single logic chip, you've got the inverter (or similar) that you need and the whole puzzle becomes almost trivial to solve.
BigEd wrote:
Ah, Curt has something there: there are 16 address line outputs. We may have to be much more modest in the size of machine we can make, but surely there's a way to use the top two, or three, or four address lines to help with chip selects?
Yes, that's what I was getting at when I said, "...and halves of any of those blocks." (And yup, the OE also serves as a second "select" for the ROM.)
One opening is perhaps in my erroneous comment that "the reset vector [is] in the top two bytes of the address space"; it's actually in $FFFC/$FFFD, of course. (I have 6800 on the brain, as usual.) That actually does give as A1 low when reading the reset vector, though things then get difficult trying to handle an address space where alternate pairs of bytes are disabled/enabled at startup.
But now that I think about it, the solution to the select issue is probably easy enough: put one of the ROM selects on a PIA line with a pull-down, so that it's selected at startup when the line is an input, but after the system's started and you've copied your OS to RAM you can use that PIA pin to bring that line high. (I hope. It's going to have to be a very weak pull-up, I think, because the 6821 pins have very little drive.)
That still doesn't offer a solution to the RAM write qualification problem, though.
I did just have a look at the MC6850 ACIA data sheet to see if that might help, and it does indeed have its /RTS output (pin 5) low on reset, but unfortunately, unlike the 6821, the chip is not reset with an external signal but instead by writing a register (%xxxxxx11 to the control register), so there's no reliable help there.