a few more board attempts
This commit is contained in:
parent
06e1e2731a
commit
7d1da4bdaf
|
@ -148,6 +148,7 @@ sha1:081D107B5AEFFD4F59108C76FA3942506FA36B1F G Captain Tsubasa Vol. II - Super
|
|||
sha1:F99E8B7C7A2174BF0B2330F5457AEE478A938C93 G Captain Tsubasa Vol. II - Super Striker (Ch) [a1] NES board=MAPPER195
|
||||
sha1:9958BED493E8C5727F96937BF254AC33FA3BCF81 G Captain Tsubasa Vol. II - Super Striker (Ch) [a2] NES board=MAPPER195
|
||||
sha1:B4AA3F10908DC3D6B8152F5DEB1B8543B8B46BF6 G Captain Tsubasa Vol. II - Super Striker (Ch) [a3] NES board=MAPPER195
|
||||
sha1:60FC5FA5B5ACCAF3AEFEBA73FC8BFFD3C4DAE558 G Pegasus 5-in-1 (Golden Five) NES board=MAPPER104
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;-----------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -560,6 +560,7 @@
|
|||
<Compile Include="Consoles\Nintendo\NES\Boards\Bonza.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\BxROM.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\Camerica.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\CamericaGoldenFive.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\CoolBoy.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\DatachBarcode.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\Farid-UNROM-8-in-1.cs" />
|
||||
|
@ -688,6 +689,7 @@
|
|||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper196.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper197.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper205.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper208.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper219.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper238.cs" />
|
||||
<Compile Include="Consoles\Nintendo\NES\Boards\MMC3_family\Mapper245.cs" />
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
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;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("reg", ref regs);
|
||||
}
|
||||
|
||||
public override void WritePRG(int addr, byte value)
|
||||
{
|
||||
if (addr < 0x4000) // 80000
|
||||
{
|
||||
if ((value & 8) > 0)
|
||||
{
|
||||
regs[0] = (byte)((value << 4 & 0x70) | (prg_bank_mask_16k & 0x0F));
|
||||
regs[1] = (byte)((value << 4 & 0x70) | 0x0F);
|
||||
}
|
||||
}
|
||||
else // C000
|
||||
{
|
||||
regs[0] = (byte)(prg_bank_mask_16k & 0x70 | (value & 0x0F));
|
||||
}
|
||||
}
|
||||
|
||||
public override byte ReadPRG(int addr)
|
||||
{
|
||||
if (addr < 0x4000)
|
||||
{
|
||||
return ROM[((regs[0] & prg_bank_mask_16k) << 14) + (addr & 0x3FFF)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return ROM[((regs[1] & prg_bank_mask_16k) << 14) + (addr & 0x3FFF)];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
using BizHawk.Common;
|
||||
|
||||
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||
{
|
||||
public sealed class Mapper208 : MMC3Board_Base
|
||||
{
|
||||
private ByteBuffer exRegs = new ByteBuffer(6);
|
||||
|
||||
private readonly byte[] lut = {
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01,
|
||||
0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08,
|
||||
0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00,
|
||||
0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
public override bool Configure(NES.EDetectionOrigin origin)
|
||||
{
|
||||
switch (Cart.board_type)
|
||||
{
|
||||
case "MAPPER208":
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
BaseSetup();
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("expregs", ref exRegs);
|
||||
}
|
||||
|
||||
public override byte ReadPRG(int addr)
|
||||
{
|
||||
return ROM[(exRegs[5] << 15) + addr];
|
||||
}
|
||||
|
||||
public override byte ReadEXP(int addr)
|
||||
{
|
||||
if (addr >= 0x1800) // 0x5800-0x5FFF
|
||||
{
|
||||
return exRegs[addr & 3];
|
||||
}
|
||||
|
||||
return base.ReadEXP(addr);
|
||||
}
|
||||
|
||||
public override void WriteEXP(int addr, byte value)
|
||||
{
|
||||
if (addr >= 0x800 && addr < 0x1000) // 0x4800-0x4FFF
|
||||
{
|
||||
WriteReg(addr, value);
|
||||
}
|
||||
|
||||
// Copy protection crap
|
||||
else if (addr >= 0x1000) // 0x5000-0x5FFF
|
||||
{
|
||||
if (addr <= 0x17FF) // 0x5000 - 0x57FF
|
||||
{
|
||||
exRegs[4] = value;
|
||||
}
|
||||
else // 0x5800-0x5FFF
|
||||
{
|
||||
exRegs[addr & 3] = (byte)(value ^ lut[exRegs[4]]);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
base.WriteEXP(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteWRAM(int addr, byte value)
|
||||
{
|
||||
if (addr >= 0x800 && addr < 0x1000) // 0x6800 - 0x6FFF
|
||||
{
|
||||
WriteReg(addr, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.WriteWRAM(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteReg(int addr, byte value)
|
||||
{
|
||||
exRegs[5] = (byte)((value & 1) | ((value >> 3) & 2));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue