Failed attempt at supporting Mapper 121
This commit is contained in:
parent
d4a467815c
commit
33225700ad
|
@ -168,6 +168,7 @@ sha1:C282206800426557E7DD66ABF70FEAB6FE9DA1B2 San Guo Zhi (Ch) NES board=MAPPE
|
|||
sha1:E6F080CCF09C62C038D35E3BD503C4E57E716571 B San Guo Zhi (Ch) NES board=MAPPER252;VRAM=2;BATT=true;PAD_H=1
|
||||
sha1:E2BFF2002F2DD0AA184D5791D008A1350C477AE0 B San Guo Zhi (Ch) NES board=MAPPER252;VRAM=2;BATT=true;PAD_H=1
|
||||
sha1:B37E6002EF84C172DB413DF4B41451192ADBDC36 Shen Hua Jian Yun III (Ch) NES board=MAPPER253;VRAM=2;BATT=true;PAD_H=1
|
||||
sha1:CE1B236ED0EAC133A3DE5411AEF57228220885EF G Super Sonic 5 (1997) (Unl) NES board=MAPPER121
|
||||
;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------
|
||||
|
|
|
@ -674,6 +674,7 @@
|
|||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper052.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper074.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper115.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper121.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper123.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper165.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper182.cs" />
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
using BizHawk.Common;
|
||||
|
||||
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||
{
|
||||
// Adapted from Nestopia src
|
||||
public sealed class Mapper121 : MMC3Board_Base
|
||||
{
|
||||
private ByteBuffer exRegs = new ByteBuffer(3);
|
||||
|
||||
private readonly byte[] lut = { 0x83, 0x83, 0x42, 0x00 };
|
||||
|
||||
public override bool Configure(NES.EDetectionOrigin origin)
|
||||
{
|
||||
switch (Cart.board_type)
|
||||
{
|
||||
case "MAPPER121":
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
BaseSetup();
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("exRegs", ref exRegs);
|
||||
}
|
||||
|
||||
public override byte ReadEXP(int addr)
|
||||
{
|
||||
if (addr >= 0x1000)
|
||||
{
|
||||
return exRegs[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
return base.ReadEXP(addr);
|
||||
}
|
||||
}
|
||||
|
||||
protected override int Get_PRGBank_8K(int addr)
|
||||
{
|
||||
if (addr == 0x4000 && exRegs[0] > 0)
|
||||
{
|
||||
return exRegs[0] & prg_mask;
|
||||
}
|
||||
|
||||
else if (addr == 0x6000 && exRegs[1] > 0)
|
||||
{
|
||||
return exRegs[1] & prg_mask;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return base.Get_PRGBank_8K(addr);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteEXP(int addr, byte value)
|
||||
{
|
||||
if (addr >= 0x1000) // 0x5000-0x5FFF
|
||||
{
|
||||
exRegs[2] = lut[value & 0x3];
|
||||
}
|
||||
}
|
||||
|
||||
public override void WritePRG(int addr, byte value)
|
||||
{
|
||||
if (addr < 0x2000)
|
||||
{
|
||||
if ((addr & 3) == 3)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case 0x28: exRegs[0] = 0x0C; break;
|
||||
case 0x26: exRegs[1] = 0x08; break;
|
||||
case 0xAB: exRegs[1] = 0x07; break;
|
||||
case 0xEC: exRegs[1] = 0x0D; break;
|
||||
case 0xEF: exRegs[1] = 0x0D; break;
|
||||
case 0xFF: exRegs[1] = 0x09; break;
|
||||
|
||||
case 0x20: exRegs[1] = 0x13; break;
|
||||
case 0x29: exRegs[1] = 0x1B; break;
|
||||
|
||||
default: exRegs[0] = 0x0; exRegs[1] = 0x0; break;
|
||||
}
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// base.WritePRG(addr, value);
|
||||
//}
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// base.WritePRG(addr, value);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue