109 lines
4.9 KiB
C++
Executable File
109 lines
4.9 KiB
C++
Executable File
#ifdef SMEMORY_CPP
|
|
|
|
void sBus::map_generic() {
|
|
switch(cartridge.mapper()) {
|
|
case Cartridge::LoROM: {
|
|
map(MapLinear, 0x00, 0x7f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x80, 0xff, 0x8000, 0xffff, memory::cartrom);
|
|
map_generic_sram();
|
|
} break;
|
|
|
|
case Cartridge::HiROM: {
|
|
map(MapShadow, 0x00, 0x3f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x40, 0x7f, 0x0000, 0xffff, memory::cartrom);
|
|
map(MapShadow, 0x80, 0xbf, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0xc0, 0xff, 0x0000, 0xffff, memory::cartrom);
|
|
map_generic_sram();
|
|
} break;
|
|
|
|
case Cartridge::ExLoROM: {
|
|
map(MapLinear, 0x00, 0x3f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x40, 0x7f, 0x0000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x80, 0xbf, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0xc0, 0xff, 0x0000, 0xffff, memory::cartrom);
|
|
map_generic_sram();
|
|
} break;
|
|
|
|
case Cartridge::ExHiROM: {
|
|
map(MapShadow, 0x00, 0x3f, 0x8000, 0xffff, memory::cartrom, 0x400000);
|
|
map(MapLinear, 0x40, 0x7f, 0x0000, 0xffff, memory::cartrom, 0x400000);
|
|
map(MapShadow, 0x80, 0xbf, 0x8000, 0xffff, memory::cartrom, 0x000000);
|
|
map(MapLinear, 0xc0, 0xff, 0x0000, 0xffff, memory::cartrom, 0x000000);
|
|
map_generic_sram();
|
|
} break;
|
|
|
|
case Cartridge::SA1ROM: {
|
|
//mapped via SA1Bus::init();
|
|
} break;
|
|
|
|
case Cartridge::SPC7110ROM: {
|
|
map(MapDirect, 0x00, 0x00, 0x6000, 0x7fff, spc7110); //save RAM w/custom logic
|
|
map(MapShadow, 0x00, 0x0f, 0x8000, 0xffff, memory::cartrom); //program ROM
|
|
map(MapDirect, 0x30, 0x30, 0x6000, 0x7fff, spc7110); //save RAM w/custom logic
|
|
map(MapDirect, 0x50, 0x50, 0x0000, 0xffff, spc7110); //decompression MMIO port
|
|
map(MapShadow, 0x80, 0x8f, 0x8000, 0xffff, memory::cartrom); //program ROM
|
|
map(MapLinear, 0xc0, 0xcf, 0x0000, 0xffff, memory::cartrom); //program ROM
|
|
map(MapDirect, 0xd0, 0xff, 0x0000, 0xffff, spc7110); //MMC-controlled data ROM
|
|
} break;
|
|
|
|
case Cartridge::BSXROM: {
|
|
//full map is dynamically mapped by:
|
|
//src/chip/bsx/bsx_cart.cpp : BSXCart::update_memory_map();
|
|
map(MapLinear, 0x00, 0x3f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x80, 0xbf, 0x8000, 0xffff, memory::cartrom);
|
|
} break;
|
|
|
|
case Cartridge::BSCLoROM: {
|
|
map(MapLinear, 0x00, 0x1f, 0x8000, 0xffff, memory::cartrom, 0x000000);
|
|
map(MapLinear, 0x20, 0x3f, 0x8000, 0xffff, memory::cartrom, 0x100000);
|
|
map(MapLinear, 0x70, 0x7f, 0x0000, 0x7fff, memory::cartram, 0x000000);
|
|
map(MapLinear, 0x80, 0x9f, 0x8000, 0xffff, memory::cartrom, 0x200000);
|
|
map(MapLinear, 0xa0, 0xbf, 0x8000, 0xffff, memory::cartrom, 0x100000);
|
|
map(MapLinear, 0xc0, 0xef, 0x0000, 0xffff, bsxflash);
|
|
map(MapLinear, 0xf0, 0xff, 0x0000, 0x7fff, memory::cartram, 0x000000);
|
|
} break;
|
|
|
|
case Cartridge::BSCHiROM: {
|
|
map(MapShadow, 0x00, 0x1f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x20, 0x3f, 0x6000, 0x7fff, memory::cartram);
|
|
map(MapShadow, 0x20, 0x3f, 0x8000, 0xffff, bsxflash);
|
|
map(MapLinear, 0x40, 0x5f, 0x0000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x60, 0x7f, 0x0000, 0xffff, bsxflash);
|
|
map(MapShadow, 0x80, 0x9f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0xa0, 0xbf, 0x6000, 0x7fff, memory::cartram);
|
|
map(MapShadow, 0xa0, 0xbf, 0x8000, 0xffff, bsxflash);
|
|
map(MapLinear, 0xc0, 0xdf, 0x0000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0xe0, 0xff, 0x0000, 0xffff, bsxflash);
|
|
} break;
|
|
|
|
case Cartridge::STROM: {
|
|
map(MapLinear, 0x00, 0x1f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0x20, 0x3f, 0x8000, 0xffff, memory::stArom);
|
|
map(MapLinear, 0x40, 0x5f, 0x8000, 0xffff, memory::stBrom);
|
|
map(MapLinear, 0x60, 0x63, 0x8000, 0xffff, memory::stAram);
|
|
map(MapLinear, 0x70, 0x73, 0x8000, 0xffff, memory::stBram);
|
|
map(MapLinear, 0x80, 0x9f, 0x8000, 0xffff, memory::cartrom);
|
|
map(MapLinear, 0xa0, 0xbf, 0x8000, 0xffff, memory::stArom);
|
|
map(MapLinear, 0xc0, 0xdf, 0x8000, 0xffff, memory::stBrom);
|
|
map(MapLinear, 0xe0, 0xe3, 0x8000, 0xffff, memory::stAram);
|
|
map(MapLinear, 0xf0, 0xf3, 0x8000, 0xffff, memory::stBram);
|
|
} break;
|
|
}
|
|
}
|
|
|
|
void sBus::map_generic_sram() {
|
|
if(memory::cartram.size() == 0 || memory::cartram.size() == -1U) { return; }
|
|
|
|
map(MapLinear, 0x20, 0x3f, 0x6000, 0x7fff, memory::cartram);
|
|
map(MapLinear, 0xa0, 0xbf, 0x6000, 0x7fff, memory::cartram);
|
|
|
|
//research shows only games with very large ROM/RAM sizes require MAD-1 memory mapping of SRAM
|
|
//otherwise, default to safer, larger SRAM address window
|
|
uint16 addr_hi = (memory::cartrom.size() > 0x200000 || memory::cartram.size() > 32 * 1024) ? 0x7fff : 0xffff;
|
|
map(MapLinear, 0x70, 0x7f, 0x0000, addr_hi, memory::cartram);
|
|
if(cartridge.mapper() != Cartridge::LoROM) return;
|
|
map(MapLinear, 0xf0, 0xff, 0x0000, addr_hi, memory::cartram);
|
|
}
|
|
|
|
#endif
|