Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
2240:8e8db9141209 | 2243:0d1d5dccdd28 |
---|---|
465 gen->reset_requested = 1; | 465 gen->reset_requested = 1; |
466 context->should_return = 1; | 466 context->should_return = 1; |
467 gen->reset_cycle = CYCLE_NEVER; | 467 gen->reset_cycle = CYCLE_NEVER; |
468 } | 468 } |
469 if (v_context->frame != gen->last_frame) { | 469 if (v_context->frame != gen->last_frame) { |
470 if (gen->ym->scope) { | |
471 scope_render(gen->ym->scope); | |
472 } | |
470 //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); | 473 //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); |
471 uint32_t elapsed = v_context->frame - gen->last_frame; | 474 uint32_t elapsed = v_context->frame - gen->last_frame; |
472 gen->last_frame = v_context->frame; | 475 gen->last_frame = v_context->frame; |
473 event_flush(mclks); | 476 event_flush(mclks); |
474 gen->last_flush_cycle = mclks; | 477 gen->last_flush_cycle = mclks; |
1710 vgm_close(gen->ym->vgm); | 1713 vgm_close(gen->ym->vgm); |
1711 gen->ym->vgm = gen->psg->vgm = NULL; | 1714 gen->ym->vgm = gen->psg->vgm = NULL; |
1712 gen->header.vgm_logging = 0; | 1715 gen->header.vgm_logging = 0; |
1713 } | 1716 } |
1714 | 1717 |
1718 static void toggle_debug_view(system_header *system, uint8_t debug_view) | |
1719 { | |
1720 genesis_context *gen = (genesis_context *)system; | |
1721 if (debug_view < DEBUG_OSCILLOSCOPE) { | |
1722 vdp_toggle_debug_view(gen->vdp, debug_view); | |
1723 } else if (debug_view == DEBUG_OSCILLOSCOPE) { | |
1724 if (gen->ym->scope) { | |
1725 oscilloscope *scope = gen->ym->scope; | |
1726 gen->ym->scope = NULL; | |
1727 gen->psg->scope = NULL; | |
1728 if (gen->expansion) { | |
1729 segacd_context *cd = gen->expansion; | |
1730 cd->pcm.scope = NULL; | |
1731 } | |
1732 scope_close(scope); | |
1733 } else { | |
1734 oscilloscope *scope = create_oscilloscope(); | |
1735 ym_enable_scope(gen->ym, scope); | |
1736 psg_enable_scope(gen->psg, scope); | |
1737 if (gen->expansion) { | |
1738 segacd_context *cd = gen->expansion; | |
1739 rf5c164_enable_scope(&cd->pcm, scope); | |
1740 } | |
1741 } | |
1742 } | |
1743 } | |
1744 | |
1715 static void *tmss_rom_write_16(uint32_t address, void *context, uint16_t value) | 1745 static void *tmss_rom_write_16(uint32_t address, void *context, uint16_t value) |
1716 { | 1746 { |
1717 m68k_context *m68k = context; | 1747 m68k_context *m68k = context; |
1718 genesis_context *gen = m68k->system; | 1748 genesis_context *gen = m68k->system; |
1719 if (gen->tmss) { | 1749 if (gen->tmss) { |
1884 gen->header.config_updated = config_updated; | 1914 gen->header.config_updated = config_updated; |
1885 gen->header.serialize = serialize; | 1915 gen->header.serialize = serialize; |
1886 gen->header.deserialize = deserialize; | 1916 gen->header.deserialize = deserialize; |
1887 gen->header.start_vgm_log = start_vgm_log; | 1917 gen->header.start_vgm_log = start_vgm_log; |
1888 gen->header.stop_vgm_log = stop_vgm_log; | 1918 gen->header.stop_vgm_log = stop_vgm_log; |
1919 gen->header.toggle_debug_view = toggle_debug_view; | |
1889 gen->header.type = SYSTEM_GENESIS; | 1920 gen->header.type = SYSTEM_GENESIS; |
1890 gen->header.info = *rom; | 1921 gen->header.info = *rom; |
1891 set_region(gen, rom, force_region); | 1922 set_region(gen, rom, force_region); |
1892 tern_node *model = get_model(config, SYSTEM_GENESIS); | 1923 tern_node *model = get_model(config, SYSTEM_GENESIS); |
1893 uint8_t tmss = !strcmp(tern_find_ptr_default(model, "tmss", "off"), "on"); | 1924 uint8_t tmss = !strcmp(tern_find_ptr_default(model, "tmss", "off"), "on"); |