Mercurial > repos > blastem
diff genesis.c @ 2243:0d1d5dccdd28
Initial implementation of oscilloscope debug view
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Nov 2022 17:57:02 -0800 |
parents | 0db9dc6a9020 |
children | f7e2e11f1214 |
line wrap: on
line diff
--- a/genesis.c Wed Sep 21 23:16:39 2022 -0700 +++ b/genesis.c Tue Nov 22 17:57:02 2022 -0800 @@ -467,6 +467,9 @@ gen->reset_cycle = CYCLE_NEVER; } if (v_context->frame != gen->last_frame) { + if (gen->ym->scope) { + scope_render(gen->ym->scope); + } //printf("reached frame end %d | MCLK Cycles: %d, Target: %d, VDP cycles: %d, vcounter: %d, hslot: %d\n", gen->last_frame, mclks, gen->frame_end, v_context->cycles, v_context->vcounter, v_context->hslot); uint32_t elapsed = v_context->frame - gen->last_frame; gen->last_frame = v_context->frame; @@ -1712,6 +1715,33 @@ gen->header.vgm_logging = 0; } +static void toggle_debug_view(system_header *system, uint8_t debug_view) +{ + genesis_context *gen = (genesis_context *)system; + if (debug_view < DEBUG_OSCILLOSCOPE) { + vdp_toggle_debug_view(gen->vdp, debug_view); + } else if (debug_view == DEBUG_OSCILLOSCOPE) { + if (gen->ym->scope) { + oscilloscope *scope = gen->ym->scope; + gen->ym->scope = NULL; + gen->psg->scope = NULL; + if (gen->expansion) { + segacd_context *cd = gen->expansion; + cd->pcm.scope = NULL; + } + scope_close(scope); + } else { + oscilloscope *scope = create_oscilloscope(); + ym_enable_scope(gen->ym, scope); + psg_enable_scope(gen->psg, scope); + if (gen->expansion) { + segacd_context *cd = gen->expansion; + rf5c164_enable_scope(&cd->pcm, scope); + } + } + } +} + static void *tmss_rom_write_16(uint32_t address, void *context, uint16_t value) { m68k_context *m68k = context; @@ -1886,6 +1916,7 @@ gen->header.deserialize = deserialize; gen->header.start_vgm_log = start_vgm_log; gen->header.stop_vgm_log = stop_vgm_log; + gen->header.toggle_debug_view = toggle_debug_view; gen->header.type = SYSTEM_GENESIS; gen->header.info = *rom; set_region(gen, rom, force_region);