Mercurial > repos > blastem
changeset 2068:f573f2c31bc9 segacd
Dump PROG RAM to file for debugging
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 30 Jan 2022 11:58:34 -0800 |
parents | f22e04b69272 |
children | 8e51c0c3f2e3 |
files | segacd.c |
diffstat | 1 files changed, 31 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/segacd.c Sun Jan 30 11:58:17 2022 -0800 +++ b/segacd.c Sun Jan 30 11:58:34 2022 -0800 @@ -417,7 +417,7 @@ lc8951_resume_transfer(&cd->cdc, cd->cdc.cycle); } calculate_target_cycle(cd->m68k); - + } return cd->gate_array[reg]; } @@ -688,7 +688,7 @@ cd->gate_array[GA_CDC_HOST_DATA] &= 0xFF00; cd->gate_array[GA_CDC_HOST_DATA] |= value; } - + uint32_t dma_addr = cd->gate_array[GA_CDC_DMA_ADDR] << 3; dma_addr |= cd->cdc_dst_low; switch (dest) @@ -886,6 +886,32 @@ return address & 1 ? val : val >> 8; } +static void dump_prog_ram(segacd_context *cd) +{ + static int dump_count; + char fname[256]; + sprintf(fname, "prog_ram_%d.bin", dump_count++); + FILE *f = fopen(fname, "wb"); + if (f) { + uint32_t last = 256*1024-1; + for(; last > 0; --last) + { + if (cd->prog_ram[last]) { + break; + } + } + for (uint32_t i = 0; i <= last; i++) + { + uint8_t pair[2]; + pair[0] = cd->prog_ram[i] >> 8; + pair[1] = cd->prog_ram[i]; + fwrite(pair, 1, sizeof(pair), f); + } + + fclose(f); + } +} + static void *main_gate_write16(uint32_t address, void *vcontext, uint16_t value) { m68k_context *m68k = vcontext; @@ -920,6 +946,9 @@ m68k->mem_pointers[cd->memptr_start_index] = NULL; m68k_invalidate_code_range(m68k, cd->base + 0x220000, cd->base + 0x240000); m68k_invalidate_code_range(cd->m68k, bank * 0x20000, (bank + 1) * 0x20000); + if (!new_access) { + dump_prog_ram(cd); + } } break; }