From 649b0be9f91ab73c1332d2eef40a44aaba8802b2 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 11 Mar 2023 19:39:47 +0200 Subject: [PATCH] Fix copper not starting (almost) immediately when DMACON was written to. --- custom.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/custom.cpp b/custom.cpp index 553c47d4..47dc0255 100644 --- a/custom.cpp +++ b/custom.cpp @@ -7993,6 +7993,11 @@ static void bitplane_dma_change(uae_u32 v) dmacon_bpl = (v & DMA_BITPLANE) && (v & 0x200); } +static void compute_spcflag_copper_delayed(uae_u32 v) +{ + compute_spcflag_copper(); +} + static void DMACON(int hpos, uae_u16 v) { uae_u16 changed; @@ -8019,7 +8024,11 @@ static void DMACON(int hpos, uae_u16 v) copper_dma_change_cycle = get_cycles(); } if (newcop && !oldcop) { - compute_spcflag_copper(); + if (copper_dma_change_cycle == get_cycles()) { + event2_newevent_xx(-1, CYCLE_UNIT, 0, compute_spcflag_copper_delayed); + } else { + compute_spcflag_copper(); + } } int oldblt = (oldcon & DMA_BLITTER) && (oldcon & DMA_MASTER); @@ -10109,7 +10118,7 @@ static void do_copper_fetch(int hpos, uae_u16 id) { // fake MOVE phase 2 #ifdef DEBUGGER - uae_u16 reg = cop_state.ir[0] & 0x1FE; + uae_u16 reg = 0x8c; // COPINS if (debug_dma) { record_dma_read(reg, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); } @@ -10118,6 +10127,7 @@ static void do_copper_fetch(int hpos, uae_u16 id) #ifdef DEBUGGER if (debug_dma) { record_dma_read_value(cop_state.ir[1]); + record_dma_event2(DMA_EVENT2_COPPERUSE, hpos, vpos); } #endif if (cop_state.state == COP_strobe_delay4) { @@ -10653,7 +10663,7 @@ next: static void compute_spcflag_copper(void) { - if (!is_copper_dma() || cop_state.state == COP_stop || cop_state.state == COP_waitforever || cop_state.state == COP_bltwait || cop_state.state == COP_bltwait2 || custom_disabled) + if (cop_state.state == COP_stop || cop_state.state == COP_waitforever || cop_state.state == COP_bltwait || cop_state.state == COP_bltwait2 || custom_disabled) return; if (cop_state.state == COP_wait1) { int vp = vpos & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); -- 2.47.3