You could have these kinds of memory pages:
* Fixed ROM bank
* Bankswitchable ROM bank
* Fixed RAM bank
* Bankswtichable RAM bank
* IO memory
* RAM that's read by external devices
* RAM that's written to by external devices (basically just IO)
Caching is trivially easy for fixed a ROM or RAM bank which are not used by other devices. Caching a bankswitchable bank requires either invalidating on bankswitch, or knowing the bank switching well enough to just cache everything. Pure IO memory is simple, no caching for that at all. For RAM that's read by other devices, Write-Through caching would work.