37 lines
794 B
C++
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);
|
|
|
|
}
|