57 lines
1.2 KiB
C#
57 lines
1.2 KiB
C#
using BizHawk.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|
{
|
|
internal sealed class INLNSF : NesBoardBase
|
|
{
|
|
|
|
// config
|
|
int prg_bank_mask_4k;
|
|
|
|
// state
|
|
int[] prg = new int[8];
|
|
|
|
public override void SyncState(Serializer ser)
|
|
{
|
|
base.SyncState(ser);
|
|
ser.Sync(nameof(prg), ref prg, true);
|
|
}
|
|
|
|
public override bool Configure(EDetectionOrigin origin)
|
|
{
|
|
switch (Cart.BoardType)
|
|
{
|
|
case "MAPPER031":
|
|
AssertChr(0, 8);
|
|
if(Cart.ChrSize == 0)
|
|
Cart.VramSize = 8;
|
|
break;
|
|
case "MAPPER0031-00":
|
|
AssertVram(8);
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
SetMirrorType(CalculateMirrorType(Cart.PadH, Cart.PadV));
|
|
AssertPrg(16, 32, 64, 128, 256, 512, 1024);
|
|
Cart.WramSize = 0;
|
|
prg_bank_mask_4k = Cart.PrgSize / 4 - 1;
|
|
prg[7] = prg_bank_mask_4k;
|
|
return true;
|
|
}
|
|
|
|
public override void WriteExp(int addr, byte value)
|
|
{
|
|
if (addr >= 0x1000)
|
|
prg[addr & 0x07] = value & prg_bank_mask_4k;
|
|
else
|
|
base.WriteExp(addr, value);
|
|
}
|
|
|
|
public override byte ReadPrg(int addr)
|
|
{
|
|
return Rom[prg[(addr & 0x7000) >> 12] << 12 | addr & 0x0fff];
|
|
}
|
|
}
|
|
}
|