comparison 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
comparison
equal deleted inserted replaced
2082:485834c0fea7 2083:372625dd9590
19 #include "saves.h" 19 #include "saves.h"
20 #include "bindings.h" 20 #include "bindings.h"
21 #include "jcart.h" 21 #include "jcart.h"
22 #include "config.h" 22 #include "config.h"
23 #include "event_log.h" 23 #include "event_log.h"
24 #include "paths.h"
24 #define MCLKS_NTSC 53693175 25 #define MCLKS_NTSC 53693175
25 #define MCLKS_PAL 53203395 26 #define MCLKS_PAL 53203395
26 27
27 uint32_t MCLKS_PER_68K; 28 uint32_t MCLKS_PER_68K;
28 #define MCLKS_PER_YM 7 29 #define MCLKS_PER_YM 7
1471 } 1472 }
1472 1473
1473 static void persist_save(system_header *system) 1474 static void persist_save(system_header *system)
1474 { 1475 {
1475 genesis_context *gen = (genesis_context *)system; 1476 genesis_context *gen = (genesis_context *)system;
1477 FILE *f;
1478 if (gen->expansion) {
1479 segacd_context *cd = gen->expansion;
1480 char *bram_name = path_append(system->save_dir, "internal.bram");
1481 f = fopen(bram_name, "wb");
1482 if (f) {
1483 fwrite(cd->bram, 1, 8 * 1024, f);
1484 fclose(f);
1485 printf("Saved internal BRAM to %s\n", bram_name);
1486 }
1487 free(bram_name);
1488 }
1476 if (gen->save_type == SAVE_NONE) { 1489 if (gen->save_type == SAVE_NONE) {
1477 return; 1490 return;
1478 } 1491 }
1479 FILE * f = fopen(save_filename, "wb"); 1492 f = fopen(save_filename, "wb");
1480 if (!f) { 1493 if (!f) {
1481 fprintf(stderr, "Failed to open %s file %s for writing\n", save_type_name(gen->save_type), save_filename); 1494 fprintf(stderr, "Failed to open %s file %s for writing\n", save_type_name(gen->save_type), save_filename);
1482 return; 1495 return;
1483 } 1496 }
1484 if (gen->save_type == RAM_FLAG_BOTH) { 1497 if (gen->save_type == RAM_FLAG_BOTH) {
1503 if (gen->save_type == RAM_FLAG_BOTH) { 1516 if (gen->save_type == RAM_FLAG_BOTH) {
1504 byteswap_rom(gen->save_size, (uint16_t *)gen->save_storage); 1517 byteswap_rom(gen->save_size, (uint16_t *)gen->save_storage);
1505 } 1518 }
1506 printf("Loaded %s from %s\n", save_type_name(gen->save_type), save_filename); 1519 printf("Loaded %s from %s\n", save_type_name(gen->save_type), save_filename);
1507 } 1520 }
1521 }
1522 if (gen->expansion) {
1523 segacd_context *cd = gen->expansion;
1524 char *bram_name = path_append(system->save_dir, "internal.bram");
1525 f = fopen(bram_name, "rb");
1526 if (f) {
1527 uint32_t read = fread(cd->bram, 1, 8 * 1024, f);
1528 fclose(f);
1529 if (read > 0) {
1530 printf("Loaded internal BRAM from %s\n", bram_name);
1531 }
1532 }
1533 free(bram_name);
1508 } 1534 }
1509 } 1535 }
1510 1536
1511 static void soft_reset(system_header *system) 1537 static void soft_reset(system_header *system)
1512 { 1538 {
2202 { 2228 {
2203 if (map[i].flags & MMAP_PTR_IDX) { 2229 if (map[i].flags & MMAP_PTR_IDX) {
2204 gen->m68k->mem_pointers[map[i].ptr_index] = map[i].buffer; 2230 gen->m68k->mem_pointers[map[i].ptr_index] = map[i].buffer;
2205 } 2231 }
2206 } 2232 }
2233 gen->header.type = SYSTEM_SEGACD;
2207 return gen; 2234 return gen;
2208 } 2235 }