Support King of Fighter 97 (UNIF_UNL-KOF97)

This commit is contained in:
adelikat 2016-09-17 10:15:13 -04:00
parent 24df291143
commit e4caa13b9c
2 changed files with 73 additions and 0 deletions
BizHawk.Emulation.Cores
BizHawk.Emulation.Cores.csproj
Consoles/Nintendo/NES/Boards/UNIF

View File

@ -751,6 +751,7 @@
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL-AX5705.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL-CC-21.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL-EDU2000.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL-KOF97.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL-TF1201.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UNIF\UNIF_UNL_DripGame.cs" />
<Compile Include="Consoles\Nintendo\NES\Boards\UxROM.cs">

View File

@ -0,0 +1,72 @@
using BizHawk.Common;
namespace BizHawk.Emulation.Cores.Nintendo.NES
{
// adapted from Nestopia src
public sealed class UNIF_UNL_KOF97 : MMC3Board_Base
{
public override bool Configure(NES.EDetectionOrigin origin)
{
switch (Cart.board_type)
{
case "UNIF_UNL-KOF97":
break;
default:
return false;
}
BaseSetup();
return true;
}
private byte Unscramble(byte data)
{
return (byte)
(
(data >> 1 & 0x01) |
(data >> 4 & 0x02) |
(data << 2 & 0x04) |
(data >> 0 & 0xD8) |
(data << 3 & 0x20)
);
}
public override void WritePRG(int addr, byte value)
{
if (addr < 0x1000) // 0x8000 - 0x8FFF
{
base.WritePRG(addr & 1, Unscramble(value));
}
else if (addr == 0x1000) // 9000 = 8001
{
base.WritePRG(1, Unscramble(value));
}
else if (addr == 0x2000) // A000 = 8000)
{
base.WritePRG(0, Unscramble(value));
}
else if (addr == 0x5000) // D000 = C001
{
base.WritePRG(0x4001, Unscramble(value));
}
else if (addr >= 0x6000 && addr < 0x7000) // 0xE0000 - 0xEFFF
{
base.WritePRG(addr & 1, Unscramble(value));
}
else if (addr == 0x7000) // F000
{
base.WritePRG(0x6001, Unscramble(value));
}
else
{
base.WritePRG(addr, value);
}
}
}
}