diff --git a/ExternalCoreProjects/Virtu/Cpu.cs b/ExternalCoreProjects/Virtu/Cpu.cs index 6443522422..fc25fc43eb 100644 --- a/ExternalCoreProjects/Virtu/Cpu.cs +++ b/ExternalCoreProjects/Virtu/Cpu.cs @@ -8,9 +8,18 @@ namespace Jellyfish.Virtu { public sealed partial class Cpu : MachineComponent { - public Cpu() { } + public Cpu() + { + InitializeOpCodeDelegates(); + } + public Cpu(Machine machine) : base(machine) + { + InitializeOpCodeDelegates(); + } + + private void InitializeOpCodeDelegates() { ExecuteOpCode65N02 = new Action[OpCodeCount] { @@ -3434,7 +3443,6 @@ namespace Jellyfish.Virtu } #endregion - [JsonIgnore] public bool Is65C02 { get { return _is65C02; } set { _is65C02 = value; _executeOpCode = _is65C02 ? ExecuteOpCode65C02 : ExecuteOpCode65N02; } } public bool IsThrottled { get; set; } public int Multiplier { get; set; } @@ -3452,7 +3460,9 @@ namespace Jellyfish.Virtu private Memory _memory; + [JsonIgnore] private bool _is65C02; + [JsonIgnore] private Action[] _executeOpCode; [JsonIgnore] diff --git a/ExternalCoreProjects/Virtu/CpuData.cs b/ExternalCoreProjects/Virtu/CpuData.cs index e21859092c..9fc4bdb615 100644 --- a/ExternalCoreProjects/Virtu/CpuData.cs +++ b/ExternalCoreProjects/Virtu/CpuData.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; namespace Jellyfish.Virtu { @@ -6,7 +7,9 @@ namespace Jellyfish.Virtu { private const int OpCodeCount = 256; + [JsonIgnore] private Action[] ExecuteOpCode65N02; + [JsonIgnore] private Action[] ExecuteOpCode65C02; private const int PC = 0x01; diff --git a/ExternalCoreProjects/Virtu/Memory.cs b/ExternalCoreProjects/Virtu/Memory.cs index 13a299c799..737ea48af3 100644 --- a/ExternalCoreProjects/Virtu/Memory.cs +++ b/ExternalCoreProjects/Virtu/Memory.cs @@ -13,11 +13,20 @@ namespace Jellyfish.Virtu public sealed partial class Memory : MachineComponent { - public Memory() { } + public Memory() + { + InitializeWriteDelegates(); + } + public Memory(Machine machine, byte[] appleIIe) : base(machine) { _appleIIe = appleIIe; + InitializeWriteDelegates(); + } + + private void InitializeWriteDelegates() + { WriteRamModeBankRegion = new Action[Video.ModeCount][][]; for (int mode = 0; mode < Video.ModeCount; mode++) { @@ -26,7 +35,6 @@ namespace Jellyfish.Virtu new Action[RegionCount], new Action[RegionCount] }; } - WriteRamModeBankRegion[Video.Mode0][BankMain][Region0407] = WriteRamMode0MainRegion0407; WriteRamModeBankRegion[Video.Mode0][BankMain][Region080B] = WriteRamMode0MainRegion080B; WriteRamModeBankRegion[Video.Mode1][BankMain][Region0407] = WriteRamMode1MainRegion0407; @@ -2133,10 +2141,15 @@ namespace Jellyfish.Virtu public MonitorType Monitor { get; private set; } public int VideoMode { get { return StateVideoMode[_state & StateVideo]; } } + [JsonIgnore] private Action _writeIoRegionC0C0; + [JsonIgnore] private Action _writeIoRegionC1C7; + [JsonIgnore] private Action _writeIoRegionC3C3; + [JsonIgnore] private Action _writeIoRegionC8CF; + [JsonIgnore] private Action _writeRomRegionD0FF; [JsonIgnore] diff --git a/ExternalCoreProjects/Virtu/MemoryData.cs b/ExternalCoreProjects/Virtu/MemoryData.cs index 3de7adf037..e8148a563d 100644 --- a/ExternalCoreProjects/Virtu/MemoryData.cs +++ b/ExternalCoreProjects/Virtu/MemoryData.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; namespace Jellyfish.Virtu { @@ -101,6 +102,7 @@ namespace Jellyfish.Virtu Video.ModeC, Video.ModeD, Video.Mode1, Video.Mode2, Video.ModeE, Video.ModeF, Video.Mode1, Video.Mode2 }; + [JsonIgnore] private Action[][][] WriteRamModeBankRegion; } } diff --git a/References/Virtu.dll b/References/Virtu.dll index b164b2dc13..3957bd6435 100644 Binary files a/References/Virtu.dll and b/References/Virtu.dll differ