comparison blastem.c @ 956:f5550cdffe49

Saving the save directory in the rom_info struct didn't make sense. It should be in the console context.
author Michael Pavone <pavone@retrodev.com>
date Fri, 15 Apr 2016 20:39:26 -0700
parents 229c23b3ab73
children 1618d3676a35
comparison
equal deleted inserted replaced
955:229c23b3ab73 956:f5550cdffe49
874 gen->save_ram_mask = rom->save_mask; 874 gen->save_ram_mask = rom->save_mask;
875 gen->save_size = rom->save_size; 875 gen->save_size = rom->save_size;
876 gen->save_storage = rom->save_buffer; 876 gen->save_storage = rom->save_buffer;
877 gen->eeprom_map = rom->eeprom_map; 877 gen->eeprom_map = rom->eeprom_map;
878 gen->num_eeprom = rom->num_eeprom; 878 gen->num_eeprom = rom->num_eeprom;
879 FILE * f = fopen(save_filename, "rb");
880 if (f) {
881 uint32_t read = fread(gen->save_storage, 1, rom->save_size, f);
882 fclose(f);
883 if (read > 0) {
884 printf("Loaded %s from %s\n", rom->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename);
885 }
886 }
887 atexit(persist_save);
888 if (gen->save_type == SAVE_I2C) { 879 if (gen->save_type == SAVE_I2C) {
889 eeprom_init(&gen->eeprom, gen->save_storage, gen->save_size); 880 eeprom_init(&gen->eeprom, gen->save_storage, gen->save_size);
890 } 881 }
891 } else { 882 } else {
892 gen->save_storage = NULL; 883 gen->save_storage = NULL;
917 z80_options_free(gen->z80->options); 908 z80_options_free(gen->z80->options);
918 free(gen->z80); 909 free(gen->z80);
919 ym_free(gen->ym); 910 ym_free(gen->ym);
920 psg_free(gen->psg); 911 psg_free(gen->psg);
921 free(gen->save_storage); 912 free(gen->save_storage);
913 free(gen->save_dir);
922 } 914 }
923 915
924 void start_genesis(genesis_context *gen, char *statefile, uint8_t *debugger) 916 void start_genesis(genesis_context *gen, char *statefile, uint8_t *debugger)
925 { 917 {
926 918
973 } else { 965 } else {
974 version_reg = NO_DISK | USA; 966 version_reg = NO_DISK | USA;
975 } 967 }
976 } 968 }
977 969
978 void setup_saves(char *fname, rom_info *info) 970 void setup_saves(char *fname, rom_info *info, genesis_context *context)
979 { 971 {
980 char * barename = basename_no_extension(fname); 972 char * barename = basename_no_extension(fname);
981 char const * parts[3] = {get_save_dir(), "/", barename}; 973 char const * parts[3] = {get_save_dir(), "/", barename};
982 char *save_dir = alloc_concat_m(3, parts); 974 char *save_dir = alloc_concat_m(3, parts);
983 if (!ensure_dir_exists(save_dir)) { 975 if (!ensure_dir_exists(save_dir)) {
988 free(save_filename); 980 free(save_filename);
989 save_filename = alloc_concat_m(3, parts); 981 save_filename = alloc_concat_m(3, parts);
990 parts[2] = "quicksave.gst"; 982 parts[2] = "quicksave.gst";
991 free(save_state_path); 983 free(save_state_path);
992 save_state_path = alloc_concat_m(3, parts); 984 save_state_path = alloc_concat_m(3, parts);
993 info->save_dir = save_dir; 985 context->save_dir = save_dir;
994 free(barename); 986 free(barename);
987 if (info->save_type != SAVE_NONE) {
988 FILE * f = fopen(save_filename, "rb");
989 if (f) {
990 uint32_t read = fread(context->save_storage, 1, info->save_size, f);
991 fclose(f);
992 if (read > 0) {
993 printf("Loaded %s from %s\n", info->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename);
994 }
995 }
996 atexit(persist_save);
997 }
995 } 998 }
996 999
997 int main(int argc, char ** argv) 1000 int main(int argc, char ** argv)
998 { 1001 {
999 set_exe_str(argv[0]); 1002 set_exe_str(argv[0]);
1168 fps = 50; 1171 fps = 50;
1169 } 1172 }
1170 if (!headless) { 1173 if (!headless) {
1171 render_init(width, height, title, fps, fullscreen); 1174 render_init(width, height, title, fps, fullscreen);
1172 } 1175 }
1173 setup_saves(romfname, &info);
1174 1176
1175 genesis = alloc_init_genesis(&info, fps, (ym_log && !menu) ? YM_OPT_WAVE_LOG : 0); 1177 genesis = alloc_init_genesis(&info, fps, (ym_log && !menu) ? YM_OPT_WAVE_LOG : 0);
1178 setup_saves(romfname, &info, genesis);
1176 if (menu) { 1179 if (menu) {
1177 menu_context = genesis; 1180 menu_context = genesis;
1178 } else { 1181 } else {
1179 genesis->m68k->options->address_log = address_log; 1182 genesis->m68k->options->address_log = address_log;
1180 game_context = genesis; 1183 game_context = genesis;
1193 genesis = game_context; 1196 genesis = game_context;
1194 persist_save(); 1197 persist_save();
1195 genesis = menu_context; 1198 genesis = menu_context;
1196 } 1199 }
1197 free(game_context->cart); 1200 free(game_context->cart);
1198 free(info.save_dir);
1199 base_map[0].buffer = ram = game_context->work_ram; 1201 base_map[0].buffer = ram = game_context->work_ram;
1200 } else { 1202 } else {
1201 base_map[0].buffer = ram = malloc(RAM_WORDS * sizeof(uint16_t)); 1203 base_map[0].buffer = ram = malloc(RAM_WORDS * sizeof(uint16_t));
1202 } 1204 }
1203 memset(ram, 0, RAM_WORDS * sizeof(uint16_t)); 1205 memset(ram, 0, RAM_WORDS * sizeof(uint16_t));
1206 } 1208 }
1207 info = configure_rom(rom_db, cart, rom_size, base_map, sizeof(base_map)/sizeof(base_map[0])); 1209 info = configure_rom(rom_db, cart, rom_size, base_map, sizeof(base_map)/sizeof(base_map[0]));
1208 byteswap_rom(rom_size); 1210 byteswap_rom(rom_size);
1209 set_region(&info, force_version); 1211 set_region(&info, force_version);
1210 update_title(info.name); 1212 update_title(info.name);
1211 setup_saves(menu_context->next_rom, &info);
1212 if (!game_context) { 1213 if (!game_context) {
1213 //start a new arena and save old one in suspended genesis context 1214 //start a new arena and save old one in suspended genesis context
1214 genesis->arena = start_new_arena(); 1215 genesis->arena = start_new_arena();
1215 } else { 1216 } else {
1216 genesis->arena = set_current_arena(game_context->arena); 1217 genesis->arena = set_current_arena(game_context->arena);
1217 mark_all_free(); 1218 mark_all_free();
1218 free_genesis(game_context); 1219 free_genesis(game_context);
1219 } 1220 }
1220 //allocate new genesis context 1221 //allocate new genesis context
1221 game_context = alloc_init_genesis(&info, fps, ym_log ? YM_OPT_WAVE_LOG : 0); 1222 game_context = alloc_init_genesis(&info, fps, ym_log ? YM_OPT_WAVE_LOG : 0);
1223 setup_saves(menu_context->next_rom, &info, game_context);
1222 free(menu_context->next_rom); 1224 free(menu_context->next_rom);
1223 menu_context->next_rom = NULL; 1225 menu_context->next_rom = NULL;
1224 menu = 0; 1226 menu = 0;
1225 genesis = game_context; 1227 genesis = game_context;
1226 genesis->m68k->options->address_log = address_log; 1228 genesis->m68k->options->address_log = address_log;