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