frame limiter opt, menu btn on cfg load fix
[libpicofe.git] / common / emu.c
index 5bd34e8..7c406b5 100644 (file)
@@ -1325,10 +1325,14 @@ void emu_loop(void)
 \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
@@ -1343,7 +1347,7 @@ void emu_loop(void)
                                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
@@ -1369,7 +1373,7 @@ void emu_loop(void)
                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