Mercurial > repos > blastem
diff genesis.c @ 2083:372625dd9590
Persist BRAM to file. Load BIOS relative to blastem directory
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 03 Feb 2022 23:41:53 -0800 |
parents | bafb757e1cd2 |
children | c716af3f8980 |
line wrap: on
line diff
--- a/genesis.c Thu Feb 03 23:41:40 2022 -0800 +++ b/genesis.c Thu Feb 03 23:41:53 2022 -0800 @@ -21,6 +21,7 @@ #include "jcart.h" #include "config.h" #include "event_log.h" +#include "paths.h" #define MCLKS_NTSC 53693175 #define MCLKS_PAL 53203395 @@ -1473,10 +1474,22 @@ static void persist_save(system_header *system) { genesis_context *gen = (genesis_context *)system; + FILE *f; + if (gen->expansion) { + segacd_context *cd = gen->expansion; + char *bram_name = path_append(system->save_dir, "internal.bram"); + f = fopen(bram_name, "wb"); + if (f) { + fwrite(cd->bram, 1, 8 * 1024, f); + fclose(f); + printf("Saved internal BRAM to %s\n", bram_name); + } + free(bram_name); + } if (gen->save_type == SAVE_NONE) { return; } - FILE * f = fopen(save_filename, "wb"); + f = fopen(save_filename, "wb"); if (!f) { fprintf(stderr, "Failed to open %s file %s for writing\n", save_type_name(gen->save_type), save_filename); return; @@ -1506,6 +1519,19 @@ printf("Loaded %s from %s\n", save_type_name(gen->save_type), save_filename); } } + if (gen->expansion) { + segacd_context *cd = gen->expansion; + char *bram_name = path_append(system->save_dir, "internal.bram"); + f = fopen(bram_name, "rb"); + if (f) { + uint32_t read = fread(cd->bram, 1, 8 * 1024, f); + fclose(f); + if (read > 0) { + printf("Loaded internal BRAM from %s\n", bram_name); + } + } + free(bram_name); + } } static void soft_reset(system_header *system) @@ -2204,5 +2230,6 @@ gen->m68k->mem_pointers[map[i].ptr_index] = map[i].buffer; } } + gen->header.type = SYSTEM_SEGACD; return gen; }