The memory mapper, or pager, allows the cpu to change which physical addresses its virtual addresses map to. This is kind of opposite of 391, since the virtual address space is smaller than the physical one. Targeting 4k page size (aka 0x1000).
You need to decide if the mapper will just map sdram addresses or if it will map the entire address space. Mapping the entire address space makes more sense, however you will have to be careful not to map away the mapper or you will never be able change the mappings again!
In e.g. x86, the mappings are based on a control register which is always available. May you could implement something like that?
Should IO not always be mapped though? cause thats pretty much it.
Video memory (when it exists) is going to be large though and will want to be mapped.
Right now the address map has the peripherals, the ROM, and the ram. The peripherals take up approximately 4k (eventually), and so does the ROM. I think that the IO should have the ability to be paged out, and it will be up to the user to not do that.
One downside of this is that the 4k for the peripherals and the 4k for rom will be wasted in sdram. that is 8K out of 32M, or 0.02%. It is what it is.
Long story short: final decision: The address decoding will be done with the physical address, except for the control register interface which will always have the same virtual address.