# HG changeset patch # User Michael Pavone # Date 1460777966 25200 # Node ID f5550cdffe4925bb1fedd77ee2a25c9ae47520fa # Parent 229c23b3ab7366fdc793e918293e4ee4753cede3 Saving the save directory in the rom_info struct didn't make sense. It should be in the console context. diff -r 229c23b3ab73 -r f5550cdffe49 blastem.c --- a/blastem.c Fri Apr 15 18:29:39 2016 -0700 +++ b/blastem.c Fri Apr 15 20:39:26 2016 -0700 @@ -876,15 +876,6 @@ gen->save_storage = rom->save_buffer; gen->eeprom_map = rom->eeprom_map; gen->num_eeprom = rom->num_eeprom; - FILE * f = fopen(save_filename, "rb"); - if (f) { - uint32_t read = fread(gen->save_storage, 1, rom->save_size, f); - fclose(f); - if (read > 0) { - printf("Loaded %s from %s\n", rom->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename); - } - } - atexit(persist_save); if (gen->save_type == SAVE_I2C) { eeprom_init(&gen->eeprom, gen->save_storage, gen->save_size); } @@ -919,6 +910,7 @@ ym_free(gen->ym); psg_free(gen->psg); free(gen->save_storage); + free(gen->save_dir); } void start_genesis(genesis_context *gen, char *statefile, uint8_t *debugger) @@ -975,7 +967,7 @@ } } -void setup_saves(char *fname, rom_info *info) +void setup_saves(char *fname, rom_info *info, genesis_context *context) { char * barename = basename_no_extension(fname); char const * parts[3] = {get_save_dir(), "/", barename}; @@ -990,8 +982,19 @@ parts[2] = "quicksave.gst"; free(save_state_path); save_state_path = alloc_concat_m(3, parts); - info->save_dir = save_dir; + context->save_dir = save_dir; free(barename); + if (info->save_type != SAVE_NONE) { + FILE * f = fopen(save_filename, "rb"); + if (f) { + uint32_t read = fread(context->save_storage, 1, info->save_size, f); + fclose(f); + if (read > 0) { + printf("Loaded %s from %s\n", info->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename); + } + } + atexit(persist_save); + } } int main(int argc, char ** argv) @@ -1170,9 +1173,9 @@ if (!headless) { render_init(width, height, title, fps, fullscreen); } - setup_saves(romfname, &info); genesis = alloc_init_genesis(&info, fps, (ym_log && !menu) ? YM_OPT_WAVE_LOG : 0); + setup_saves(romfname, &info, genesis); if (menu) { menu_context = genesis; } else { @@ -1195,7 +1198,6 @@ genesis = menu_context; } free(game_context->cart); - free(info.save_dir); base_map[0].buffer = ram = game_context->work_ram; } else { base_map[0].buffer = ram = malloc(RAM_WORDS * sizeof(uint16_t)); @@ -1208,7 +1210,6 @@ byteswap_rom(rom_size); set_region(&info, force_version); update_title(info.name); - setup_saves(menu_context->next_rom, &info); if (!game_context) { //start a new arena and save old one in suspended genesis context genesis->arena = start_new_arena(); @@ -1219,6 +1220,7 @@ } //allocate new genesis context game_context = alloc_init_genesis(&info, fps, ym_log ? YM_OPT_WAVE_LOG : 0); + setup_saves(menu_context->next_rom, &info, game_context); free(menu_context->next_rom); menu_context->next_rom = NULL; menu = 0; diff -r 229c23b3ab73 -r f5550cdffe49 blastem.h --- a/blastem.h Fri Apr 15 18:29:39 2016 -0700 +++ b/blastem.h Fri Apr 15 20:39:26 2016 -0700 @@ -29,6 +29,7 @@ void *extra; arena *arena; char *next_rom; + char *save_dir; uint8_t *save_storage; eeprom_map *eeprom_map; uint32_t num_eeprom; diff -r 229c23b3ab73 -r f5550cdffe49 romdb.h --- a/romdb.h Fri Apr 15 18:29:39 2016 -0700 +++ b/romdb.h Fri Apr 15 20:39:26 2016 -0700 @@ -37,7 +37,6 @@ typedef struct { char *name; - char *save_dir; memmap_chunk *map; uint8_t *save_buffer; eeprom_map *eeprom_map;