GBHawk: Implement SaveRam fixes 1147

This commit is contained in:
alyosha-tas 2018-03-18 16:06:48 -04:00
parent b28d159023
commit 014a652422
3 changed files with 44 additions and 46 deletions
BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk

View File

@ -41,9 +41,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
MemoryDomain.Endian.Little,
addr => _rom[addr],
(addr, value) => ZP_RAM[addr] = value,
1)
1),
};
if (cart_RAM != null)
{
var CartRam = new MemoryDomainByteArray("Cart RAM", MemoryDomain.Endian.Little, cart_RAM, true, 1);
domains.Add(CartRam);
}
MemoryDomains = new MemoryDomainList(domains);
(ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(MemoryDomains);
}

View File

@ -7,19 +7,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
{
public byte[] CloneSaveRam()
{
return (byte[])_sram.Clone();
return (byte[])cart_RAM.Clone();
}
public void StoreSaveRam(byte[] data)
{
Buffer.BlockCopy(data, 0, _sram, 0, data.Length);
Buffer.BlockCopy(data, 0, cart_RAM, 0, data.Length);
Console.WriteLine("loading SRAM here");
}
public bool SaveRamModified
{
get
{
return false;
return has_bat & _syncSettings.Use_SRAM;
}
}
}

View File

@ -44,11 +44,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
public byte[] OAM = new byte[0xA0];
public readonly byte[] _rom;
public readonly byte[] _bios;
public readonly byte[] _sram = new byte[2048];
public readonly byte[] _bios;
public readonly byte[] header = new byte[0x50];
public byte[] cart_RAM;
public bool has_bat;
private int _frame = 0;
@ -250,39 +250,39 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
switch (header[0x47])
{
case 0x0: mapper = new MapperDefault(); mppr = "NROM"; break;
case 0x1: mapper = new MapperMBC1(); mppr = "MBC1"; break;
case 0x2: mapper = new MapperMBC1(); mppr = "MBC1"; break;
case 0x3: mapper = new MapperMBC1(); mppr = "MBC1"; break;
case 0x5: mapper = new MapperMBC2(); mppr = "MBC2"; break;
case 0x6: mapper = new MapperMBC2(); mppr = "MBC2"; break;
case 0x8: mapper = new MapperDefault(); mppr = "NROM"; break;
case 0x9: mapper = new MapperDefault(); mppr = "NROM"; break;
case 0xB: mapper = new MapperMMM01(); mppr = "MMM01"; break;
case 0xC: mapper = new MapperMMM01(); mppr = "MMM01"; break;
case 0xD: mapper = new MapperMMM01(); mppr = "MMM01"; break;
case 0xF: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x10: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x11: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x12: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x13: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x19: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1A: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1B: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1C: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1D: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1E: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x20: mapper = new MapperMBC6(); mppr = "MBC6"; break;
case 0x22: mapper = new MapperMBC7(); mppr = "MBC7"; break;
case 0xFC: mapper = new MapperCamera(); mppr = "CAM"; break;
case 0xFD: mapper = new MapperTAMA5(); mppr = "TAMA5"; break;
case 0xFE: mapper = new MapperHuC3(); mppr = "HuC3"; break;
case 0xFF: mapper = new MapperHuC1(); mppr = "HuC1"; break;
case 0x0: mapper = new MapperDefault(); mppr = "NROM"; break;
case 0x1: mapper = new MapperMBC1(); mppr = "MBC1"; break;
case 0x2: mapper = new MapperMBC1(); mppr = "MBC1"; break;
case 0x3: mapper = new MapperMBC1(); mppr = "MBC1"; has_bat = true; break;
case 0x5: mapper = new MapperMBC2(); mppr = "MBC2"; break;
case 0x6: mapper = new MapperMBC2(); mppr = "MBC2"; has_bat = true; break;
case 0x8: mapper = new MapperDefault(); mppr = "NROM"; break;
case 0x9: mapper = new MapperDefault(); mppr = "NROM"; has_bat = true; break;
case 0xB: mapper = new MapperMMM01(); mppr = "MMM01"; break;
case 0xC: mapper = new MapperMMM01(); mppr = "MMM01"; break;
case 0xD: mapper = new MapperMMM01(); mppr = "MMM01"; has_bat = true; break;
case 0xF: mapper = new MapperMBC3(); mppr = "MBC3"; has_bat = true; break;
case 0x10: mapper = new MapperMBC3(); mppr = "MBC3"; has_bat = true; break;
case 0x11: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x12: mapper = new MapperMBC3(); mppr = "MBC3"; break;
case 0x13: mapper = new MapperMBC3(); mppr = "MBC3"; has_bat = true; break;
case 0x19: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1A: mapper = new MapperMBC5(); mppr = "MBC5"; has_bat = true; break;
case 0x1B: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1C: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1D: mapper = new MapperMBC5(); mppr = "MBC5"; break;
case 0x1E: mapper = new MapperMBC5(); mppr = "MBC5"; has_bat = true; break;
case 0x20: mapper = new MapperMBC6(); mppr = "MBC6"; break;
case 0x22: mapper = new MapperMBC7(); mppr = "MBC7"; has_bat = true; break;
case 0xFC: mapper = new MapperCamera(); mppr = "CAM"; break;
case 0xFD: mapper = new MapperTAMA5(); mppr = "TAMA5"; break;
case 0xFE: mapper = new MapperHuC3(); mppr = "HuC3"; break;
case 0xFF: mapper = new MapperHuC1(); mppr = "HuC1"; break;
// Bootleg mappers
// NOTE: Sachen mapper selection does not account for scrambling, so if another bootleg mapper
// identifies itself as 0x31, this will need to be modified
case 0x31: mapper = new MapperSachen2(); mppr = "Schn2"; break;
case 0x31: mapper = new MapperSachen2(); mppr = "Schn2"; break;
case 0x4:
case 0x7:
@ -299,8 +299,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
// mapper not implemented
Console.WriteLine(header[0x47]);
throw new Exception("Mapper not implemented");
break;
}
// special case for multi cart mappers
@ -357,16 +355,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
Console.Write("RAM: "); Console.WriteLine(cart_RAM.Length);
if (_syncSettings.Use_SRAM)
for (int i = 0; i < cart_RAM.Length; i++)
{
// load cartRAM here
}
else
{
for (int i = 0; i < cart_RAM.Length; i++)
{
cart_RAM[i] = 0xFF;
}
cart_RAM[i] = 0xFF;
}
}