BizHawk/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/CamericaGoldenFive.cs

70 lines
1.3 KiB
C#
Raw Normal View History

2016-09-17 18:02:11 +00:00
using BizHawk.Common;
namespace BizHawk.Emulation.Cores.Nintendo.NES
{
// Adapted from
public sealed class CamericaGoldenFive : NES.NESBoardBase
{
private ByteBuffer regs = new ByteBuffer(2);
private int prg_bank_mask_16k;
public override bool Configure(NES.EDetectionOrigin origin)
{
switch (Cart.board_type)
{
case "MAPPER104":
break;
default:
return false;
}
prg_bank_mask_16k = Cart.prg_size / 16 - 1;
regs[1] = 0xF;
SetMirrorType(EMirrorType.Vertical);
2016-09-17 18:02:11 +00:00
return true;
}
public override void Dispose()
{
regs.Dispose();
base.Dispose();
}
2016-09-17 18:02:11 +00:00
public override void SyncState(Serializer ser)
{
base.SyncState(ser);
ser.Sync("reg", ref regs);
}
public override void WritePRG(int addr, byte value)
{
if (addr < 0x2000) // 80000
2016-09-17 18:02:11 +00:00
{
if ((value & 8) > 0)
{
regs[0] = (byte)((value << 4 & 0x70) | (regs[0] & 0x0F));
2016-09-17 18:02:11 +00:00
regs[1] = (byte)((value << 4 & 0x70) | 0x0F);
}
}
else if (addr >= 0x4000) // C000
2016-09-17 18:02:11 +00:00
{
regs[0] = (byte)(regs[0] & 0x70 | (value & 0x0F));
2016-09-17 18:02:11 +00:00
}
}
public override byte ReadPRG(int addr)
{
if (addr < 0x4000)
{
return ROM[((regs[0]) << 14) + (addr & 0x3FFF)];
2016-09-17 18:02:11 +00:00
}
else
{
return ROM[((regs[1]) << 14) + (addr & 0x3FFF)];
2016-09-17 18:02:11 +00:00
}
}
}
}