remove freeze system; replacement incoming
This commit is contained in:
parent
0f2b81796f
commit
6f379cee76
|
@ -26,7 +26,6 @@ namespace BizHawk.Emulation.Consoles.Calculator
|
|||
int m_LinkOutput, m_LinkState;
|
||||
bool m_CursorMoved;
|
||||
|
||||
MemoryDomain.FreezeData[] sysbus_freeze = new MemoryDomain.FreezeData[0x10000];
|
||||
//-------
|
||||
|
||||
public byte ReadMemory(ushort addr)
|
||||
|
@ -40,9 +39,6 @@ namespace BizHawk.Emulation.Consoles.Calculator
|
|||
ret = rom[romPage * 0x4000 + addr - 0x4000]; //other rom page
|
||||
else ret = ram[addr - 0x8000];
|
||||
|
||||
//apply freeze
|
||||
if (sysbus_freeze[addr].IsFrozen) ret = sysbus_freeze[addr].value;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -589,9 +585,6 @@ namespace BizHawk.Emulation.Consoles.Calculator
|
|||
(addr, value) => ram[addr & RamSizeMask] = value);
|
||||
domains.Add(MainMemoryDomain);
|
||||
memoryDomains = domains.AsReadOnly();
|
||||
|
||||
MainMemoryDomain.GetFreeze = addr => sysbus_freeze[addr];
|
||||
MainMemoryDomain.SetFreeze = (addr, value) => sysbus_freeze[addr] = value;
|
||||
}
|
||||
|
||||
public IList<MemoryDomain> MemoryDomains { get { return memoryDomains; } }
|
||||
|
|
|
@ -23,32 +23,6 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
CartInfo cart; //the current cart prototype. should be moved into the board, perhaps
|
||||
INESBoard board; //the board hardware that is currently driving things
|
||||
|
||||
private struct FreezeRecord
|
||||
{
|
||||
public int Address;
|
||||
public MemoryDomain.FreezeData Data;
|
||||
}
|
||||
List<FreezeRecord> sysbus_freeze_list = new List<FreezeRecord>();
|
||||
List<FreezeRecord> ppubus_freeze_list = new List<FreezeRecord>();
|
||||
|
||||
MemoryDomain.FreezeData GetFreeze(List<FreezeRecord> list, int addr)
|
||||
{
|
||||
int index = list.FindIndex((fd) => fd.Address == addr);
|
||||
if (index == -1) return MemoryDomain.FreezeData.Empty;
|
||||
return list[index].Data;
|
||||
}
|
||||
|
||||
void SetFreeze(List<FreezeRecord> list, int addr, MemoryDomain.FreezeData data)
|
||||
{
|
||||
int index = list.FindIndex((fd) => fd.Address == addr);
|
||||
if (index != -1) list.RemoveAt(index);
|
||||
if(!data.IsFrozen) return;
|
||||
FreezeRecord fr = new FreezeRecord();
|
||||
fr.Data = data;
|
||||
fr.Address = addr;
|
||||
list.Add(fr);
|
||||
}
|
||||
|
||||
bool _irq_apu, _irq_cart;
|
||||
public bool irq_apu { get { return _irq_apu; } set { _irq_apu = value; sync_irq(); } }
|
||||
public bool irq_cart { get { return _irq_cart; } set { _irq_cart = value; sync_irq(); } }
|
||||
|
|
|
@ -291,15 +291,6 @@ namespace BizHawk.Emulation.Consoles.Nintendo
|
|||
var CIRAMdomain = new MemoryDomain("CIRAM (nametables)", 0x800, Endian.Little,
|
||||
addr => CIRAM[addr & 0x07FF], (addr, value) => CIRAM[addr & 0x07FF] = value);
|
||||
|
||||
SystemBus.GetFreeze = addr => GetFreeze(sysbus_freeze_list, addr);
|
||||
SystemBus.SetFreeze = (addr, value) => SetFreeze(sysbus_freeze_list, addr, value);
|
||||
|
||||
RAM.GetFreeze = addr => GetFreeze(sysbus_freeze_list, addr);
|
||||
RAM.SetFreeze = (addr, value) => SetFreeze(sysbus_freeze_list, addr & 0x07FF, value);
|
||||
|
||||
PPUBus.GetFreeze = addr => GetFreeze(ppubus_freeze_list, addr);
|
||||
PPUBus.SetFreeze = (addr, value) => SetFreeze(ppubus_freeze_list, addr, value);
|
||||
|
||||
//demo a game genie code
|
||||
GetWatch(NESWatch.EDomain.Sysbus, 0xB424).SetGameGenie(-1, 0x10);
|
||||
GetWatch(NESWatch.EDomain.Sysbus, 0xB424).RemoveGameGenie();
|
||||
|
|
|
@ -48,32 +48,9 @@ namespace BizHawk
|
|||
public readonly int Size;
|
||||
public readonly Endian Endian;
|
||||
|
||||
//perhaps inconveniently, this is a struct.
|
||||
//this is a premature optimization, since I anticipate having millions of these and i didnt want millions of objects
|
||||
public struct FreezeData
|
||||
{
|
||||
public FreezeData(Flag flags, byte value)
|
||||
{
|
||||
this.flags = flags;
|
||||
this.value = value;
|
||||
}
|
||||
public readonly byte value;
|
||||
public readonly Flag flags;
|
||||
public enum Flag : byte
|
||||
{
|
||||
None = 0,
|
||||
Frozen = 1,
|
||||
}
|
||||
|
||||
public bool IsFrozen { get { return (flags & Flag.Frozen) != 0; } }
|
||||
public static FreezeData Empty { get { return new FreezeData(); } }
|
||||
}
|
||||
|
||||
public readonly Func<int, byte> PeekByte;
|
||||
public readonly Action<int, byte> PokeByte;
|
||||
public Func<int, FreezeData> GetFreeze;
|
||||
public Action<int, FreezeData> SetFreeze;
|
||||
|
||||
|
||||
public MemoryDomain(string name, int size, Endian endian, Func<int, byte> peekByte, Action<int, byte> pokeByte)
|
||||
{
|
||||
Name = name;
|
||||
|
|
|
@ -44,13 +44,13 @@ namespace BizHawk.MultiClient
|
|||
public void Enable()
|
||||
{
|
||||
enabled = true;
|
||||
domain.SetFreeze(address, new MemoryDomain.FreezeData(MemoryDomain.FreezeData.Flag.Frozen, value));
|
||||
//domain.SetFreeze(address, new MemoryDomain.FreezeData(MemoryDomain.FreezeData.Flag.Frozen, value));
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
enabled = false;
|
||||
domain.SetFreeze(address, MemoryDomain.FreezeData.Empty);
|
||||
//domain.ClearFreeze(address);
|
||||
}
|
||||
|
||||
public bool IsEnabled()
|
||||
|
|
Loading…
Reference in New Issue