Failed attempt at supporting Mapper 121

This commit is contained in:
adelikat 2016-09-17 12:02:46 -04:00
parent d4a467815c
commit 33225700ad
3 changed files with 104 additions and 0 deletions

View File

@ -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
;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------

View File

@ -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" />

View File

@ -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);
//}
}
}
}