X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=common%2Femu.c;h=3443c98fbc486cbc9b98c94131d1b4abc25675e9;hb=3d792006acf30d67362146f9f448f753064a6fcf;hp=167f2f09cc1945e2718f567e81a0d8b4f72dbeb8;hpb=4bd165c8d8bce1946558c22bcb9a001754115d81;p=libpicofe.git diff --git a/common/emu.c b/common/emu.c index 167f2f0..3443c98 100644 --- a/common/emu.c +++ b/common/emu.c @@ -1,4 +1,4 @@ -// (c) Copyright 2006-2007 notaz, All rights reserved. +// (c) Copyright 2006-2009 notaz, All rights reserved. // Free for non-commercial use. // For commercial use, separate licencing terms must be obtained. @@ -22,7 +22,6 @@ #include #include #include -#include #define STATUS_MSG_TIMEOUT 2000 @@ -516,13 +515,14 @@ int emu_reload_rom(char *rom_fname) emu_status_msg(Pico.m.pal ? "PAL SYSTEM / 50 FPS" : "NTSC SYSTEM / 60 FPS"); } + strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1); + rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0; + rom_loaded = 1; + // load SRAM for this ROM if (currentConfig.EmuOpt & EOPT_EN_SRAM) emu_save_load_game(1, 1); - strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1); - rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0; - rom_loaded = 1; return 1; fail2: @@ -766,18 +766,6 @@ void update_movie(void) } } - -static size_t gzRead2(void *p, size_t _size, size_t _n, void *file) -{ - return gzread(file, p, _n); -} - - -static size_t gzWrite2(void *p, size_t _size, size_t _n, void *file) -{ - return gzwrite(file, p, _n); -} - static int try_ropen_file(const char *fname) { FILE *f; @@ -797,43 +785,53 @@ char *emu_get_save_fname(int load, int is_sram, int slot) if (is_sram) { - romfname_ext(saveFname, (PicoAHW&1) ? "brm"PATH_SEP : "srm"PATH_SEP, (PicoAHW&1) ? ".brm" : ".srm"); - if (load) { - if (try_ropen_file(saveFname)) return saveFname; - // try in current dir.. - romfname_ext(saveFname, NULL, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm"); - if (try_ropen_file(saveFname)) return saveFname; - return NULL; // give up - } + strcpy(ext, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm"); + romfname_ext(saveFname, (PicoAHW & PAHW_MCD) ? "brm"PATH_SEP : "srm"PATH_SEP, ext); + if (!load) + return saveFname; + + if (try_ropen_file(saveFname)) + return saveFname; + + romfname_ext(saveFname, NULL, ext); + if (try_ropen_file(saveFname)) + return saveFname; } else { + const char *ext_main = (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds.gz" : ".mds"; + const char *ext_othr = (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds" : ".mds.gz"; ext[0] = 0; - if(slot > 0 && slot < 10) sprintf(ext, ".%i", slot); - strcat(ext, (currentConfig.EmuOpt & EOPT_GZIP_SAVES) ? ".mds.gz" : ".mds"); + if (slot > 0 && slot < 10) + sprintf(ext, ".%i", slot); + strcat(ext, ext_main); + + if (!load) { + romfname_ext(saveFname, "mds" PATH_SEP, ext); + return saveFname; + } + else { + romfname_ext(saveFname, "mds" PATH_SEP, ext); + if (try_ropen_file(saveFname)) + return saveFname; - romfname_ext(saveFname, "mds" PATH_SEP, ext); - if (load) { - if (try_ropen_file(saveFname)) return saveFname; romfname_ext(saveFname, NULL, ext); - if (try_ropen_file(saveFname)) return saveFname; - // no gzipped states, search for non-gzipped - if (currentConfig.EmuOpt & EOPT_GZIP_SAVES) - { - ext[0] = 0; - if(slot > 0 && slot < 10) sprintf(ext, ".%i", slot); - strcat(ext, ".mds"); - - romfname_ext(saveFname, "mds"PATH_SEP, ext); - if (try_ropen_file(saveFname)) return saveFname; - romfname_ext(saveFname, NULL, ext); - if (try_ropen_file(saveFname)) return saveFname; - } - return NULL; + if (try_ropen_file(saveFname)) + return saveFname; + + // try the other ext + ext[0] = 0; + if (slot > 0 && slot < 10) + sprintf(ext, ".%i", slot); + strcat(ext, ext_othr); + + romfname_ext(saveFname, "mds"PATH_SEP, ext); + if (try_ropen_file(saveFname)) + return saveFname; } } - return saveFname; + return NULL; } int emu_check_save_file(int slot) @@ -841,23 +839,6 @@ int emu_check_save_file(int slot) return emu_get_save_fname(1, 0, slot) ? 1 : 0; } -void emu_setSaveStateCbs(int gz) -{ - if (gz) { - areaRead = gzRead2; - areaWrite = gzWrite2; - areaEof = (areaeof *) gzeof; - areaSeek = (areaseek *) gzseek; - areaClose = (areaclose *) gzclose; - } else { - areaRead = (arearw *) fread; - areaWrite = (arearw *) fwrite; - areaEof = (areaeof *) feof; - areaSeek = (areaseek *) fseek; - areaClose = (areaclose *) fclose; - } -} - int emu_save_load_game(int load, int sram) { int ret = 0; @@ -928,34 +909,13 @@ int emu_save_load_game(int load, int sram) } else { - void *PmovFile = NULL; - if (strcmp(saveFname + strlen(saveFname) - 3, ".gz") == 0) - { - if( (PmovFile = gzopen(saveFname, load ? "rb" : "wb")) ) { - emu_setSaveStateCbs(1); - if (!load) gzsetparams(PmovFile, 9, Z_DEFAULT_STRATEGY); - } - } - else - { - if( (PmovFile = fopen(saveFname, load ? "rb" : "wb")) ) { - emu_setSaveStateCbs(0); - } - } - if(PmovFile) { - ret = PmovState(load ? 6 : 5, PmovFile); - areaClose(PmovFile); - PmovFile = 0; - if (load) Pico.m.dirtyPal=1; + ret = PicoState(saveFname, !load); + if (!ret) { #ifndef NO_SYNC - else sync(); + if (!load) sync(); #endif - } - else ret = -1; - if (!ret) emu_status_msg(load ? "STATE LOADED" : "STATE SAVED"); - else - { + } else { emu_status_msg(load ? "LOAD FAILED" : "SAVE FAILED"); ret = -1; } @@ -989,9 +949,14 @@ void emu_set_fastforward(int set_on) } } -static void emu_msg_tray_open(void) +static void emu_tray_open(void) +{ + engineState = PGS_TrayMenu; +} + +static void emu_tray_close(void) { - emu_status_msg("CD tray opened"); + emu_status_msg("CD tray closed."); } void emu_reset_game(void) @@ -1213,8 +1178,8 @@ void emu_init(void) PicoInit(); PicoMessage = plat_status_msg_busy_next; - PicoMCDopenTray = emu_msg_tray_open; - PicoMCDcloseTray = menu_loop_tray; + PicoMCDopenTray = emu_tray_open; + PicoMCDcloseTray = emu_tray_close; } void emu_finish(void) @@ -1382,7 +1347,7 @@ void emu_loop(void) if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) { timestamp = get_ticks(); diff = timestamp - timestamp_base; - if (diff < diff_lim) // we are too fast + if (!reset_timing && diff < diff_lim) // we are too fast plat_wait_till_us(timestamp_base + diff_lim); } }