Mercurial > repos > blastem
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; |