Update VRC4 with submapper
fixes 2-in-1 - Yuu Yuu + Dragonball Z
This commit is contained in:
parent
17d171148b
commit
0d0e6b5be4
|
@ -83,6 +83,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
int latch6k_value;
|
||||
|
||||
bool isPirate = false;
|
||||
// needed for 2-in-1 - Yuu Yuu + Dragonball Z [p1][!]
|
||||
bool _isBMC = false;
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
|
@ -114,19 +116,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
|
||||
void SyncPRG()
|
||||
{
|
||||
if (prg_mode)
|
||||
if (!_isBMC)
|
||||
{
|
||||
prg_banks_8k[0] = 0xFE;
|
||||
prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]);
|
||||
prg_banks_8k[2] = (byte)(prg_bank_reg_8k[0]);
|
||||
prg_banks_8k[3] = 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
prg_banks_8k[0] = (byte)(prg_bank_reg_8k[0]);
|
||||
prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]);
|
||||
prg_banks_8k[2] = 0xFE;
|
||||
prg_banks_8k[3] = 0xFF;
|
||||
if (prg_mode)
|
||||
{
|
||||
prg_banks_8k[0] = 0xFE;
|
||||
prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]);
|
||||
prg_banks_8k[2] = (byte)(prg_bank_reg_8k[0]);
|
||||
prg_banks_8k[3] = 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
prg_banks_8k[0] = (byte)(prg_bank_reg_8k[0]);
|
||||
prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]);
|
||||
prg_banks_8k[2] = 0xFE;
|
||||
prg_banks_8k[3] = 0xFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,6 +177,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
remap = AddrA0A1_A2A3;
|
||||
Cart.wram_size = 8;
|
||||
break;
|
||||
case "MAPPER023_BMC":
|
||||
type = 4;
|
||||
remap = AddrA0A1_A2A3;
|
||||
Cart.wram_size = 8;
|
||||
_isBMC = true;
|
||||
prg_banks_8k[0] = (byte)(prg_bank_reg_8k[0]);
|
||||
prg_banks_8k[1] = (byte)(prg_bank_reg_8k[1]);
|
||||
prg_banks_8k[2] = 0xFE;
|
||||
prg_banks_8k[3] = 0xFF;
|
||||
break;
|
||||
case "MAPPER025":
|
||||
type = 4;
|
||||
remap = AddrA3A2_A1A0;
|
||||
|
@ -293,6 +308,31 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
if ((addr & 1) == 1 && extrabig_chr)
|
||||
chr_value = value & 0x1F;
|
||||
|
||||
// special instructions for BMC 2 in 1
|
||||
if (_isBMC)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
prg_banks_8k[prg_mode?1:0] = (byte)((prg_banks_8k[0] & 0x20) | (value & 0x1F));
|
||||
return;
|
||||
}
|
||||
else if (addr >= 0x2000 && addr < 0x3000)
|
||||
{
|
||||
prg_banks_8k[1] = (byte)((prg_banks_8k[0] & 0x20) | (value & 0x1F));
|
||||
return;
|
||||
}
|
||||
else if (addr >= 0x3000 && addr < 0x7000)
|
||||
{
|
||||
value = (byte)(value << 2 & 0x20);
|
||||
|
||||
prg_banks_8k[0] = (byte)(value | (prg_banks_8k[0] & 0x1F));
|
||||
prg_banks_8k[1] = (byte)(value | (prg_banks_8k[1] & 0x1F));
|
||||
prg_banks_8k[2] = (byte)(value | (prg_banks_8k[2] & 0x1F));
|
||||
prg_banks_8k[3] = (byte)(value | (prg_banks_8k[3] & 0x1F));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (addr)
|
||||
{
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue