From 8d535fcc5416beee1effff7f5fe3fb2af3346215 Mon Sep 17 00:00:00 2001 From: EkeEke Date: Tue, 23 Oct 2012 01:51:05 +0200 Subject: [PATCH] fixed backup RAM file saving when using disc swap with Mode 1 cartridge --- source/gx/fileio/file_load.c | 97 ++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 42 deletions(-) diff --git a/source/gx/fileio/file_load.c b/source/gx/fileio/file_load.c index d836c21..7db201a 100644 --- a/source/gx/fileio/file_load.c +++ b/source/gx/fileio/file_load.c @@ -246,7 +246,7 @@ int ParseDirectory(void) ****************************************************************************/ int LoadFile(int selection) { - int size = 0, filetype; + int size = 0, reload, filetype; char filename[MAXPATHLEN]; /* file path */ @@ -270,20 +270,29 @@ int LoadFile(int selection) /* open message box */ GUI_MsgBoxOpen("Information", "Loading game...", 1); + /* by default, update loaded game informations */ + reload = 1; + /* check if virtual CD tray was open */ if ((system_hw == SYSTEM_MCD) && (cdd.status == CD_OPEN)) { - /* swap CD image file */ + /* swap CD image file without changing region, system,... */ size = cdd_load(filename, (char *)(cdc.ram)); - /* update CD header informations */ - if (!scd.cartridge.boot) + /* Mode 1 cartridge loaded ? */ + if (scd.cartridge.boot) { + /* loaded ROM file infos should not be modified */ + reload = 0; + } + else + { + /* update CD header informations */ getrominfo((char *)(cdc.ram)); } } - /* no CD image file loaded */ + /* no CD image file swapped */ if (!size) { /* close CD tray to force system reset */ @@ -295,45 +304,49 @@ int LoadFile(int selection) if (size > 0) { - /* auto-save previous game state */ - slot_autosave(config.s_default,config.s_device); + /* check if loaded game has changed */ + if (reload) + { + /* auto-save previous game state */ + slot_autosave(config.s_default,config.s_device); - /* update pathname for screenshot, save & cheat files */ - if (romtype & SYSTEM_SMS) - { - /* Master System ROM file */ - filetype = 2; - sprintf(rom_filename,"ms/%s",filelist[selection].filename); - } - else if (romtype & SYSTEM_GG) - { - /* Game Gear ROM file */ - filetype = 3; - sprintf(rom_filename,"gg/%s",filelist[selection].filename); - } - else if (romtype == SYSTEM_SG) - { - /* SG-1000 ROM file */ - filetype = 4; - sprintf(rom_filename,"sg/%s",filelist[selection].filename); - } - else if (romtype == SYSTEM_MCD) - { - /* CD image file */ - filetype = 1; - sprintf(rom_filename,"cd/%s",filelist[selection].filename); - } - else - { - /* by default, Genesis ROM file */ - filetype = 0; - sprintf(rom_filename,"md/%s",filelist[selection].filename); - } + /* update pathname for screenshot, save & cheat files */ + if (romtype & SYSTEM_SMS) + { + /* Master System ROM file */ + filetype = 2; + sprintf(rom_filename,"ms/%s",filelist[selection].filename); + } + else if (romtype & SYSTEM_GG) + { + /* Game Gear ROM file */ + filetype = 3; + sprintf(rom_filename,"gg/%s",filelist[selection].filename); + } + else if (romtype == SYSTEM_SG) + { + /* SG-1000 ROM file */ + filetype = 4; + sprintf(rom_filename,"sg/%s",filelist[selection].filename); + } + else if (romtype == SYSTEM_MCD) + { + /* CD image file */ + filetype = 1; + sprintf(rom_filename,"cd/%s",filelist[selection].filename); + } + else + { + /* by default, Genesis ROM file */ + filetype = 0; + sprintf(rom_filename,"md/%s",filelist[selection].filename); + } - /* remove file extension */ - int i = strlen(rom_filename) - 1; - while ((i > 0) && (rom_filename[i] != '.')) i--; - if (i > 0) rom_filename[i] = 0; + /* remove file extension */ + int i = strlen(rom_filename) - 1; + while ((i > 0) && (rom_filename[i] != '.')) i--; + if (i > 0) rom_filename[i] = 0; + } /* add/move the file to the top of the history. */ history_add_file(filepath, filelist[selection].filename, filetype);