minor adjustments
[fceu.git] / drivers / gp2x / throttle.c
index 81cd916..c52eb68 100644 (file)
@@ -1,58 +1,20 @@
 #include <sys/time.h>
 #include "main.h"
+#include "gp2x.h"
 #include "throttle.h"
 
-#if 0
-static uint64 tfreq;
-static uint64 desiredfps;
-
-void RefreshThrottleFPS(void)
-{
- uint64 f=FCEUI_GetDesiredFPS();
- // great, a bit faster than before
- //f = (f*65) >> 6;
- desiredfps=f>>8;
- tfreq=1000000;
- tfreq<<=16;    /* Adjustment for fps returned from FCEUI_GetDesiredFPS(). */
-}
-
-static uint64 GetCurTime(void)
-{
- uint64 ret;
- struct timeval tv;
-
- gettimeofday(&tv,0);
- ret=(uint64)tv.tv_sec*1000000;
- ret+=tv.tv_usec;
- return(ret);
-}
-
-INLINE void SpeedThrottle(void)
-{
- static uint64 ttime,ltime;
-
- waiter:
-
- ttime=GetCurTime();
-
- if( (ttime-ltime) < (tfreq/desiredfps) )
- {
-  goto waiter;
- }
- if( (ttime-ltime) >= (tfreq*4/desiredfps))
-  ltime=ttime;
- else
-  ltime+=tfreq/desiredfps;
-}
-
-#else
 
 extern uint8 PAL;
-extern int FSkip, FSkip_setting;
+extern int FSkip;
 static int usec_aim = 0, usec_done = 0;
 static int skip_count = 0;
 
-INLINE void SpeedThrottle(void)
+void RefreshThrottleFPS(void)
+{
+       usec_aim = usec_done = skip_count = 0;
+}
+
+void SpeedThrottle(void)
 {
        static struct timeval tv_prev;
        struct timeval tv_now;
@@ -73,21 +35,22 @@ INLINE void SpeedThrottle(void)
        usec_done += tv_now.tv_usec - tv_prev.tv_usec;
 
 #ifdef FRAMESKIP
-       if (FSkip_setting >= 0)
+       if (Settings.frameskip >= 0)
        {
-               if (skip_count >= FSkip_setting)
+               if (skip_count >= Settings.frameskip)
                        skip_count = 0;
                else {
                        skip_count++;
                        FSkip = 1;
                }
        }
-       else if (usec_done > usec_aim)
+       else if (usec_done > usec_aim + 1024*4)
        {
                /* auto frameskip */
-               if (usec_done - usec_aim > 150000)
-                       usec_done = usec_aim = 0; // too much behind, try to recover..
-               FSkip = 1;
+               if (usec_done - usec_aim > 1024*32)
+                       usec_done = usec_aim = 1; // too much behind, try to recover..
+               else
+                       FSkip = 1;
                tv_prev = tv_now;
                return;
        }
@@ -106,5 +69,4 @@ INLINE void SpeedThrottle(void)
        usec_done = usec_done - usec_aim + 1; // reset to prevent overflows
        usec_aim = 0;
 }
-#endif