[NES] add GxROM
This commit is contained in:
parent
96f5a95f73
commit
209fd44442
|
@ -58,6 +58,7 @@
|
||||||
<Compile Include="Consoles\Nintendo\NES\Boards\AxROM.cs" />
|
<Compile Include="Consoles\Nintendo\NES\Boards\AxROM.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\NES\Boards\CPROM.cs" />
|
<Compile Include="Consoles\Nintendo\NES\Boards\CPROM.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\NES\Boards\CxROM.cs" />
|
<Compile Include="Consoles\Nintendo\NES\Boards\CxROM.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\NES\Boards\GxROM.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\NES\Boards\IC_74x377.cs" />
|
<Compile Include="Consoles\Nintendo\NES\Boards\IC_74x377.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\NES\Boards\NROM.cs" />
|
<Compile Include="Consoles\Nintendo\NES\Boards\NROM.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\NES\BoardDetector.cs" />
|
<Compile Include="Consoles\Nintendo\NES\BoardDetector.cs" />
|
||||||
|
|
|
@ -49,6 +49,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
||||||
11 4 2 Discrete_74x377
|
11 4 2 Discrete_74x377
|
||||||
11 2 4 Discrete_74x377
|
11 2 4 Discrete_74x377
|
||||||
13 2 0 CPROM
|
13 2 0 CPROM
|
||||||
|
66 4 2 GxROM
|
||||||
|
66 8 4 GxROM
|
||||||
";
|
";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,12 +55,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.Boards
|
||||||
|
|
||||||
public override void WritePRG(int addr, byte value)
|
public override void WritePRG(int addr, byte value)
|
||||||
{
|
{
|
||||||
if (bus_conflict)
|
if (bus_conflict) value = HandleNormalPRGConflict(addr,value);
|
||||||
{
|
|
||||||
byte old_value = value;
|
|
||||||
value &= ReadPRG(addr);
|
|
||||||
Debug.Assert(old_value == value, "Found a test case of CxROM bus conflict. please report.");
|
|
||||||
}
|
|
||||||
prg = value & prg_mask;
|
prg = value & prg_mask;
|
||||||
if ((value & 0x10) == 0)
|
if ((value & 0x10) == 0)
|
||||||
SetMirrorType(NES.EMirrorType.OneScreenA);
|
SetMirrorType(NES.EMirrorType.OneScreenA);
|
||||||
|
|
|
@ -22,12 +22,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.Boards
|
||||||
|
|
||||||
public override void WritePRG(int addr, byte value)
|
public override void WritePRG(int addr, byte value)
|
||||||
{
|
{
|
||||||
if (bus_conflict)
|
if (bus_conflict) value = HandleNormalPRGConflict(addr,value);
|
||||||
{
|
|
||||||
byte old_value = value;
|
|
||||||
value &= ReadPRG(addr);
|
|
||||||
Debug.Assert(old_value == value,"Found a test case of CxROM bus conflict. please report.");
|
|
||||||
}
|
|
||||||
chr = value&chr_mask;
|
chr = value&chr_mask;
|
||||||
//Console.WriteLine("at {0}, set chr={1}", NES.ppu.ppur.status.sl, chr);
|
//Console.WriteLine("at {0}, set chr={1}", NES.ppu.ppur.status.sl, chr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace BizHawk.Emulation.Consoles.Nintendo.Boards
|
||||||
|
{
|
||||||
|
public class GxROM : NES.NESBoardBase
|
||||||
|
{
|
||||||
|
int prg_mask, chr_mask;
|
||||||
|
int prg, chr;
|
||||||
|
|
||||||
|
public override void Initialize(NES.RomInfo romInfo, NES nes)
|
||||||
|
{
|
||||||
|
base.Initialize(romInfo, nes);
|
||||||
|
Debug.Assert(romInfo.PRG_Size == 2 || romInfo.PRG_Size == 4 || romInfo.PRG_Size == 8);
|
||||||
|
//romInfo.CHR_Size == 8 || romInfo.CHR_Size == 16
|
||||||
|
Debug.Assert(romInfo.CHR_Size == 2 || romInfo.CHR_Size == 4, "This is unverified behaviour. Please check it (maybe you are playing thunder&lightning; do you have to play far into that game to see missing CHR?");
|
||||||
|
|
||||||
|
prg_mask = (romInfo.PRG_Size/2) - 1;
|
||||||
|
chr_mask = romInfo.CHR_Size - 1;
|
||||||
|
}
|
||||||
|
public override byte ReadPRG(int addr)
|
||||||
|
{
|
||||||
|
return RomInfo.ROM[addr + (prg<<15)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public override byte ReadPPU(int addr)
|
||||||
|
{
|
||||||
|
if (addr < 0x2000)
|
||||||
|
{
|
||||||
|
return RomInfo.VROM[addr + (chr << 13)];
|
||||||
|
}
|
||||||
|
else return base.ReadPPU(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WritePRG(int addr, byte value)
|
||||||
|
{
|
||||||
|
chr = ((value & 3) & chr_mask);
|
||||||
|
prg = (((value>>4) & 3) & prg_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
int mask;
|
||||||
|
}
|
||||||
|
}
|
|
@ -645,6 +645,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
||||||
case "AOROM": board = new Boards.AxROM("AOROM"); break;
|
case "AOROM": board = new Boards.AxROM("AOROM"); break;
|
||||||
case "Discrete_74x377": board = new Boards.Discrete_74x377(); break;
|
case "Discrete_74x377": board = new Boards.Discrete_74x377(); break;
|
||||||
case "CPROM": board = new Boards.CPROM(); break;
|
case "CPROM": board = new Boards.CPROM(); break;
|
||||||
|
case "GxROM": board = new Boards.GxROM(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (board == null) throw new InvalidOperationException("Couldn't classify NES rom");
|
if (board == null) throw new InvalidOperationException("Couldn't classify NES rom");
|
||||||
|
|
Loading…
Reference in New Issue