From 77a535a7d8f5b2137c9f8c417b064772355cf7d0 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Fri, 11 Aug 2017 19:59:10 -0400 Subject: [PATCH] Implement ICycleTiming on neshawk --- BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs | 8 +++++++- BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index e8f52c27b2..18752340e5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -9,7 +9,7 @@ using BizHawk.Emulation.Cores.Components.M6502; namespace BizHawk.Emulation.Cores.Nintendo.NES { - public partial class NES : IEmulator + public partial class NES : IEmulator, ICycleTiming { //hardware/state public MOS6502X cpu; @@ -216,6 +216,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES cpuclockrate = 1662607; cpu_sequence = cpu_sequence_PAL; _display_type = DisplayType.PAL; + ClockRate = 5320342.5; break; case Common.DisplayType.NTSC: apu = new APU(this, apu, false); @@ -224,6 +225,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES VsyncDen = 655171; cpuclockrate = 1789773; cpu_sequence = cpu_sequence_NTSC; + ClockRate = 5369318.1818181818181818181818182; break; // this is in bootgod, but not used at all case Common.DisplayType.Dendy: @@ -234,6 +236,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES cpuclockrate = 1773448; cpu_sequence = cpu_sequence_NTSC; _display_type = DisplayType.Dendy; + ClockRate = 5320342.5; break; default: throw new Exception("Unknown displaytype!"); @@ -296,6 +299,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } + public long CycleCount => ppu.TotalCycles; + public double ClockRate { get; private set; } + private int VsyncNum { get; set; } private int VsyncDen { get; set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs index 0b937975f8..4468e90dd2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs @@ -203,6 +203,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public byte[] OAM; public byte[] PALRAM; + private long _totalCycles; + public long TotalCycles => _totalCycles; + public void SyncState(Serializer ser) { ser.Sync("cpu_step", ref cpu_step); @@ -248,6 +251,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //don't sync framebuffer into binary (rewind) states if(ser.IsText) ser.Sync("xbuf", ref xbuf, false); + + ser.Sync("_totalCycles", ref _totalCycles); } public void Reset() @@ -345,6 +350,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES nes.Board.ClockPPU(); } } + _totalCycles += x; } } }