Have a look here:
http://problemkaputt.de/portar.htm#memoryMSX computers even have a layer above the usual flexible memory mapping known from EP, PCW, NCxxx etc.
First you select...
- a "primary slot" with port #A8
- or even a "secondary slot" (also called sub-slot) at ram address #ffff
...for every of the four 16K page within the 64K visible RAM area.
Selecting the secondary slot is a little bit weird, as you always have to map the primary slot to #c000-#ffff to be able to select its subslots.
Why "slots"? The MSX has 2 external "expansion ports" (like catridges for game consoles) (and 2 internal ones), and each expansion port can be extended by 4 sub-expansion ports. These are the slots/sub-slots.
A memory expansion is placed inside such a (sub)slot. Let's say you have your memory expansion placed in slot 2, subslot 3. If you want to make it visible for the whole 64K you select slot 2, subslot 3 for each of the four 16K pages.
Now you can use port #FC-#FF for selecting the correct 16K page of the memory expansion for each visible 16K page, as #fc-#ff is always the port where the memory expansion of the current slot can be addressed.
In theory this makes it possible to have 4x4x256x16KB of RAM (=64MB) in the MSX

Slots 0+1 are usually occupied by internal roms etc, so the maximum would be 32MB in practice.
Hope this helped a little bit?