bugfixes, r171 release
[fceu.git] / fds.c
diff --git a/fds.c b/fds.c
index 41b3a5d..501aefc 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
@@ -85,12 +89,13 @@ static uint8 SelectDisk,InDisk;
 \r
 #define DC_INC    1\r
 \r
-void FDSGI(int h)\r
+void FDSGI(int h, void *param)\r
 {\r
  switch(h)\r
  {\r
   case GI_CLOSE: FDSClose();break;\r
   case GI_POWER: FDSInit();break;\r
+  case GI_INFOSTRING: sprintf(param, "FDS, Sides: %d", TotalSides);break;\r
  }\r
 }\r
 \r
@@ -150,9 +155,9 @@ static void FDSInit(void)
   int page;\r
   // asm code needs pages to be set again..\r
   for (page=12; page<28; page++) // 0x6000-0xdfff 32K RAM\r
-   Page[page]=FDSRAM  - (page<<11) + ((page-12)<<11);\r
+   Page[page]=FDSRAM  - (12<<11);\r
   for (; page<32; page++)        // 0xe000-0xffff 8K BIOS\r
-   Page[page]=FDSBIOS - (page<<11) + ((page-28)<<11);\r
+   Page[page]=FDSBIOS - (28<<11);\r
  }\r
 #endif\r
 }\r
@@ -819,6 +824,7 @@ int FDSLoad(const char *name, int fp)
   FCEU_PrintError("FDS BIOS ROM image missing!");\r
   FreeFDSMemory();\r
   free(fn);\r
+  LoadGameLastError = 10;\r
   return 0;\r
  }\r
 \r
@@ -829,6 +835,7 @@ int FDSLoad(const char *name, int fp)
   fclose(zp);\r
   FreeFDSMemory();\r
   FCEU_PrintError("Error reading FDS BIOS ROM image.");\r
+  LoadGameLastError = 10;\r
   return 0;\r
  }\r
 \r
@@ -853,6 +860,7 @@ int FDSLoad(const char *name, int fp)
    {\r
     FCEU_PrintError("Error reading auxillary FDS file.");\r
     free(fn);\r
+    LoadGameLastError = 11;\r
     return(0);\r
    }\r
    FCEU_fclose(tp);\r
@@ -907,26 +915,41 @@ void FDSClose(void)
 {\r
  FILE *fp;\r
  int x;\r
- char *fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
-\r
- if(!DiskWritten) return;\r
+ char *fn;\r
 \r
- if(!(fp=FCEUD_UTF8fopen(fn,"wb")))\r
+ if(!DiskWritten)\r
  {\r
-  free(fn);\r
-  return;\r
- }\r
- free(fn);\r
+  fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
 \r
- for(x=0;x<TotalSides;x++)\r
- {\r
-  if(fwrite(diskdata[x],1,65500,fp)!=65500)\r
+  if(!(fp=FCEUD_UTF8fopen(fn,"wb")))\r
   {\r
-   FCEU_PrintError("Error saving FDS image!");\r
-   fclose(fp);\r
+   free(fn);\r
    return;\r
   }\r
+  free(fn);\r
+\r
+  for(x=0;x<TotalSides;x++)\r
+  {\r
+   if(fwrite(diskdata[x],1,65500,fp)!=65500)\r
+   {\r
+    FCEU_PrintError("Error saving FDS image!");\r
+    fclose(fp);\r
+    return;\r
+   }\r
+  }\r
+  fclose(fp);\r
+#ifdef GP2X\r
+  sync();\r
+#endif\r
  }\r
+\r
  FreeFDSMemory();\r
- fclose(fp);\r
+ for(x=0;x<TotalSides;x++)\r
+  if(diskdatao[x])\r
+  {\r
+   free(diskdatao[x]);\r
+   diskdatao[x]=0;\r
+  }\r
+ ResetExState(0,0);\r
 }\r
+\r