2013-11-14 13:15:41 +00:00
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
2012-12-03 19:05:24 +00:00
|
|
|
|
{
|
2013-08-25 01:08:17 +00:00
|
|
|
|
public sealed class NROM368 : NES.NESBoardBase
|
2012-12-03 19:05:24 +00:00
|
|
|
|
{
|
|
|
|
|
// not even one actual prototype of this pile of shit exists, and
|
|
|
|
|
// there are already two incompatible implementations. pathetic.
|
|
|
|
|
bool small;
|
|
|
|
|
|
|
|
|
|
public override bool Configure(NES.EDetectionOrigin origin)
|
|
|
|
|
{
|
|
|
|
|
switch (Cart.board_type)
|
|
|
|
|
{
|
|
|
|
|
case "UNIF_NROM-368": // ??
|
|
|
|
|
break;
|
|
|
|
|
case "MAPPER000":
|
|
|
|
|
if (Cart.prg_size == 48 || Cart.prg_size == 64)
|
|
|
|
|
break;
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
default:
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
AssertPrg(48, 64);
|
|
|
|
|
small = Cart.prg_size == 48;
|
|
|
|
|
SetMirrorType(Cart.pad_h, Cart.pad_v);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override byte ReadPRG(int addr)
|
|
|
|
|
{
|
|
|
|
|
if (small)
|
|
|
|
|
return ROM[addr + 0x4000];
|
|
|
|
|
else
|
|
|
|
|
return ROM[addr];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override byte ReadWRAM(int addr)
|
|
|
|
|
{
|
|
|
|
|
if (small)
|
|
|
|
|
return ROM[addr + 0x2000];
|
|
|
|
|
else
|
|
|
|
|
return ROM[addr + 0xa000];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override byte ReadEXP(int addr)
|
|
|
|
|
{
|
|
|
|
|
if (addr < 0x800)
|
|
|
|
|
return NES.DB;
|
|
|
|
|
if (small)
|
|
|
|
|
return ROM[addr];
|
|
|
|
|
else
|
|
|
|
|
return ROM[addr + 0x8000];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|