read-ahead turn off, cfg file, minor adjustments
[picodrive.git] / Pico / Cart.c
index 25bb961..d6f6dd6 100644 (file)
@@ -20,6 +20,8 @@ void (*PicoCartUnloadHook)(void) = NULL;
 void (*PicoCartLoadProgressCB)(int percent) = NULL;\r
 void (*PicoCDLoadProgressCB)(int percent) = NULL; // handled in Pico/cd/cd_file.c\r
 \r
+static void PicoCartDetect(void);\r
+\r
 /* cso struct */\r
 typedef struct _cso_struct\r
 {\r
@@ -135,6 +137,9 @@ zip_failed:
     if (f == NULL)\r
       goto cso_failed;\r
 \r
+    /* we use our own buffering */\r
+    setvbuf(f, NULL, _IONBF, 0);\r
+\r
     cso = malloc(sizeof(*cso));\r
     if (cso == NULL)\r
       goto cso_failed;\r
@@ -201,6 +206,7 @@ cso_failed:
   file->size  = ftell(f);\r
   file->type  = PMT_UNCOMPRESSED;\r
   fseek(f, 0, SEEK_SET);\r
+\r
   return file;\r
 }\r
 \r
@@ -489,12 +495,17 @@ int PicoCartInsert(unsigned char *rom,unsigned int romsize)
   // notaz: add a 68k "jump one op back" opcode to the end of ROM.\r
   // This will hang the emu, but will prevent nasty crashes.\r
   // note: 4 bytes are padded to every ROM\r
-  if(rom != NULL)\r
+  if (rom != NULL)\r
     *(unsigned long *)(rom+romsize) = 0xFFFE4EFA; // 4EFA FFFE byteswapped\r
 \r
   Pico.rom=rom;\r
   Pico.romsize=romsize;\r
 \r
+  if (SRam.data) {\r
+    free(SRam.data);\r
+    SRam.data = NULL;\r
+  }\r
+\r
   if (PicoCartUnloadHook != NULL) {\r
     PicoCartUnloadHook();\r
     PicoCartUnloadHook = NULL;\r
@@ -550,10 +561,9 @@ static int name_cmp(const char *name)
  * various cart-specific things, which can't be handled by generic code\r
  * (maybe I should start using CRC for this stuff?)\r
  */\r
-void PicoCartDetect(void)\r
+static void PicoCartDetect(void)\r
 {\r
   int sram_size = 0, csum;\r
-  if(SRam.data) free(SRam.data); SRam.data=0;\r
   Pico.m.sram_reg = 0;\r
 \r
   csum = PicoRead32(0x18c) & 0xffff;\r
@@ -590,7 +600,7 @@ void PicoCartDetect(void)
   if (sram_size)\r
   {\r
     SRam.data = (unsigned char *) calloc(sram_size, 1);\r
-    if(!SRam.data) return;\r
+    if (SRam.data == NULL) return;\r
   }\r
   SRam.changed = 0;\r
 \r