diff segacd.c @ 1503:a763523dadf4 segacd

Added code for initializing a combined Genesis + Sega CD system when a Sega CD ISO is loaded
author Michael Pavone <pavone@retrodev.com>
date Wed, 13 Dec 2017 09:44:41 -0800
parents 2564b6ba2e12
children 95b3a1a8b26c
line wrap: on
line diff
--- a/segacd.c	Tue Dec 12 09:44:33 2017 -0800
+++ b/segacd.c	Wed Dec 13 09:44:41 2017 -0800
@@ -203,6 +203,7 @@
 		{0xFF0000, 0xFF7FFF, 0x0000, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8},
 		{0xFF8000, 0xFF81FF, 0x0000, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8}
 	};
+	memset(info, 0, sizeof(*info));
 	segacd_context *cd = calloc(sizeof(segacd_context), 1);
 	FILE *f = fopen("cdbios.bin", "rb");
 	if (!f) {
@@ -215,8 +216,12 @@
 		fatal_error("Failed to read CD firmware");
 	}
 	cd->rom_mut = malloc(adjusted_size);
+	byteswap_rom(adjusted_size, cd->rom);
 	memcpy(cd->rom_mut, cd->rom, adjusted_size);
-	byteswap_rom(firmware_size, cd->rom);
+	
+	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->work_ram = malloc(256*1024);
 	cd->pcm_ram = malloc(64*1024);
@@ -238,7 +243,7 @@
 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint32_t *num_chunks)
 {
 	static memmap_chunk main_cpu_map[] = {
-		{0x000000, 0x01FFFF, 0x00000, .flags=MMAP_READ},
+		{0x000000, 0x01FFFF, 0xFFFFFF, .flags=MMAP_READ},
 		{0x020000, 0x03FFFF, 0x1FFFF, .flags=MMAP_READ|MMAP_WRITE|MMAP_PTR_IDX|MMAP_FUNC_NULL, .ptr_index = 0},//TODO: support running main CPU code from here
 		{0x040000, 0x05FFFF, 0x1FFFF, .flags=MMAP_READ}, //first ROM alias
 		//TODO: additional ROM/prog RAM aliases