AxibugEmuOnline/References/VirtuaNESex_src_191105/NES/Mapper/Mapper141.cpp
2024-08-05 17:58:53 +08:00

37 lines
794 B
C++

//////////////////////////////////////////////////////////////////////////
// Mapper141 //
//////////////////////////////////////////////////////////////////////////
void Mapper141::Reset()
{
for(INT i=0;i<8;i++) reg[i]=0;
SetVROM_8K_Bank(0);
cmd=0;
SetBank();
}
void Mapper141::WriteLow( WORD addr, BYTE data )
{
addr&=0x4101;
if (addr==0x4100)
cmd=data;
else {
reg[cmd&7]=data;
SetBank();
}
}
void Mapper141::SetBank()
{
SetPROM_32K_Bank(reg[5]&7);
for(INT i=0;i<4;i++){
int bank;
if(reg[7]&1) bank=(reg[0]&7)|((reg[4]&7)<<3);
else bank=(reg[i]&7)|((reg[4]&7)<<3);
bank=(bank<<1)|(i&1);
SetVROM_2K_Bank(i*2, bank);
}
if(reg[7]&1) SetVRAM_Mirror(VRAM_VMIRROR);
else SetVRAM_Mirror(VRAM_HMIRROR);
}