gen: support save-ram. but not eeprom, yet.
This commit is contained in:
parent
27b4439575
commit
e208b147ae
|
@ -4,7 +4,8 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
{
|
||||
partial class Genesis
|
||||
{
|
||||
bool SaveRamEnabled = false;
|
||||
bool SaveRamEnabled;
|
||||
bool SaveRamEveryOtherByte;
|
||||
int SaveRamStartOffset;
|
||||
int SaveRamEndOffset;
|
||||
int SaveRamLength;
|
||||
|
@ -13,14 +14,33 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
void InitializeSaveRam(GameInfo game)
|
||||
{
|
||||
if (game["SaveRamOffset"])
|
||||
// TODO if eeprom in use, abort saveram check
|
||||
|
||||
if (game["DisableSaveRam"] || RH_SRamPresent == false)
|
||||
return;
|
||||
|
||||
SaveRamEnabled = true;
|
||||
SaveRamEveryOtherByte = RH_SRamCode != 0;
|
||||
SaveRamStartOffset = RH_SRamStart;
|
||||
SaveRamEndOffset = RH_SRamEnd;
|
||||
|
||||
if (game["SaveRamStartOffset"])
|
||||
SaveRamStartOffset = game.GetHexValue("SaveRamStartOffset");
|
||||
if (game["SaveRamEndOffset"])
|
||||
SaveRamEndOffset = game.GetHexValue("SaveRamEndOffset");
|
||||
|
||||
SaveRamLength = (SaveRamEndOffset - SaveRamStartOffset) + 1;
|
||||
|
||||
if (SaveRamEveryOtherByte)
|
||||
{
|
||||
SaveRamEnabled = true;
|
||||
SaveRamStartOffset = game.GetHexValue("SaveRamOffset");
|
||||
SaveRamLength = game.GetHexValue("SaveRamLength");
|
||||
SaveRamEndOffset = SaveRamStartOffset + SaveRamLength;
|
||||
SaveRAM = new byte[SaveRamLength];
|
||||
SaveRamStartOffset &= 0xFFFFFE;
|
||||
SaveRamEndOffset &= 0xFFFFFE;
|
||||
SaveRamLength = ((SaveRamEndOffset - SaveRamStartOffset) / 2) + 1;
|
||||
}
|
||||
|
||||
SaveRAM = new byte[SaveRamLength];
|
||||
|
||||
Console.WriteLine("SaveRAM enabled. Start: ${0:X6} End: ${1:X6} Length: ${2:X} Mode: {3}", SaveRamStartOffset, SaveRamEndOffset, SaveRamLength, RH_SRamInterpretation());
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam() { return (byte[])SaveRAM.Clone(); }
|
||||
|
|
|
@ -14,7 +14,12 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
if (address < 0x400000)
|
||||
{
|
||||
if (SaveRamEnabled && address >= SaveRamStartOffset && address < SaveRamEndOffset)
|
||||
return (sbyte) SaveRAM[address - SaveRamStartOffset];
|
||||
{
|
||||
if (SaveRamEveryOtherByte)
|
||||
return (sbyte) SaveRAM[(address - SaveRamStartOffset) >> 1];
|
||||
else
|
||||
return (sbyte) SaveRAM[address - SaveRamStartOffset];
|
||||
}
|
||||
return (sbyte)RomData[address];
|
||||
}
|
||||
|
||||
|
@ -153,7 +158,11 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
if (SaveRamEnabled && address >= SaveRamStartOffset && address < SaveRamEndOffset)
|
||||
{
|
||||
SaveRAM[address - SaveRamStartOffset] = (byte) value;
|
||||
if (SaveRamEveryOtherByte)
|
||||
SaveRAM[(address - SaveRamStartOffset) >> 1] = (byte) value;
|
||||
else
|
||||
SaveRAM[address - SaveRamStartOffset] = (byte) value;
|
||||
|
||||
SaveRamModified = true;
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue