unclouded wrote:
Gah! It's enough to make me wish for the separate I/O space of the Z80, though I think I'd then wish that it were 16-bit wide and use it for extra RAM and/or ROM and be back to square one.
I know this is a 6502 forum, but I do wish to point out that the Z80 always drives all sixteen address lines, and all of the I/O instructions do output a sixteen bit address. However as some of the instructions use the contents of the A register for address bits A8 to A15, some are not very practical. Sinclair and Amstrad however both used sixteen bit I/O addressing for some I/O. The best I/O instructions for this are those using the C register to point to the wanted I/O address, as then the B register supplies A7 to A15
Back to the 6502 (and other systems that use memory mapped I/O), I agree that putting write only registers (such as used for configuration or bank memory) ‘under’ a ROM area is a wise thing to do. Just make sure that there are no unintended writes to this area.
In terms of systems that change their memory map, systems do exist that start-up with a ROM in the memory map (read only) and RAM underneath (write only). Then after copying the ROM to RAM, a special access flips a bit in a hardware register and the ROM is unmapped and at the same time all memory reads will now come from RAM.
Using this could allow far more RAM area, thus freeing up space for normal memory mapped I/O.
But as hinted at earlier, the more complex a system is, the greater the number of other problems that will show themselves. More complex circuitry (if built using individual off the shelf logic) will have longer propagation times, and a more complex system massively increases headaches if it fails to work for any reason.
Mark