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

97 lines
2.5 KiB
C#

using System;
namespace BizHawk.Emulation.Cores.Nintendo.NES
{
[NES.INESBoardImplPriority]
public sealed class NROM : NES.NESBoardBase
{
//configuration
int prg_byte_mask;
//state
//(none)
public override bool Configure(NES.EDetectionOrigin origin)
{
//configure.
//contrary to expectations, some NROM games may have WRAM if theyve been identified through iNES. lame.
switch (Cart.board_type)
{
case "MAPPER000":
break;
case "MAPPER000_VS":
// I thibnk this is only for bad/pirated dumps of VS games.
// No VS game used mapper zero but some were changed to use noraml CHR mapping I think
NES._isVS = true;
break;
case "BANDAI-NROM-128":
case "BANDAI-NROM-256":
case "HVC-HROM": //Donkey Kong Jr. (J)
case "HVC-NROM-128":
case "HVC-NROM-256": //super mario bros.
case "HVC-RROM": //balloon fight
case "HVC-RTROM":
case "HVC-SROM":
case "HVC-STROM":
case "IREM-NROM-128":
case "IREM-NROM-256":
case "JALECO-JF-01": //Exerion (J)
case "JALECO-JF-02":
case "JALECO-JF-03":
case "JALECO-JF-04":
case "KONAMI-NROM-128":
case "NAMCOT-3301":
case "NAMCOT-3302":
case "NAMCOT-3303":
case "NAMCOT-3304":
case "NAMCOT-3305":
case "NAMCOT-3311":
case "NAMCOT-3312":
case "NAMCOT-NROM-128":
case "NES-NROM-128":
case "NES-NROM-256": //10 yard fight
case "NES-RROM-128":
case "SACHEN-NROM":
case "SETA-NROM-128":
case "SUNSOFT-NROM-128":
case "SUNSOFT-NROM-256":
case "TAITO-NROM-128":
case "TAITO-NROM-256":
case "TENGEN-800003": // ms pac man, others
case "UNIF_NES-NROM-128": // various
case "UNIF_NES-NROM-256": // Locksmith
AssertPrg(8, 16, 32);
AssertChr(8); AssertVram(0); AssertWram(0, 8);
break;
case "AVE-NINA-03":
// at least one game on this board has none of the mapper chips present,
// and emulates as simple NROM
if (Cart.chips.Count != 0)
return false;
AssertPrg(8, 16, 32);
AssertChr(8); AssertVram(0); AssertWram(0);
break;
case "HVC-FAMILYBASIC":
// we don't emulate the controller, so this won't work
AssertPrg(32); AssertChr(8); AssertWram(2, 4);
break;
default:
return false;
}
prg_byte_mask = (Cart.prg_size*1024) - 1;
SetMirrorType(Cart.pad_h, Cart.pad_v);
return true;
}
public override byte ReadPRG(int addr)
{
addr &= prg_byte_mask;
return ROM[addr];
}
}
}