fixed: broken fs0, sram saves
authornotaz <notasas@gmail.com>
Fri, 1 Jun 2007 22:32:48 +0000 (22:32 +0000)
committernotaz <notasas@gmail.com>
Fri, 1 Jun 2007 22:32:48 +0000 (22:32 +0000)
git-svn-id: file:///home/notaz/opt/svn/fceu@143 be3aeb3a-fb24-0410-a615-afba39da0efa

cart.c
drivers/gp2x/main.c
drivers/gp2x/throttle.c
fds.c

diff --git a/cart.c b/cart.c
index 742f9b0..0dd8fee 100644 (file)
--- a/cart.c
+++ b/cart.c
 #include <stdlib.h>
 #include <stdio.h>
 
+#ifdef GP2X
+#include <unistd.h> // for sync()
+#endif
+
 #include "types.h"
 #include "fce.h"
 #include "ppu.h"
@@ -683,6 +687,10 @@ void FCEU_SaveGameSave(CartInfo *LocalHWInfo)
      fwrite(LocalHWInfo->SaveGame[x],1,
       LocalHWInfo->SaveGameLen[x],sp);
     }
+   fclose(sp);
+#ifdef GP2X
+   sync();
+#endif
   }
   free(soot);
  }
@@ -706,6 +714,7 @@ void FCEU_LoadGameSave(CartInfo *LocalHWInfo)
    for(x=0;x<4;x++)
     if(LocalHWInfo->SaveGame[x])
      fread(LocalHWInfo->SaveGame[x],1,LocalHWInfo->SaveGameLen[x],sp);
+   fclose(sp);
   }
   free(soot);
  }
index caea8cc..3f4dff9 100644 (file)
@@ -43,8 +43,6 @@
 #include "dface.h"
 
 
-// TODO! broken fs0, sram saves
-
 void CleanSurface(void);
 
 // internals
@@ -393,7 +391,6 @@ int CLImain(int argc, char *argv[])
           if (Settings.region_force)
            FCEUI_SetVidSystem(Settings.region_force - 1);
           ParseGI(fceugi);
-          //RefreshThrottleFPS();
           InitOtherInput();
 
           GameInterface(GI_INFOSTRING, infostring);
@@ -421,6 +418,7 @@ int CLImain(int argc, char *argv[])
          }
 
         PrepareOtherInput();
+        RefreshThrottleFPS();
         FCEUI_GetCurrentVidSystem(&srendline,&erendline);
         gp2x_video_changemode(Settings.scaling == 3 ? 15 : 8);
         switch (Settings.scaling & 3) {
index b6b628c..c52eb68 100644 (file)
@@ -3,57 +3,18 @@
 #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;
 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;
@@ -108,5 +69,4 @@ INLINE void SpeedThrottle(void)
        usec_done = usec_done - usec_aim + 1; // reset to prevent overflows
        usec_aim = 0;
 }
-#endif
 
diff --git a/fds.c b/fds.c
index e5e4d5b..e5307ac 100644 (file)
--- a/fds.c
+++ b/fds.c
 #include <stdlib.h>\r
 #include <string.h>\r
 \r
+#ifdef GP2X\r
+#include <unistd.h> // for sync()\r
+#endif\r
+\r
 #include "types.h"\r
 #include "x6502.h"\r
 #include "fce.h"\r
@@ -911,10 +915,12 @@ void FDSClose(void)
 {\r
  FILE *fp;\r
  int x;\r
- char *fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
+ char *fn;\r
 \r
  if(!DiskWritten) return;\r
 \r
+ fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
+\r
  if(!(fp=FCEUD_UTF8fopen(fn,"wb")))\r
  {\r
   free(fn);\r
@@ -933,4 +939,8 @@ void FDSClose(void)
  }\r
  FreeFDSMemory();\r
  fclose(fp);\r
+#ifdef GP2X\r
+ sync();\r
+#endif\r
 }\r
+\r