From 7bcc8a67f308201c6c1cdf19842c06a611503b3a Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 16 Jun 2015 06:00:00 +0000 Subject: [PATCH] fiddle around with sdl frameadvance throttle --- trunk/src/drivers/sdl/sdl-throttle.cpp | 30 +++++++++++++++----------- trunk/src/drivers/sdl/sdl.cpp | 11 +++++----- trunk/src/fceu.cpp | 6 +----- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/trunk/src/drivers/sdl/sdl-throttle.cpp b/trunk/src/drivers/sdl/sdl-throttle.cpp index 6832f954..ead88b63 100644 --- a/trunk/src/drivers/sdl/sdl-throttle.cpp +++ b/trunk/src/drivers/sdl/sdl-throttle.cpp @@ -11,7 +11,9 @@ static const double Normal = 1.0; // 1x speed (around 60 fps on NTSC) static uint64 Lasttime, Nexttime; static long double desired_frametime; static int InFrame; -double g_fpsScale = Normal; // used by sdl.cpp +double fps_scale = Normal; // used by sdl.cpp +double fps_scale_frameadvance = Normal; +double fps_scale_unpaused = Normal; bool MaxSpeed = false; /* LOGMUL = exp(log(2) / 3) @@ -31,7 +33,7 @@ void RefreshThrottleFPS() { uint64 fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz - desired_frametime = 16777216.0l / (fps * g_fpsScale); + desired_frametime = 16777216.0l / (fps * fps_scale); Lasttime=0; Nexttime=0; @@ -44,7 +46,7 @@ RefreshThrottleFPS() int SpeedThrottle() { - if(g_fpsScale >= 32) + if(fps_scale >= 32) { return 0; /* Done waiting */ } @@ -92,13 +94,15 @@ SpeedThrottle() */ void IncreaseEmulationSpeed(void) { - g_fpsScale *= LOGMUL; + fps_scale_unpaused *= LOGMUL; - if(g_fpsScale > Fastest) g_fpsScale = Fastest; + if(fps_scale_unpaused > Fastest) fps_scale_unpaused = Fastest; + + fps_scale = fps_scale_unpaused; RefreshThrottleFPS(); - FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0); + FCEU_DispMessage("Emulation speed %.1f%%",0, fps_scale*100.0); } /** @@ -106,9 +110,11 @@ void IncreaseEmulationSpeed(void) */ void DecreaseEmulationSpeed(void) { - g_fpsScale /= LOGMUL; - if(g_fpsScale < Slowest) - g_fpsScale = Slowest; + fps_scale_unpaused /= LOGMUL; + if(fps_scale_unpaused < Slowest) + fps_scale_unpaused = Slowest; + + fps_scale = fps_scale_unpaused; RefreshThrottleFPS(); @@ -125,19 +131,19 @@ FCEUD_SetEmulationSpeed(int cmd) switch(cmd) { case EMUSPEED_SLOWEST: - g_fpsScale = Slowest; + fps_scale_unpaused = Slowest; break; case EMUSPEED_SLOWER: DecreaseEmulationSpeed(); break; case EMUSPEED_NORMAL: - g_fpsScale = Normal; + fps_scale_unpaused = Normal; break; case EMUSPEED_FASTER: IncreaseEmulationSpeed(); break; case EMUSPEED_FASTEST: - g_fpsScale = Fastest; + fps_scale_unpaused = Fastest; MaxSpeed = true; break; default: diff --git a/trunk/src/drivers/sdl/sdl.cpp b/trunk/src/drivers/sdl/sdl.cpp index 3985158f..b59ecb42 100644 --- a/trunk/src/drivers/sdl/sdl.cpp +++ b/trunk/src/drivers/sdl/sdl.cpp @@ -48,8 +48,9 @@ #include #include - -extern double g_fpsScale; +extern double fps_scale; +extern double fps_scale_frameadvance; +extern double fps_scale_unpaused; extern bool MaxSpeed; @@ -402,14 +403,14 @@ FCEUD_Update(uint8 *XBuf, int ocount = Count; // apply frame scaling to Count - Count = (int)(Count / g_fpsScale); + Count = (int)(Count / fps_scale); if(Count) { int32 can=GetWriteSound(); static int uflow=0; int32 tmpcan; // don't underflow when scaling fps - if(can >= GetMaxSound() && g_fpsScale==1.0) uflow=1; /* Go into massive underflow mode. */ + if(can >= GetMaxSound() && fps_scale==1.0) uflow=1; /* Go into massive underflow mode. */ if(can > Count) can=Count; else uflow=0; @@ -422,7 +423,7 @@ FCEUD_Update(uint8 *XBuf, //if(uflow) puts("Underflow"); tmpcan = GetWriteSound(); // don't underflow when scaling fps - if(g_fpsScale>1.0 || ((tmpcan < Count*0.90) && !uflow)) { + if(fps_scale>1.0 || ((tmpcan < Count*0.90) && !uflow)) { if(XBuf && (inited&4) && !(NoWaiting & 2)) BlitScreen(XBuf); Buffer+=can; diff --git a/trunk/src/fceu.cpp b/trunk/src/fceu.cpp index fe4f4f7c..4f929b11 100644 --- a/trunk/src/fceu.cpp +++ b/trunk/src/fceu.cpp @@ -52,11 +52,11 @@ extern void CDLoggerROMChanged(); extern void ResetDebugStatisticsCounters(); extern void SetMainWindowText(); extern bool isTaseditorRecording(); +#endif extern int32 fps_scale; extern int32 fps_scale_unpaused; extern int32 fps_scale_frameadvance; -#endif extern void RefreshThrottleFPS(); #ifdef _S9XLUA_H @@ -643,24 +643,20 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski // the user is holding Frame Advance key // clear paused flag temporarily EmulationPaused &= ~EMULATIONPAUSED_PAUSED; -#ifdef WIN32 // different emulation speed when holding Frame Advance if (fps_scale_frameadvance > 0) { fps_scale = fps_scale_frameadvance; RefreshThrottleFPS(); } -#endif } else { -#ifdef WIN32 if (fps_scale_frameadvance > 0) { // restore emulation speed when Frame Advance is not held fps_scale = fps_scale_unpaused; RefreshThrottleFPS(); } -#endif if (EmulationPaused & EMULATIONPAUSED_PAUSED) { // emulator is paused