commodore64: CIA chip savestate code added (not connected)
This commit is contained in:
parent
b515b62b3e
commit
6560900e6e
|
@ -86,6 +86,7 @@
|
|||
<Compile Include="Computers\Commodore64\Cartridge.cs" />
|
||||
<Compile Include="Computers\Commodore64\CartridgeMappers.cs" />
|
||||
<Compile Include="Computers\Commodore64\Cia.cs" />
|
||||
<Compile Include="Computers\Commodore64\CiaState.cs" />
|
||||
<Compile Include="Computers\Commodore64\D64.cs" />
|
||||
<Compile Include="Computers\Commodore64\DataPort.cs" />
|
||||
<Compile Include="Computers\Commodore64\Disk.cs" />
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
|
||||
public DataPortBus[] ports;
|
||||
|
||||
private DataPortConnector[] connectors;
|
||||
public DataPortConnector[] connectors;
|
||||
|
||||
public CiaRegs()
|
||||
{
|
||||
|
@ -243,18 +243,18 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
|
||||
this[0x0B] = 0x01;
|
||||
|
||||
connectors[0].Data = 0xFF;
|
||||
connectors[1].Data = 0xFF;
|
||||
connectors[0].Latch = 0xFF;
|
||||
connectors[1].Latch = 0xFF;
|
||||
connectors[0].Direction = 0xFF;
|
||||
connectors[1].Direction = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
public class Cia
|
||||
public partial class Cia
|
||||
{
|
||||
public int intMask;
|
||||
public bool lastCNT;
|
||||
public byte[] outputBitMask;
|
||||
public byte[] outputBitMask = new byte[] { 0x40, 0x80 };
|
||||
private CiaRegs regs = new CiaRegs();
|
||||
public int todCounter;
|
||||
public int todFrequency;
|
||||
|
@ -360,7 +360,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
|
||||
public void HardReset()
|
||||
{
|
||||
outputBitMask = new byte[] { 0x40, 0x80 };
|
||||
regs.HardReset();
|
||||
underflow = new bool[2];
|
||||
todCounter = todFrequency;
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace BizHawk.Emulation.Computers.Commodore64
|
||||
{
|
||||
public partial class Cia
|
||||
{
|
||||
public StateParameters State
|
||||
{
|
||||
get
|
||||
{
|
||||
StateParameters result = new StateParameters();
|
||||
|
||||
// registers
|
||||
result.Save("ALARM", regs.ALARM);
|
||||
result.Save("ALARM10", regs.ALARM10);
|
||||
result.Save("ALARMHR", regs.ALARMHR);
|
||||
result.Save("ALARMMIN", regs.ALARMMIN);
|
||||
result.Save("ALARMPM", regs.ALARMPM);
|
||||
result.Save("ALARMSEC", regs.ALARMSEC);
|
||||
result.Save("CNT", regs.CNT);
|
||||
result.Save("EIALARM", regs.EIALARM);
|
||||
result.Save("EIFLG", regs.EIFLG);
|
||||
result.Save("EISP", regs.EISP);
|
||||
result.Save("EIT0", regs.EIT[0]);
|
||||
result.Save("EIT1", regs.EIT[1]);
|
||||
result.Save("FLG", regs.FLG);
|
||||
result.Save("IALARM", regs.IALARM);
|
||||
result.Save("IFLG", regs.IFLG);
|
||||
result.Save("INMODE0", regs.INMODE[0]);
|
||||
result.Save("INMODE1", regs.INMODE[1]);
|
||||
result.Save("IRQ", regs.IRQ);
|
||||
result.Save("ISP", regs.ISP);
|
||||
result.Save("IT0", regs.IT[0]);
|
||||
result.Save("IT1", regs.IT[1]);
|
||||
result.Save("LOAD0", regs.LOAD[0]);
|
||||
result.Save("LOAD1", regs.LOAD[1]);
|
||||
result.Save("OUTMODE0", regs.OUTMODE[0]);
|
||||
result.Save("OUTMODE1", regs.OUTMODE[1]);
|
||||
result.Save("PBON0", regs.PBON[0]);
|
||||
result.Save("PBON1", regs.PBON[1]);
|
||||
result.Save("RUNMODE0", regs.RUNMODE[0]);
|
||||
result.Save("RUNMODE1", regs.RUNMODE[1]);
|
||||
result.Save("SDR", regs.SDR);
|
||||
result.Save("SDRCOUNT", regs.SDRCOUNT);
|
||||
result.Save("SPMODE", regs.SPMODE);
|
||||
result.Save("START0", regs.START[0]);
|
||||
result.Save("START1", regs.START[1]);
|
||||
result.Save("T0", regs.T[0]);
|
||||
result.Save("T1", regs.T[1]);
|
||||
result.Save("TICK0", regs.TICK[0]);
|
||||
result.Save("TICK1", regs.TICK[1]);
|
||||
result.Save("TLATCH0", regs.TLATCH[0]);
|
||||
result.Save("TLATCH1", regs.TLATCH[1]);
|
||||
result.Save("TOD10", regs.TOD10);
|
||||
result.Save("TODHR", regs.TODHR);
|
||||
result.Save("TODMIN", regs.TODMIN);
|
||||
result.Save("TODPM", regs.TODPM);
|
||||
result.Save("TODREADLATCH", regs.TODREADLATCH);
|
||||
result.Save("TODREADLATCH10", regs.TODREADLATCH10);
|
||||
result.Save("TODREADLATCHSEC", regs.TODREADLATCHSEC);
|
||||
result.Save("TODREADLATCHMIN", regs.TODREADLATCHMIN);
|
||||
result.Save("TODREADLATCHHR", regs.TODREADLATCHHR);
|
||||
result.Save("TODSEC", regs.TODSEC);
|
||||
|
||||
// ports
|
||||
result.Save("DIR0", regs.connectors[0].Direction);
|
||||
result.Save("DIR1", regs.connectors[1].Direction);
|
||||
result.Save("PORT0", regs.connectors[0].Latch);
|
||||
result.Save("PORT1", regs.connectors[1].Latch);
|
||||
|
||||
// state
|
||||
result.Save("INTMASK", intMask);
|
||||
result.Save("LASTCNT", lastCNT);
|
||||
result.Save("TODCOUNTER", todCounter);
|
||||
result.Save("TODFREQUENCY", todFrequency);
|
||||
result.Save("UNDERFLOW0", underflow[0]);
|
||||
result.Save("UNDERFLOW1", underflow[1]);
|
||||
|
||||
return result;
|
||||
}
|
||||
set
|
||||
{
|
||||
StateParameters result = value;
|
||||
|
||||
// registers
|
||||
result.Load("ALARM", out regs.ALARM);
|
||||
result.Load("ALARM10", out regs.ALARM10);
|
||||
result.Load("ALARMHR", out regs.ALARMHR);
|
||||
result.Load("ALARMMIN", out regs.ALARMMIN);
|
||||
result.Load("ALARMPM", out regs.ALARMPM);
|
||||
result.Load("ALARMSEC", out regs.ALARMSEC);
|
||||
result.Load("CNT", out regs.CNT);
|
||||
result.Load("EIALARM", out regs.EIALARM);
|
||||
result.Load("EIFLG", out regs.EIFLG);
|
||||
result.Load("EISP", out regs.EISP);
|
||||
result.Load("EIT0", out regs.EIT[0]);
|
||||
result.Load("EIT1", out regs.EIT[1]);
|
||||
result.Load("FLG", out regs.FLG);
|
||||
result.Load("IALARM", out regs.IALARM);
|
||||
result.Load("IFLG", out regs.IFLG);
|
||||
result.Load("INMODE0", out regs.INMODE[0]);
|
||||
result.Load("INMODE1", out regs.INMODE[1]);
|
||||
result.Load("IRQ", out regs.IRQ);
|
||||
result.Load("ISP", out regs.ISP);
|
||||
result.Load("IT0", out regs.IT[0]);
|
||||
result.Load("IT1", out regs.IT[1]);
|
||||
result.Load("LOAD0", out regs.LOAD[0]);
|
||||
result.Load("LOAD1", out regs.LOAD[1]);
|
||||
result.Load("OUTMODE0", out regs.OUTMODE[0]);
|
||||
result.Load("OUTMODE1", out regs.OUTMODE[1]);
|
||||
result.Load("PBON0", out regs.PBON[0]);
|
||||
result.Load("PBON1", out regs.PBON[1]);
|
||||
result.Load("RUNMODE0", out regs.RUNMODE[0]);
|
||||
result.Load("RUNMODE1", out regs.RUNMODE[1]);
|
||||
result.Load("SDR", out regs.SDR);
|
||||
result.Load("SDRCOUNT", out regs.SDRCOUNT);
|
||||
result.Load("SPMODE", out regs.SPMODE);
|
||||
result.Load("START0", out regs.START[0]);
|
||||
result.Load("START1", out regs.START[1]);
|
||||
result.Load("T0", out regs.T[0]);
|
||||
result.Load("T1", out regs.T[1]);
|
||||
result.Load("TICK0", out regs.TICK[0]);
|
||||
result.Load("TICK1", out regs.TICK[1]);
|
||||
result.Load("TLATCH0", out regs.TLATCH[0]);
|
||||
result.Load("TLATCH1", out regs.TLATCH[1]);
|
||||
result.Load("TOD10", out regs.TOD10);
|
||||
result.Load("TODHR", out regs.TODHR);
|
||||
result.Load("TODMIN", out regs.TODMIN);
|
||||
result.Load("TODPM", out regs.TODPM);
|
||||
result.Load("TODREADLATCH", out regs.TODREADLATCH);
|
||||
result.Load("TODREADLATCH10", out regs.TODREADLATCH10);
|
||||
result.Load("TODREADLATCHSEC", out regs.TODREADLATCHSEC);
|
||||
result.Load("TODREADLATCHMIN", out regs.TODREADLATCHMIN);
|
||||
result.Load("TODREADLATCHHR", out regs.TODREADLATCHHR);
|
||||
result.Load("TODSEC", out regs.TODSEC);
|
||||
|
||||
// ports
|
||||
regs.connectors[0].Direction = (byte)result["DIR0"];
|
||||
regs.connectors[1].Direction = (byte)result["DIR1"];
|
||||
regs.connectors[0].Latch = (byte)result["LATCH0"];
|
||||
regs.connectors[1].Latch = (byte)result["LATCH1"];
|
||||
|
||||
// state
|
||||
result.Load("INTMASK", out intMask);
|
||||
result.Load("LASTCNT", out lastCNT);
|
||||
result.Load("TODCOUNTER", out todCounter);
|
||||
result.Load("TODFREQUENCY", out todFrequency);
|
||||
result.Load("UNDERFLOW0", out underflow[0]);
|
||||
result.Load("UNDERFLOW1", out underflow[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,8 +25,8 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
outputConverters[0] = new DataPortConverter();
|
||||
outputConverters[1] = new DataPortConverter();
|
||||
connectors = new DataPortConnector[2];
|
||||
connectors[0] = new DataPortConnector(ReadData0, ReadDirection0, ReadLatch0, ReadRemoteLatch0, WriteData0, WriteDirection0);
|
||||
connectors[1] = new DataPortConnector(ReadData1, ReadDirection1, ReadLatch1, ReadRemoteLatch1, WriteData1, WriteDirection1);
|
||||
connectors[0] = new DataPortConnector(ReadData0, ReadDirection0, ReadLatch0, ReadRemoteLatch0, WriteData0, WriteDirection0, WriteLatch0);
|
||||
connectors[1] = new DataPortConnector(ReadData1, ReadDirection1, ReadLatch1, ReadRemoteLatch1, WriteData1, WriteDirection1, WriteLatch1);
|
||||
connected[0] = false;
|
||||
connected[1] = false;
|
||||
direction[0] = 0x00;
|
||||
|
@ -138,14 +138,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
ClearHooks();
|
||||
}
|
||||
|
||||
public void LoadState(byte direction0, byte direction1, byte latch0, byte latch1)
|
||||
{
|
||||
direction[0] = direction0;
|
||||
direction[1] = direction1;
|
||||
latch[0] = latch0;
|
||||
latch[1] = latch1;
|
||||
}
|
||||
|
||||
protected virtual byte ReadData0()
|
||||
{
|
||||
byte result;
|
||||
|
@ -225,6 +217,16 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
direction[1] = val;
|
||||
ExecuteWriteHooks();
|
||||
}
|
||||
|
||||
protected virtual void WriteLatch0(byte val)
|
||||
{
|
||||
latch[0] = val;
|
||||
}
|
||||
|
||||
protected virtual void WriteLatch1(byte val)
|
||||
{
|
||||
latch[1] = val;
|
||||
}
|
||||
}
|
||||
|
||||
public class DataPortConnector
|
||||
|
@ -235,6 +237,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
private Func<byte> ReadRemoteLatch;
|
||||
private Action<byte> WriteData;
|
||||
private Action<byte> WriteDirection;
|
||||
private Action<byte> WriteLatch;
|
||||
|
||||
public DataPortConnector()
|
||||
{
|
||||
|
@ -244,6 +247,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
ReadRemoteLatch = ReadDataDummy;
|
||||
WriteData = WriteDataDummy;
|
||||
WriteDirection = WriteDataDummy;
|
||||
WriteLatch = WriteDataDummy;
|
||||
}
|
||||
|
||||
public DataPortConnector(DataPortConnector source)
|
||||
|
@ -254,9 +258,10 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
ReadRemoteLatch = source.ReadRemoteLatch;
|
||||
WriteData = source.WriteData;
|
||||
WriteDirection = source.WriteDirection;
|
||||
WriteLatch = source.WriteLatch;
|
||||
}
|
||||
|
||||
public DataPortConnector(Func<byte> newReadData, Func<byte> newReadDirection, Func<byte> newReadLatch, Func<byte> newReadRemoteLatch, Action<byte> newWriteData, Action<byte> newWriteDirection)
|
||||
public DataPortConnector(Func<byte> newReadData, Func<byte> newReadDirection, Func<byte> newReadLatch, Func<byte> newReadRemoteLatch, Action<byte> newWriteData, Action<byte> newWriteDirection, Action<byte> newWriteLatch)
|
||||
{
|
||||
ReadData = newReadData;
|
||||
ReadDirection = newReadDirection;
|
||||
|
@ -264,6 +269,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
ReadRemoteLatch = newReadRemoteLatch;
|
||||
WriteData = newWriteData;
|
||||
WriteDirection = newWriteDirection;
|
||||
WriteLatch = newWriteLatch;
|
||||
}
|
||||
|
||||
public byte Data
|
||||
|
@ -296,6 +302,10 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
{
|
||||
return ReadLatch();
|
||||
}
|
||||
set
|
||||
{
|
||||
WriteLatch(value);
|
||||
}
|
||||
}
|
||||
|
||||
public DataPortListener Listener()
|
||||
|
|
|
@ -18,8 +18,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
|
||||
public void LoadStateText(TextReader reader)
|
||||
{
|
||||
Dictionary<string, StateParameters> state = new Dictionary<string, StateParameters>();
|
||||
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
|
@ -41,7 +39,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
|
||||
public void SaveStateBinary(BinaryWriter bw)
|
||||
{
|
||||
|
||||
Dictionary<string, StateParameters> state = new Dictionary<string, StateParameters>();
|
||||
}
|
||||
public void SaveStateText(TextWriter writer)
|
||||
{
|
||||
|
@ -135,5 +133,35 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Load(string key, out byte val)
|
||||
{
|
||||
val = (byte)(this[key] & 0xFF);
|
||||
}
|
||||
|
||||
public void Load(string key, out int val)
|
||||
{
|
||||
val = this[key];
|
||||
}
|
||||
|
||||
public void Load(string key, out bool val)
|
||||
{
|
||||
val = this[key] != 0;
|
||||
}
|
||||
|
||||
public void Save(string key, byte val)
|
||||
{
|
||||
this[key] = (int)val;
|
||||
}
|
||||
|
||||
public void Save(string key, int val)
|
||||
{
|
||||
this[key] = val;
|
||||
}
|
||||
|
||||
public void Save(string key, bool val)
|
||||
{
|
||||
this[key] = val ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue