- // make save filename\r
- romfname_ext(saveFname, "");\r
- if(sram) strcat(saveFname, (PicoMCD&1) ? ".brm" : ".srm");\r
- else {\r
- if(state_slot > 0 && state_slot < 10) sprintf(saveFname, "%s.%i", saveFname, state_slot);\r
- strcat(saveFname, ".mds");\r
- }\r
-\r
- printf("saveLoad (%i, %i): %s\n", load, sram, saveFname);\r
-\r
- if(sram) {\r
- FILE *sramFile;\r
- int sram_size;\r
- unsigned char *sram_data;\r
- if (PicoMCD&1) {\r
- sram_size = 0x2000;\r
- sram_data = Pico_mcd->bram;\r
- } else {\r
- sram_size = SRam.end-SRam.start+1;\r
- if(SRam.reg_back & 4) sram_size=0x2000;\r
- sram_data = SRam.data;\r
- }\r
- if(!sram_data) return 0; // SRam forcefully disabled for this game\r
-\r
- if(load) {\r
- sramFile = fopen(saveFname, "rb");\r
- if(!sramFile) return -1;\r
- fread(sram_data, 1, sram_size, sramFile);\r
- fclose(sramFile);\r
- } else {\r
- // sram save needs some special processing\r
- // see if we have anything to save\r
- for(; sram_size > 0; sram_size--)\r
- if(sram_data[sram_size-1]) break;\r
-\r
- if(sram_size) {\r
- sramFile = fopen(saveFname, "wb");\r
- ret = fwrite(sram_data, 1, sram_size, sramFile);\r
- ret = (ret != sram_size) ? -1 : 0;\r
- fclose(sramFile);\r
- sync();\r
- }\r
- }\r
- return ret;\r
- }\r
- else\r
- {\r
- void *PmovFile = NULL;\r
- // try gzip first\r
- if(currentConfig.EmuOpt & 8) {\r
- strcat(saveFname, ".gz");\r
- if( (PmovFile = gzopen(saveFname, load ? "rb" : "wb")) ) {\r
- areaRead = gzRead2;\r
- areaWrite = gzWrite2;\r
- areaEof = (areaeof *) gzeof;\r
- areaSeek = (areaseek *) gzseek;\r
- if(!load) gzsetparams(PmovFile, 9, Z_DEFAULT_STRATEGY);\r
- } else\r
- saveFname[strlen(saveFname)-3] = 0;\r
- }\r
- if(!PmovFile) { // gzip failed or was disabled\r
- if( (PmovFile = fopen(saveFname, load ? "rb" : "wb")) ) {\r
- areaRead = (arearw *) fread;\r
- areaWrite = (arearw *) fwrite;\r
- areaEof = (areaeof *) feof;\r
- areaSeek = (areaseek *) fseek;\r
- }\r
- }\r
- if(PmovFile) {\r
- ret = PmovState(load ? 6 : 5, PmovFile);\r
- if(areaRead == gzRead2)\r
- gzclose(PmovFile);\r
- else fclose ((FILE *) PmovFile);\r
- PmovFile = 0;\r
- if (!load) sync();\r
- else Pico.m.dirtyPal=1;\r
- }\r
- else ret = -1;\r
- if (!ret)\r
- strcpy(noticeMsg, load ? "GAME LOADED " : "GAME SAVED ");\r
- else\r
- {\r
- strcpy(noticeMsg, load ? "LOAD FAILED " : "SAVE FAILED ");\r
- ret = -1;\r
- }\r
-\r
- gettimeofday(¬iceMsgTime, 0);\r
- return ret;\r
- }\r