release 1.85
[picodrive.git] / platform / common / emu.c
index 8bc83af..1024b84 100644 (file)
@@ -348,6 +348,8 @@ static void do_region_override(const char *media_fname)
 \r
 int emu_reload_rom(const char *rom_fname_in)\r
 {\r
+       // use setting before rom config is loaded\r
+       int autoload = g_autostateld_opt;\r
        char *rom_fname = NULL;\r
        char ext[5];\r
        enum media_type_e media_type;\r
@@ -490,6 +492,30 @@ int emu_reload_rom(const char *rom_fname_in)
        if (currentConfig.EmuOpt & EOPT_EN_SRAM)\r
                emu_save_load_game(1, 1);\r
 \r
+       // state autoload?\r
+       if (autoload) {\r
+               int time, newest = 0, newest_slot = -1;\r
+               int slot;\r
+\r
+               for (slot = 0; slot < 10; slot++) {\r
+                       if (emu_check_save_file(slot, &time)) {\r
+                               if (time > newest) {\r
+                                       newest = time;\r
+                                       newest_slot = slot;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               if (newest_slot >= 0) {\r
+                       lprintf("autoload slot %d\n", newest_slot);\r
+                       state_slot = newest_slot;\r
+                       emu_save_load_game(1, 0);\r
+               }\r
+               else {\r
+                       lprintf("no save to autoload.\n");\r
+               }\r
+       }\r
+\r
        retval = 1;\r
 out:\r
        if (menu_romload_started)\r
@@ -548,7 +574,7 @@ void emu_prep_defconfig(void)
        defaultConfig.EmuOpt    = 0x9d | EOPT_EN_CD_LEDS;\r
        defaultConfig.s_PicoOpt = POPT_EN_STEREO|POPT_EN_FM|POPT_EN_PSG|POPT_EN_Z80 |\r
                                  POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_MCD_GFX |\r
-                                 POPT_EN_SVP_DRC|POPT_ACC_SPRITES |\r
+                                 POPT_EN_DRC|POPT_ACC_SPRITES |\r
                                  POPT_EN_32X|POPT_EN_PWM;\r
        defaultConfig.s_PsndRate = 44100;\r
        defaultConfig.s_PicoRegion = 0; // auto\r
@@ -736,19 +762,25 @@ void update_movie(void)
        }\r
 }\r
 \r
-static int try_ropen_file(const char *fname)\r
+static int try_ropen_file(const char *fname, int *time)\r
 {\r
+       struct stat st;\r
        FILE *f;\r
 \r
        f = fopen(fname, "rb");\r
        if (f) {\r
+               if (time != NULL) {\r
+                       *time = 0;\r
+                       if (fstat(fileno(f), &st) == 0)\r
+                               *time = (int)st.st_mtime;\r
+               }\r
                fclose(f);\r
                return 1;\r
        }\r
        return 0;\r
 }\r
 \r
-char *emu_get_save_fname(int load, int is_sram, int slot)\r
+char *emu_get_save_fname(int load, int is_sram, int slot, int *time)\r
 {\r
        char *saveFname = static_buff;\r
        char ext[16];\r
@@ -761,11 +793,11 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
                if (!load)\r
                        return saveFname;\r
 \r
-               if (try_ropen_file(saveFname))\r
+               if (try_ropen_file(saveFname, time))\r
                        return saveFname;\r
 \r
                romfname_ext(saveFname, sizeof(static_buff), NULL, ext);\r
-               if (try_ropen_file(saveFname))\r
+               if (try_ropen_file(saveFname, time))\r
                        return saveFname;\r
        }\r
        else\r
@@ -783,11 +815,11 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
                }\r
                else {\r
                        romfname_ext(saveFname, sizeof(static_buff), "mds" PATH_SEP, ext);\r
-                       if (try_ropen_file(saveFname))\r
+                       if (try_ropen_file(saveFname, time))\r
                                return saveFname;\r
 \r
                        romfname_ext(saveFname, sizeof(static_buff), NULL, ext);\r
-                       if (try_ropen_file(saveFname))\r
+                       if (try_ropen_file(saveFname, time))\r
                                return saveFname;\r
 \r
                        // try the other ext\r
@@ -797,7 +829,7 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
                        strcat(ext, ext_othr);\r
 \r
                        romfname_ext(saveFname, sizeof(static_buff), "mds"PATH_SEP, ext);\r
-                       if (try_ropen_file(saveFname))\r
+                       if (try_ropen_file(saveFname, time))\r
                                return saveFname;\r
                }\r
        }\r
@@ -807,7 +839,7 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
 \r
 int emu_check_save_file(int slot, int *time)\r
 {\r
-       return emu_get_save_fname(1, 0, slot) ? 1 : 0;\r
+       return emu_get_save_fname(1, 0, slot, time) ? 1 : 0;\r
 }\r
 \r
 int emu_save_load_game(int load, int sram)\r
@@ -816,7 +848,7 @@ int emu_save_load_game(int load, int sram)
        char *saveFname;\r
 \r
        // make save filename\r
-       saveFname = emu_get_save_fname(load, sram, state_slot);\r
+       saveFname = emu_get_save_fname(load, sram, state_slot, NULL);\r
        if (saveFname == NULL) {\r
                if (!sram)\r
                        emu_status_msg(load ? "LOAD FAILED (missing file)" : "SAVE FAILED");\r
@@ -1276,7 +1308,6 @@ static void emu_loop_prep(void)
                filter_old = currentConfig.filter;\r
        }\r
 \r
-printf("-- gamma %d\n", currentConfig.gamma);\r
        plat_target_gamma_set(currentConfig.gamma, 0);\r
 \r
        pemu_loop_prep();\r