BizHawk/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.ISaveRam.cs

126 lines
2.2 KiB
C#

using System;
using BizHawk.Emulation.Common;
namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
{
public partial class GBHawkLink4x : ISaveRam
{
public byte[] CloneSaveRam()
{
if ((A.cart_RAM != null) || (B.cart_RAM != null) || (C.cart_RAM != null) || (D.cart_RAM != null))
{
int Len1 = 0;
int Len2 = 0;
int Len3 = 0;
int Len4 = 0;
int index = 0;
if (A.cart_RAM != null)
{
Len1 = A.cart_RAM.Length;
}
if (B.cart_RAM != null)
{
Len2 = B.cart_RAM.Length;
}
if (C.cart_RAM != null)
{
Len3 = C.cart_RAM.Length;
}
if (D.cart_RAM != null)
{
Len4 = D.cart_RAM.Length;
}
byte[] temp = new byte[Len1 + Len2 + Len3 + Len4];
if (A.cart_RAM != null)
{
for (int i = 0; i < A.cart_RAM.Length; i++)
{
temp[index] = A.cart_RAM[i];
index++;
}
}
if (B.cart_RAM != null)
{
for (int i = 0; i < B.cart_RAM.Length; i++)
{
temp[index] = B.cart_RAM[i];
index++;
}
}
if (C.cart_RAM != null)
{
for (int i = 0; i < C.cart_RAM.Length; i++)
{
temp[index] = C.cart_RAM[i];
index++;
}
}
if (D.cart_RAM != null)
{
for (int i = 0; i < D.cart_RAM.Length; i++)
{
temp[index] = D.cart_RAM[i];
index++;
}
}
return temp;
}
else
{
return null;
}
}
public void StoreSaveRam(byte[] data)
{
if (Link4xSyncSettings.Use_SRAM)
{
int temp = 0;
if (A.cart_RAM != null)
{
Buffer.BlockCopy(data, temp, A.cart_RAM, 0, A.cart_RAM.Length);
temp += A.cart_RAM.Length;
}
if (B.cart_RAM != null)
{
Buffer.BlockCopy(data, temp, B.cart_RAM, 0, B.cart_RAM.Length);
temp += B.cart_RAM.Length;
}
if (C.cart_RAM != null)
{
Buffer.BlockCopy(data, temp, C.cart_RAM, 0, C.cart_RAM.Length);
temp += C.cart_RAM.Length;
}
if (D.cart_RAM != null)
{
Buffer.BlockCopy(data, temp, D.cart_RAM, 0, D.cart_RAM.Length);
}
Console.WriteLine("loading SRAM here");
}
}
public bool SaveRamModified
{
get
{
return (A.has_bat || B.has_bat || C.has_bat || D.has_bat) & Link4xSyncSettings.Use_SRAM;
}
}
}
}