From f89840234dbb96ba9012ca6ace73c02802a58c60 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 28 Aug 2020 19:02:21 -0400 Subject: [PATCH] minimally fix nes CDL which was broken 3 years ago --- .../Consoles/Nintendo/NES/Boards/INesBoard.cs | 2 ++ .../Nintendo/NES/Boards/NesBoardBase.cs | 14 ++++++++++ .../Nintendo/NES/NES.ICodeDataLogger.cs | 27 +++++++++---------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/INesBoard.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/INesBoard.cs index e6f2c3cd22..ccd0f09b50 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/INesBoard.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/INesBoard.cs @@ -50,6 +50,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES void SyncState(Serializer ser); bool IrqSignal { get; } + NES.CDLog_MapResults MapMemory(ushort addr, bool write); + //mixes the board's custom audio into the supplied sample buffer void ApplyCustomAudio(short[] samples); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/NesBoardBase.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/NesBoardBase.cs index 3452012671..b432621f7f 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/NesBoardBase.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/NesBoardBase.cs @@ -38,6 +38,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //this is set to true when SyncState is called, so that we know the base class SyncState was used public bool SyncStateFlag; + public virtual NES.CDLog_MapResults MapMemory(ushort addr, bool write) + { + NES.CDLog_MapResults ret = new NES.CDLog_MapResults(); + ret.Type = NES.CDLog_AddrType.None; + + if (addr < 0x2000) + { + ret.Type = NES.CDLog_AddrType.MainRAM; + ret.Address = addr & 0x7FF; + } + + return ret; + } + public virtual void SyncState(Serializer ser) { ser.Sync(nameof(_vram), ref _vram, true); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs index c9c1654c39..7506154303 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs @@ -40,16 +40,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } - private enum CDLog_AddrType + public enum CDLog_AddrType { None, - ROM, - MainRAM, + ROM, + MainRAM, SaveRAM, } [Flags] - private enum CDLog_Flags + public enum CDLog_Flags { ExecFirst = 0x01, ExecOperand = 0x02, @@ -57,28 +57,25 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } #pragma warning disable CS0649 - private struct CDLog_MapResults + public struct CDLog_MapResults { public CDLog_AddrType Type; public int Address; } - private delegate CDLog_MapResults MapMemoryDelegate(ushort addr, bool write); - private MapMemoryDelegate MapMemory; + private delegate CDLog_MapResults MpMemoryDelegate(ushort addr, bool write); #pragma warning restore CS0649 private ICodeDataLog CDL; private void RunCDL(ushort address, CDLog_Flags flags) { - if (MapMemory != null) + + CDLog_MapResults results = Board.MapMemory(address, false); + switch (results.Type) { - CDLog_MapResults results = MapMemory(address, false); - switch (results.Type) - { - case CDLog_AddrType.None: break; - case CDLog_AddrType.MainRAM: CDL["Main RAM"][results.Address] |= (byte)flags; break; - case CDLog_AddrType.SaveRAM: CDL["Save RAM"][results.Address] |= (byte)flags; break; - } + case CDLog_AddrType.None: break; + case CDLog_AddrType.MainRAM: CDL["RAM"][results.Address] |= (byte)flags; break; + case CDLog_AddrType.SaveRAM: CDL["Save RAM"][results.Address] |= (byte)flags; break; } }