Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
1502:2564b6ba2e12 | 1503:a763523dadf4 |
---|---|
201 .read_16 = work_ram_1M_read16, .write_16 = work_ram_1M_write16, .read_8 = work_ram_1M_read8, .write_8 = work_ram_1M_write8}, | 201 .read_16 = work_ram_1M_read16, .write_16 = work_ram_1M_write16, .read_8 = work_ram_1M_read8, .write_8 = work_ram_1M_write8}, |
202 {0xFE0000, 0xFEFFFF, 0x3FFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_ONLY_ODD}, | 202 {0xFE0000, 0xFEFFFF, 0x3FFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_ONLY_ODD}, |
203 {0xFF0000, 0xFF7FFF, 0x0000, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8}, | 203 {0xFF0000, 0xFF7FFF, 0x0000, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8}, |
204 {0xFF8000, 0xFF81FF, 0x0000, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8} | 204 {0xFF8000, 0xFF81FF, 0x0000, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8} |
205 }; | 205 }; |
206 memset(info, 0, sizeof(*info)); | |
206 segacd_context *cd = calloc(sizeof(segacd_context), 1); | 207 segacd_context *cd = calloc(sizeof(segacd_context), 1); |
207 FILE *f = fopen("cdbios.bin", "rb"); | 208 FILE *f = fopen("cdbios.bin", "rb"); |
208 if (!f) { | 209 if (!f) { |
209 fatal_error("Failed to open CD firmware for reading"); | 210 fatal_error("Failed to open CD firmware for reading"); |
210 } | 211 } |
213 cd->rom = malloc(adjusted_size); | 214 cd->rom = malloc(adjusted_size); |
214 if (firmware_size != fread(cd->rom, 1, firmware_size, f)) { | 215 if (firmware_size != fread(cd->rom, 1, firmware_size, f)) { |
215 fatal_error("Failed to read CD firmware"); | 216 fatal_error("Failed to read CD firmware"); |
216 } | 217 } |
217 cd->rom_mut = malloc(adjusted_size); | 218 cd->rom_mut = malloc(adjusted_size); |
219 byteswap_rom(adjusted_size, cd->rom); | |
218 memcpy(cd->rom_mut, cd->rom, adjusted_size); | 220 memcpy(cd->rom_mut, cd->rom, adjusted_size); |
219 byteswap_rom(firmware_size, cd->rom); | 221 |
222 tern_node *db = get_rom_db(); | |
223 *info = configure_rom(db, media->buffer, media->size, media->chain ? media->chain->buffer : NULL, media->chain ? media->chain->size : 0, NULL, 0); | |
224 | |
220 cd->prog_ram = malloc(512*1024); | 225 cd->prog_ram = malloc(512*1024); |
221 cd->work_ram = malloc(256*1024); | 226 cd->work_ram = malloc(256*1024); |
222 cd->pcm_ram = malloc(64*1024); | 227 cd->pcm_ram = malloc(64*1024); |
223 //TODO: Load state from file | 228 //TODO: Load state from file |
224 cd->bram = malloc(8*1024); | 229 cd->bram = malloc(8*1024); |
236 } | 241 } |
237 | 242 |
238 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint32_t *num_chunks) | 243 memmap_chunk *segacd_main_cpu_map(segacd_context *cd, uint32_t *num_chunks) |
239 { | 244 { |
240 static memmap_chunk main_cpu_map[] = { | 245 static memmap_chunk main_cpu_map[] = { |
241 {0x000000, 0x01FFFF, 0x00000, .flags=MMAP_READ}, | 246 {0x000000, 0x01FFFF, 0xFFFFFF, .flags=MMAP_READ}, |
242 {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 | 247 {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 |
243 {0x040000, 0x05FFFF, 0x1FFFF, .flags=MMAP_READ}, //first ROM alias | 248 {0x040000, 0x05FFFF, 0x1FFFF, .flags=MMAP_READ}, //first ROM alias |
244 //TODO: additional ROM/prog RAM aliases | 249 //TODO: additional ROM/prog RAM aliases |
245 {0x200000, 0x01FFFF, 0x1FFFF, .flags=MMAP_READ|MMAP_WRITE|MMAP_PTR_IDX|MMAP_FUNC_NULL, .ptr_index = 1}, | 250 {0x200000, 0x01FFFF, 0x1FFFF, .flags=MMAP_READ|MMAP_WRITE|MMAP_PTR_IDX|MMAP_FUNC_NULL, .ptr_index = 1}, |
246 {0x220000, 0x03FFFF, 0x1FFFF, .flags=MMAP_READ|MMAP_WRITE|MMAP_PTR_IDX|MMAP_FUNC_NULL, .ptr_index = 2}, | 251 {0x220000, 0x03FFFF, 0x1FFFF, .flags=MMAP_READ|MMAP_WRITE|MMAP_PTR_IDX|MMAP_FUNC_NULL, .ptr_index = 2}, |