dual gameboy: SAVESTATES OBSLETEEDDDEEDDDDDDDDDDDDDDD. link cable connection toggling
This commit is contained in:
parent
c9645858da
commit
ca7a7886ed
|
@ -19,34 +19,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
bool disposed = false;
|
bool disposed = false;
|
||||||
|
|
||||||
public Dictionary<string, int> GetCpuFlagsAndRegisters()
|
|
||||||
{
|
|
||||||
var left = L.GetCpuFlagsAndRegisters()
|
|
||||||
.Select(reg => new KeyValuePair<string, int>("Left " + reg.Key, reg.Value));
|
|
||||||
|
|
||||||
var right = R.GetCpuFlagsAndRegisters()
|
|
||||||
.Select(reg => new KeyValuePair<string, int>("Right " + reg.Key, reg.Value));
|
|
||||||
|
|
||||||
return left.Union(right).ToList().ToDictionary(pair => pair.Key, pair => pair.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetCpuRegister(string register, int value)
|
|
||||||
{
|
|
||||||
if (register.StartsWith("Left "))
|
|
||||||
{
|
|
||||||
L.SetCpuRegister(register.Replace("Left ", ""), value);
|
|
||||||
}
|
|
||||||
else if (register.StartsWith("Right "))
|
|
||||||
{
|
|
||||||
R.SetCpuRegister(register.Replace("Right ", ""), value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Gameboy L;
|
Gameboy L;
|
||||||
Gameboy R;
|
Gameboy R;
|
||||||
// counter to ensure we do 35112 samples per frame
|
// counter to ensure we do 35112 samples per frame
|
||||||
int overflowL = 0;
|
int overflowL = 0;
|
||||||
int overflowR = 0;
|
int overflowR = 0;
|
||||||
|
/// <summary>if true, the link cable is currently connected</summary>
|
||||||
|
bool cableconnected = true;
|
||||||
|
/// <summary>if true, the link cable toggle signal is currently asserted</summary>
|
||||||
|
bool cablediscosignal = false;
|
||||||
|
|
||||||
const int SampPerFrame = 35112;
|
const int SampPerFrame = 35112;
|
||||||
|
|
||||||
|
@ -57,6 +38,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
return right ? R.IsCGBMode() : L.IsCGBMode();
|
return right ? R.IsCGBMode() : L.IsCGBMode();
|
||||||
}
|
}
|
||||||
|
public bool LinkCableConnected { get { return cableconnected; } }
|
||||||
|
|
||||||
public GambatteLink(CoreComm comm, GameInfo leftinfo, byte[] leftrom, GameInfo rightinfo, byte[] rightrom, object Settings, object SyncSettings, bool deterministic)
|
public GambatteLink(CoreComm comm, GameInfo leftinfo, byte[] leftrom, GameInfo rightinfo, byte[] rightrom, object Settings, object SyncSettings, bool deterministic)
|
||||||
{
|
{
|
||||||
|
@ -110,6 +92,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
"P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 A", "P1 B", "P1 Select", "P1 Start", "P1 Power",
|
"P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 A", "P1 B", "P1 Select", "P1 Start", "P1 Power",
|
||||||
"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 A", "P2 B", "P2 Select", "P2 Start", "P2 Power",
|
"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 A", "P2 B", "P2 Select", "P2 Start", "P2 Power",
|
||||||
|
"Toggle Cable"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -131,6 +114,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
RCont.Set(s.Replace("P2 ", ""));
|
RCont.Set(s.Replace("P2 ", ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool cablediscosignal_new = Controller["Toggle Cable"];
|
||||||
|
if (cablediscosignal_new && !cablediscosignal)
|
||||||
|
{
|
||||||
|
cableconnected ^= true;
|
||||||
|
Console.WriteLine("Cable connect status to {0}", cableconnected);
|
||||||
|
}
|
||||||
|
cablediscosignal = cablediscosignal_new;
|
||||||
|
|
||||||
Frame++;
|
Frame++;
|
||||||
L.FrameAdvancePrep();
|
L.FrameAdvancePrep();
|
||||||
|
@ -174,7 +164,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
LibGambatte.gambatte_blitto(R.GambatteState, rightvbuff, pitch);
|
LibGambatte.gambatte_blitto(R.GambatteState, rightvbuff, pitch);
|
||||||
nR += (int)nsamp;
|
nR += (int)nsamp;
|
||||||
}
|
}
|
||||||
// poll link cable statuses
|
|
||||||
|
// poll link cable statuses, but not when the cable is disconnected
|
||||||
|
if (!cableconnected)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (LibGambatte.gambatte_linkstatus(L.GambatteState, 256) != 0) // ClockTrigger
|
if (LibGambatte.gambatte_linkstatus(L.GambatteState, 256) != 0) // ClockTrigger
|
||||||
{
|
{
|
||||||
|
@ -192,7 +185,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
LibGambatte.gambatte_linkstatus(L.GambatteState, ro & 0xff); // ShiftIn
|
LibGambatte.gambatte_linkstatus(L.GambatteState, ro & 0xff); // ShiftIn
|
||||||
LibGambatte.gambatte_linkstatus(R.GambatteState, lo & 0xff); // ShiftIn
|
LibGambatte.gambatte_linkstatus(R.GambatteState, lo & 0xff); // ShiftIn
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
overflowL = nL - SampPerFrame;
|
overflowL = nL - SampPerFrame;
|
||||||
overflowR = nR - SampPerFrame;
|
overflowR = nR - SampPerFrame;
|
||||||
|
@ -229,6 +221,32 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
public string BoardName { get { return L.BoardName + '|' + R.BoardName; } }
|
public string BoardName { get { return L.BoardName + '|' + R.BoardName; } }
|
||||||
|
|
||||||
|
public void ResetCounters()
|
||||||
|
{
|
||||||
|
Frame = 0;
|
||||||
|
LagCount = 0;
|
||||||
|
IsLagFrame = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CoreComm CoreComm { get; private set; }
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
L.Dispose();
|
||||||
|
L = null;
|
||||||
|
R.Dispose();
|
||||||
|
R = null;
|
||||||
|
blip_left.Dispose();
|
||||||
|
blip_left = null;
|
||||||
|
blip_right.Dispose();
|
||||||
|
blip_right = null;
|
||||||
|
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region saveram
|
#region saveram
|
||||||
|
|
||||||
public byte[] CloneSaveRam()
|
public byte[] CloneSaveRam()
|
||||||
|
@ -271,13 +289,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void ResetCounters()
|
|
||||||
{
|
|
||||||
Frame = 0;
|
|
||||||
LagCount = 0;
|
|
||||||
IsLagFrame = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region savestates
|
#region savestates
|
||||||
|
|
||||||
public void SaveStateText(TextWriter writer)
|
public void SaveStateText(TextWriter writer)
|
||||||
|
@ -308,6 +319,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
writer.Write(overflowR);
|
writer.Write(overflowR);
|
||||||
writer.Write(LatchL);
|
writer.Write(LatchL);
|
||||||
writer.Write(LatchR);
|
writer.Write(LatchR);
|
||||||
|
writer.Write(cableconnected);
|
||||||
|
writer.Write(cablediscosignal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadStateBinary(BinaryReader reader)
|
public void LoadStateBinary(BinaryReader reader)
|
||||||
|
@ -322,6 +335,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
overflowR = reader.ReadInt32();
|
overflowR = reader.ReadInt32();
|
||||||
LatchL = reader.ReadInt32();
|
LatchL = reader.ReadInt32();
|
||||||
LatchR = reader.ReadInt32();
|
LatchR = reader.ReadInt32();
|
||||||
|
cableconnected = reader.ReadBoolean();
|
||||||
|
cablediscosignal = reader.ReadBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] SaveStateBinary()
|
public byte[] SaveStateBinary()
|
||||||
|
@ -337,10 +352,33 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public CoreComm CoreComm { get; private set; }
|
#region debugging
|
||||||
|
|
||||||
public MemoryDomainList MemoryDomains { get; private set; }
|
public MemoryDomainList MemoryDomains { get; private set; }
|
||||||
|
|
||||||
|
public Dictionary<string, int> GetCpuFlagsAndRegisters()
|
||||||
|
{
|
||||||
|
var left = L.GetCpuFlagsAndRegisters()
|
||||||
|
.Select(reg => new KeyValuePair<string, int>("Left " + reg.Key, reg.Value));
|
||||||
|
|
||||||
|
var right = R.GetCpuFlagsAndRegisters()
|
||||||
|
.Select(reg => new KeyValuePair<string, int>("Right " + reg.Key, reg.Value));
|
||||||
|
|
||||||
|
return left.Union(right).ToList().ToDictionary(pair => pair.Key, pair => pair.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetCpuRegister(string register, int value)
|
||||||
|
{
|
||||||
|
if (register.StartsWith("Left "))
|
||||||
|
{
|
||||||
|
L.SetCpuRegister(register.Replace("Left ", ""), value);
|
||||||
|
}
|
||||||
|
else if (register.StartsWith("Right "))
|
||||||
|
{
|
||||||
|
R.SetCpuRegister(register.Replace("Right ", ""), value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SetMemoryDomains()
|
void SetMemoryDomains()
|
||||||
{
|
{
|
||||||
var mm = new List<MemoryDomain>();
|
var mm = new List<MemoryDomain>();
|
||||||
|
@ -353,22 +391,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
MemoryDomains = new MemoryDomainList(mm);
|
MemoryDomains = new MemoryDomainList(mm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
#endregion
|
||||||
{
|
|
||||||
if (!disposed)
|
|
||||||
{
|
|
||||||
L.Dispose();
|
|
||||||
L = null;
|
|
||||||
R.Dispose();
|
|
||||||
R = null;
|
|
||||||
blip_left.Dispose();
|
|
||||||
blip_left = null;
|
|
||||||
blip_right.Dispose();
|
|
||||||
blip_right = null;
|
|
||||||
|
|
||||||
disposed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region VideoProvider
|
#region VideoProvider
|
||||||
|
|
||||||
|
@ -446,6 +469,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region settings
|
||||||
|
|
||||||
public object GetSettings()
|
public object GetSettings()
|
||||||
{
|
{
|
||||||
return new GambatteLinkSettings
|
return new GambatteLinkSettings
|
||||||
|
@ -519,5 +544,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue