Mercurial > repos > blastem
comparison genesis.c @ 2281:b9fed07f19e4
Implement BRAM cart support
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 08 Jan 2023 23:30:28 -0800 |
parents | 9ead0fe69d9b |
children | 5d3411f52d00 |
comparison
equal
deleted
inserted
replaced
2280:9ead0fe69d9b | 2281:b9fed07f19e4 |
---|---|
1540 fwrite(cd->bram, 1, 8 * 1024, f); | 1540 fwrite(cd->bram, 1, 8 * 1024, f); |
1541 fclose(f); | 1541 fclose(f); |
1542 printf("Saved internal BRAM to %s\n", bram_name); | 1542 printf("Saved internal BRAM to %s\n", bram_name); |
1543 } | 1543 } |
1544 free(bram_name); | 1544 free(bram_name); |
1545 if (cd->bram_cart_id < 8) { | |
1546 bram_name = path_append(system->save_dir, "cart.bram"); | |
1547 f = fopen(bram_name, "wb"); | |
1548 if (f) { | |
1549 long configured_size = 0x2000 << cd->bram_cart_id; | |
1550 fwrite(cd->bram_cart, 1, configured_size, f); | |
1551 fclose(f); | |
1552 printf("Saved BRAM cart to %s\n", bram_name); | |
1553 } | |
1554 free(bram_name); | |
1555 } | |
1545 } | 1556 } |
1546 if (gen->save_type == SAVE_NONE) { | 1557 if (gen->save_type == SAVE_NONE) { |
1547 return; | 1558 return; |
1548 } | 1559 } |
1549 f = fopen(save_filename, "wb"); | 1560 f = fopen(save_filename, "wb"); |
1583 if (f) { | 1594 if (f) { |
1584 uint32_t read = fread(cd->bram, 1, 8 * 1024, f); | 1595 uint32_t read = fread(cd->bram, 1, 8 * 1024, f); |
1585 fclose(f); | 1596 fclose(f); |
1586 if (read > 0) { | 1597 if (read > 0) { |
1587 printf("Loaded internal BRAM from %s\n", bram_name); | 1598 printf("Loaded internal BRAM from %s\n", bram_name); |
1599 } | |
1600 } | |
1601 free(bram_name); | |
1602 bram_name = path_append(system->save_dir, "cart.bram"); | |
1603 f = fopen(bram_name, "rb"); | |
1604 if (f) { | |
1605 long existing_size = nearest_pow2(file_size(f)); | |
1606 if (existing_size > 1 * 1024 * 1024) { | |
1607 existing_size = 1 * 1024 * 1024; | |
1608 } | |
1609 long configured_size = 0x2000 << cd->bram_cart_id; | |
1610 if (existing_size != configured_size) { | |
1611 if (existing_size > configured_size) { | |
1612 free(cd->bram_cart); | |
1613 cd->bram_cart = calloc(existing_size, 1); | |
1614 } | |
1615 cd->bram_cart_id = 0; | |
1616 while (existing_size > (0x2000 <<cd->bram_cart_id)) { | |
1617 cd->bram_cart_id++; | |
1618 } | |
1619 } | |
1620 uint32_t read = fread(cd->bram_cart, 1, existing_size, f); | |
1621 fclose(f); | |
1622 if (read > 0) { | |
1623 printf("Loaded BRAM cart from %s\n", bram_name); | |
1588 } | 1624 } |
1589 } | 1625 } |
1590 free(bram_name); | 1626 free(bram_name); |
1591 } | 1627 } |
1592 } | 1628 } |