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 }