diff segacd.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 cfd53c94fffb
children 3e0801280bef
line wrap: on
line diff
--- a/segacd.c	Thu Feb 03 23:41:40 2022 -0800
+++ b/segacd.c	Thu Feb 03 23:41:53 2022 -0800
@@ -1143,15 +1143,11 @@
 	};
 
 	segacd_context *cd = calloc(sizeof(segacd_context), 1);
-	FILE *f = fopen("cdbios.bin", "rb");
-	if (!f) {
-		fatal_error("Failed to open CD firmware for reading");
-	}
-	long firmware_size = file_size(f);
+	uint32_t firmware_size;
+	cd->rom = (uint16_t *)read_bundled_file("cdbios.bin", &firmware_size);
 	uint32_t adjusted_size = nearest_pow2(firmware_size);
-	cd->rom = malloc(adjusted_size);
-	if (firmware_size != fread(cd->rom, 1, firmware_size, f)) {
-		fatal_error("Failed to read CD firmware");
+	if (adjusted_size != firmware_size) {
+		cd->rom = realloc(cd->rom, adjusted_size);
 	}
 	cd->rom_mut = malloc(adjusted_size);
 	byteswap_rom(adjusted_size, cd->rom);
@@ -1162,11 +1158,11 @@
 	//tern_node *db = get_rom_db();
 	//*info = configure_rom(db, media->buffer, media->size, media->chain ? media->chain->buffer : NULL, media->chain ? media->chain->size : 0, NULL, 0);
 
-	cd->prog_ram = malloc(512*1024);
-	cd->word_ram = malloc(256*1024);
-	cd->pcm_ram = malloc(64*1024);
+	cd->prog_ram = calloc(512*1024, 1);
+	cd->word_ram = calloc(256*1024, 1);
+	cd->pcm_ram = calloc(64*1024, 1);
 	//TODO: Load state from file
-	cd->bram = malloc(8*1024);
+	cd->bram = calloc(8*1024, 1);
 
 
 	sub_cpu_map[0].buffer = sub_cpu_map[1].buffer = cd->prog_ram;