79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////
|
||
|
|
// Mapper 51
|
||
|
|
void NES_mapper51::Reset()
|
||
|
|
{
|
||
|
|
bank = 0;
|
||
|
|
mode = 1;
|
||
|
|
Sync_Prg_Banks();
|
||
|
|
parent_NES->ppu->vram_write_protect = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void NES_mapper51::MemoryWriteSaveRAM(uint32 addr, uint8 data)
|
||
|
|
{
|
||
|
|
mode = ((data & 0x10) >> 3) | ((data & 0x02) >> 1);
|
||
|
|
Sync_Prg_Banks();
|
||
|
|
}
|
||
|
|
|
||
|
|
void NES_mapper51::MemoryWrite(uint32 addr, uint8 data)
|
||
|
|
{
|
||
|
|
bank = (data & 0x0f) << 2;
|
||
|
|
if(0xC000 <= addr && addr <= 0xDFFF)
|
||
|
|
{
|
||
|
|
mode = (mode & 0x01) | ((data & 0x10) >> 3);
|
||
|
|
}
|
||
|
|
Sync_Prg_Banks();
|
||
|
|
}
|
||
|
|
|
||
|
|
void NES_mapper51::Sync_Prg_Banks()
|
||
|
|
{
|
||
|
|
switch(mode)
|
||
|
|
{
|
||
|
|
case 0:
|
||
|
|
{
|
||
|
|
set_mirroring(NES_PPU::MIRROR_VERT);
|
||
|
|
set_CPU_bank3(bank | 0x2c | 3);
|
||
|
|
set_CPU_bank4(bank | 0x00 | 0);
|
||
|
|
set_CPU_bank5(bank | 0x00 | 1);
|
||
|
|
set_CPU_bank6(bank | 0x0c | 2);
|
||
|
|
set_CPU_bank7(bank | 0x0c | 3);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 1:
|
||
|
|
{
|
||
|
|
set_mirroring(NES_PPU::MIRROR_VERT);
|
||
|
|
set_CPU_bank3(bank | 0x20 | 3);
|
||
|
|
set_CPU_bank4(bank | 0x00 | 0);
|
||
|
|
set_CPU_bank5(bank | 0x00 | 1);
|
||
|
|
set_CPU_bank6(bank | 0x00 | 2);
|
||
|
|
set_CPU_bank7(bank | 0x00 | 3);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 2:
|
||
|
|
{
|
||
|
|
set_mirroring(NES_PPU::MIRROR_VERT);
|
||
|
|
set_CPU_bank3(bank | 0x2e | 3);
|
||
|
|
set_CPU_bank4(bank | 0x02 | 0);
|
||
|
|
set_CPU_bank5(bank | 0x02 | 1);
|
||
|
|
set_CPU_bank6(bank | 0x0e | 2);
|
||
|
|
set_CPU_bank7(bank | 0x0e | 3);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 3:
|
||
|
|
{
|
||
|
|
set_mirroring(NES_PPU::MIRROR_HORIZ);
|
||
|
|
set_CPU_bank3(bank | 0x20 | 3);
|
||
|
|
set_CPU_bank4(bank | 0x00 | 0);
|
||
|
|
set_CPU_bank5(bank | 0x00 | 1);
|
||
|
|
set_CPU_bank6(bank | 0x00 | 2);
|
||
|
|
set_CPU_bank7(bank | 0x00 | 3);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/////////////////////////////////////////////////////////////////////
|
||
|
|
|