From 5bf33b54a633130c600fa87e7860d261e606d7ee Mon Sep 17 00:00:00 2001 From: goyuken Date: Fri, 2 Nov 2012 17:51:07 +0000 Subject: [PATCH] SxROM: 1% speedup --- .../Consoles/Nintendo/NES/Boards/SxROM.cs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs index 14d40b815c..56e5cbe160 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/SxROM.cs @@ -207,25 +207,19 @@ namespace BizHawk.Emulation.Consoles.Nintendo //configuration protected int prg_mask, chr_mask; protected int vram_mask; - const int pputimeout = 4; // i don't know if this is right, but anything lower will not boot Bill & Ted bool disablemirror = false; // mapper 171: mmc1 without mirroring control //state public MMC1 mmc1; - /// number of cycles since last WritePRG() - uint ppuclock; - - public override void ClockPPU() - { - ppuclock++; - } + /// cpu cyle when the last MMC1 serial write occured + int lastwritecycle; public override void WritePRG(int addr, byte value) { // mmc1 ignores subsequent writes that are very close together - if (ppuclock >= pputimeout) + if (NES.cpu.TotalExecutedCycles - lastwritecycle != 1) { - ppuclock = 0; + lastwritecycle = NES.cpu.TotalExecutedCycles; mmc1.Write(addr, value); if (!disablemirror) SetMirrorType(mmc1.mirror); //often redundant, but gets the job done @@ -271,7 +265,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo { base.SyncState(ser); mmc1.SyncState(ser); - ser.Sync("ppuclock", ref ppuclock); + ser.Sync("lastwritecycle", ref lastwritecycle); } public override bool Configure(NES.EDetectionOrigin origin) @@ -365,7 +359,6 @@ namespace BizHawk.Emulation.Consoles.Nintendo chr_mask = (Cart.chr_size / 8 * 2) - 1; if (!disablemirror) SetMirrorType(mmc1.mirror); - ppuclock = pputimeout; } } //class SxROM