\r
if (timestamp - timestamp_base >= ms_to_ticks(1000))\r
{\r
- if (PsndOut == 0 && currentConfig.Frameskip >= 0)\r
+ if ((currentConfig.EmuOpt & EOPT_NO_FRMLIMIT) && currentConfig.Frameskip >= 0)\r
pframes_done = 0;\r
- else\r
+ else {\r
pframes_done -= target_fps;\r
+ /* don't allow it to drift during heavy slowdowns */\r
+ if (pframes_done < -2)\r
+ pframes_done = -2;\r
+ }\r
timestamp_base += ms_to_ticks(1000);\r
}\r
\r
pframes_done++; frames_done++;\r
diff_lim += target_frametime;\r
\r
- if (PsndOut && !reset_timing) { // do framelimitting if sound is enabled\r
+ if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) {\r
timestamp = get_ticks();\r
diff = timestamp - timestamp_base;\r
if (diff < diff_lim) // we are too fast\r
PicoFrame();\r
\r
/* frame limiter */\r
- if (!reset_timing && (PsndOut != NULL || currentConfig.Frameskip < 0))\r
+ if (!reset_timing && !(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT))\r
{\r
timestamp = get_ticks();\r
diff = timestamp - timestamp_base;\r