NESHawk: Update Mapper 114
This commit is contained in:
parent
dda86fce90
commit
ec848f2c43
|
@ -1,60 +1,63 @@
|
||||||
using BizHawk.Common;
|
using BizHawk.Common;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
{
|
{
|
||||||
// Mapper for Aladdin Super Game
|
// Mapper for Aladdin Super Game
|
||||||
public sealed class Mapper114 : MMC3Board_Base
|
public sealed class Mapper114 : MMC3Board_Base
|
||||||
{
|
{
|
||||||
private ByteBuffer EXPREGS = new ByteBuffer(2);
|
private ByteBuffer EXPREGS = new ByteBuffer(2);
|
||||||
|
|
||||||
private byte[] sec = { 0, 3, 1, 5, 6, 7, 2, 4 };
|
private int prg_mask_16;
|
||||||
|
|
||||||
public override bool Configure(NES.EDetectionOrigin origin)
|
private byte[] sec = { 0, 3, 1, 5, 6, 7, 2, 4 };
|
||||||
{
|
|
||||||
switch (Cart.board_type)
|
public override bool Configure(NES.EDetectionOrigin origin)
|
||||||
{
|
{
|
||||||
|
switch (Cart.board_type)
|
||||||
|
{
|
||||||
case "MAPPER114":
|
case "MAPPER114":
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseSetup();
|
BaseSetup();
|
||||||
SetMirrorType(EMirrorType.Horizontal);
|
SetMirrorType(EMirrorType.Horizontal);
|
||||||
mmc3.MMC3Type = MMC3.EMMC3Type.MMC3A;
|
mmc3.MMC3Type = MMC3.EMMC3Type.MMC3A;
|
||||||
return true;
|
prg_mask_16 = Cart.prg_size / 16 - 1;
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
public override void Dispose()
|
|
||||||
{
|
public override void Dispose()
|
||||||
EXPREGS.Dispose();
|
|
||||||
base.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SyncState(Serializer ser)
|
|
||||||
{
|
|
||||||
base.SyncState(ser);
|
|
||||||
ser.Sync("expregs", ref EXPREGS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteEXP(int addr, byte value)
|
|
||||||
{
|
{
|
||||||
if ((addr & 0x7) == 0 && addr >= 0x1000)
|
EXPREGS.Dispose();
|
||||||
{
|
base.Dispose();
|
||||||
EXPREGS[0] = value;
|
}
|
||||||
}
|
|
||||||
}
|
public override void SyncState(Serializer ser)
|
||||||
|
|
||||||
public override void WriteWRAM(int addr, byte value)
|
|
||||||
{
|
{
|
||||||
if ((addr & 0x7) == 0)
|
base.SyncState(ser);
|
||||||
{
|
ser.Sync("expregs", ref EXPREGS);
|
||||||
EXPREGS[0] = value;
|
}
|
||||||
}
|
|
||||||
}
|
public override void WriteEXP(int addr, byte value)
|
||||||
|
{
|
||||||
public override void WritePRG(int addr, byte value)
|
if ((addr & 0x7) == 0 && addr >= 0x1000)
|
||||||
|
{
|
||||||
|
EXPREGS[0] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteWRAM(int addr, byte value)
|
||||||
|
{
|
||||||
|
if ((addr & 0x7) == 0)
|
||||||
|
{
|
||||||
|
EXPREGS[0] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WritePRG(int addr, byte value)
|
||||||
{
|
{
|
||||||
switch (addr & 0x6000)
|
switch (addr & 0x6000)
|
||||||
{
|
{
|
||||||
|
@ -85,20 +88,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
base.WritePRG(0x6000, value);
|
base.WritePRG(0x6000, value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte ReadPRG(int addr)
|
public override byte ReadPRG(int addr)
|
||||||
{
|
{
|
||||||
if ((EXPREGS[0] & 0x80) > 0)
|
if ((EXPREGS[0] & 0x80) > 0)
|
||||||
{
|
{
|
||||||
var bank = (EXPREGS[0] & 0x1F);
|
var bank = EXPREGS[0] & 0x1F & prg_mask_16;
|
||||||
return ROM[(bank << 14) + (addr & 0x3FFF)];
|
return ROM[(bank << 14) + (addr & 0x3FFF)];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return base.ReadPRG(addr);
|
return base.ReadPRG(addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue