-// (c) Copyright 2006-2007 notaz, All rights reserved.\r
+// (c) Copyright 2006-2009 notaz, All rights reserved.\r
// Free for non-commercial use.\r
\r
// For commercial use, separate licencing terms must be obtained.\r
#include <pico/pico_int.h>\r
#include <pico/patch.h>\r
#include <pico/cd/cue.h>\r
-#include <zlib/zlib.h>\r
\r
\r
#define STATUS_MSG_TIMEOUT 2000\r
emu_status_msg(Pico.m.pal ? "PAL SYSTEM / 50 FPS" : "NTSC SYSTEM / 60 FPS");\r
}\r
\r
+ strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1);\r
+ rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;\r
+ rom_loaded = 1;\r
+\r
// load SRAM for this ROM\r
if (currentConfig.EmuOpt & EOPT_EN_SRAM)\r
emu_save_load_game(1, 1);\r
\r
- strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1);\r
- rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;\r
- rom_loaded = 1;\r
return 1;\r
\r
fail2:\r
}\r
}\r
\r
-\r
-static size_t gzRead2(void *p, size_t _size, size_t _n, void *file)\r
-{\r
- return gzread(file, p, _n);\r
-}\r
-\r
-\r
-static size_t gzWrite2(void *p, size_t _size, size_t _n, void *file)\r
-{\r
- return gzwrite(file, p, _n);\r
-}\r
-\r
static int try_ropen_file(const char *fname)\r
{\r
FILE *f;\r
\r
if (is_sram)\r
{\r
- romfname_ext(saveFname, (PicoAHW&1) ? "brm"PATH_SEP : "srm"PATH_SEP, (PicoAHW&1) ? ".brm" : ".srm");\r
- if (load) {\r
- if (try_ropen_file(saveFname)) return saveFname;\r
- // try in current dir..\r
- romfname_ext(saveFname, NULL, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm");\r
- if (try_ropen_file(saveFname)) return saveFname;\r
- return NULL; // give up\r
- }\r
+ strcpy(ext, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm");\r
+ romfname_ext(saveFname, (PicoAHW & PAHW_MCD) ? "brm"PATH_SEP : "srm"PATH_SEP, ext);\r
+ if (!load)\r
+ return saveFname;\r
+\r
+ if (try_ropen_file(saveFname))\r
+ return saveFname;\r
+\r
+ romfname_ext(saveFname, NULL, ext);\r
+ if (try_ropen_file(saveFname))\r
+ return saveFname;\r
}\r
else\r
{\r
+ const char *ext_main = (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds.gz" : ".mds";\r
+ const char *ext_othr = (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds" : ".mds.gz";\r
ext[0] = 0;\r
- if(slot > 0 && slot < 10) sprintf(ext, ".%i", slot);\r
- strcat(ext, (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds.gz" : ".mds");\r
+ if (slot > 0 && slot < 10)\r
+ sprintf(ext, ".%i", slot);\r
+ strcat(ext, ext_main);\r
+\r
+ if (!load) {\r
+ romfname_ext(saveFname, "mds" PATH_SEP, ext);\r
+ return saveFname;\r
+ }\r
+ else {\r
+ romfname_ext(saveFname, "mds" PATH_SEP, ext);\r
+ if (try_ropen_file(saveFname))\r
+ return saveFname;\r
\r
- romfname_ext(saveFname, "mds" PATH_SEP, ext);\r
- if (load) {\r
- if (try_ropen_file(saveFname)) return saveFname;\r
romfname_ext(saveFname, NULL, ext);\r
- if (try_ropen_file(saveFname)) return saveFname;\r
- // no gzipped states, search for non-gzipped\r
- if (currentConfig.EmuOpt & EOPT_GZIP_SAVES)\r
- {\r
- ext[0] = 0;\r
- if(slot > 0 && slot < 10) sprintf(ext, ".%i", slot);\r
- strcat(ext, ".mds");\r
-\r
- romfname_ext(saveFname, "mds"PATH_SEP, ext);\r
- if (try_ropen_file(saveFname)) return saveFname;\r
- romfname_ext(saveFname, NULL, ext);\r
- if (try_ropen_file(saveFname)) return saveFname;\r
- }\r
- return NULL;\r
+ if (try_ropen_file(saveFname))\r
+ return saveFname;\r
+\r
+ // try the other ext\r
+ ext[0] = 0;\r
+ if (slot > 0 && slot < 10)\r
+ sprintf(ext, ".%i", slot);\r
+ strcat(ext, ext_othr);\r
+\r
+ romfname_ext(saveFname, "mds"PATH_SEP, ext);\r
+ if (try_ropen_file(saveFname))\r
+ return saveFname;\r
}\r
}\r
\r
- return saveFname;\r
+ return NULL;\r
}\r
\r
int emu_check_save_file(int slot)\r
return emu_get_save_fname(1, 0, slot) ? 1 : 0;\r
}\r
\r
-void emu_setSaveStateCbs(int gz)\r
-{\r
- if (gz) {\r
- areaRead = gzRead2;\r
- areaWrite = gzWrite2;\r
- areaEof = (areaeof *) gzeof;\r
- areaSeek = (areaseek *) gzseek;\r
- areaClose = (areaclose *) gzclose;\r
- } else {\r
- areaRead = (arearw *) fread;\r
- areaWrite = (arearw *) fwrite;\r
- areaEof = (areaeof *) feof;\r
- areaSeek = (areaseek *) fseek;\r
- areaClose = (areaclose *) fclose;\r
- }\r
-}\r
-\r
int emu_save_load_game(int load, int sram)\r
{\r
int ret = 0;\r
}\r
else\r
{\r
- void *PmovFile = NULL;\r
- if (strcmp(saveFname + strlen(saveFname) - 3, ".gz") == 0)\r
- {\r
- if( (PmovFile = gzopen(saveFname, load ? "rb" : "wb")) ) {\r
- emu_setSaveStateCbs(1);\r
- if (!load) gzsetparams(PmovFile, 9, Z_DEFAULT_STRATEGY);\r
- }\r
- }\r
- else\r
- {\r
- if( (PmovFile = fopen(saveFname, load ? "rb" : "wb")) ) {\r
- emu_setSaveStateCbs(0);\r
- }\r
- }\r
- if(PmovFile) {\r
- ret = PmovState(load ? 6 : 5, PmovFile);\r
- areaClose(PmovFile);\r
- PmovFile = 0;\r
- if (load) Pico.m.dirtyPal=1;\r
+ ret = PicoState(saveFname, !load);\r
+ if (!ret) {\r
#ifndef NO_SYNC\r
- else sync();\r
+ if (!load) sync();\r
#endif\r
- }\r
- else ret = -1;\r
- if (!ret)\r
emu_status_msg(load ? "STATE LOADED" : "STATE SAVED");\r
- else\r
- {\r
+ } else {\r
emu_status_msg(load ? "LOAD FAILED" : "SAVE FAILED");\r
ret = -1;\r
}\r
}\r
}\r
\r
-static void emu_msg_tray_open(void)\r
+static void emu_tray_open(void)\r
+{\r
+ engineState = PGS_TrayMenu;\r
+}\r
+\r
+static void emu_tray_close(void)\r
{\r
- emu_status_msg("CD tray opened");\r
+ emu_status_msg("CD tray closed.");\r
}\r
\r
void emu_reset_game(void)\r
\r
PicoInit();\r
PicoMessage = plat_status_msg_busy_next;\r
- PicoMCDopenTray = emu_msg_tray_open;\r
- PicoMCDcloseTray = menu_loop_tray;\r
+ PicoMCDopenTray = emu_tray_open;\r
+ PicoMCDcloseTray = emu_tray_close;\r
}\r
\r
void emu_finish(void)\r
if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) {\r
timestamp = get_ticks();\r
diff = timestamp - timestamp_base;\r
- if (diff < diff_lim) // we are too fast\r
+ if (!reset_timing && diff < diff_lim) // we are too fast\r
plat_wait_till_us(timestamp_base + diff_lim);\r
}\r
}\r