# HG changeset patch # User Michael Pavone # Date 1606278218 28800 # Node ID 270a4c875e0a8749944f73e9adbb605978d81806 # Parent e42c45ff06d557fe44dbf4cf00e24ed1a0404447 Backed out changeset 96971b673f51 This optimization caused a regression in Overdrive 2 due to the impact of Z80 access to the 68K bus diff -r e42c45ff06d5 -r 270a4c875e0a genesis.c --- a/genesis.c Sat Nov 21 23:08:02 2020 -0800 +++ b/genesis.c Tue Nov 24 20:23:38 2020 -0800 @@ -644,27 +644,16 @@ refresh_counter = refresh_counter % (MCLKS_PER_68K * REFRESH_INTERVAL); last_sync_cycle = context->current_cycle; #endif + sync_components(context, 0); genesis_context *gen = context->system; vdp_context * v_context = gen->vdp; + uint32_t before_cycle = v_context->cycles; if (vdp_port < 0x10) { if (vdp_port < 4) { - sync_components(context, 0); - uint32_t before_cycle = v_context->cycles; value = vdp_data_port_read(v_context); - if (v_context->cycles != before_cycle) { - //printf("68K paused for %d (%d) cycles at cycle %d (%d) for read\n", v_context->cycles - context->current_cycle, v_context->cycles - before_cycle, context->current_cycle, before_cycle); - context->current_cycle = v_context->cycles; - //Lock the Z80 out of the bus until the VDP access is complete - genesis_context *gen = context->system; - gen->bus_busy = 1; - sync_z80(gen->z80, v_context->cycles); - gen->bus_busy = 0; - } } else if(vdp_port < 8) { - vdp_run_context(v_context, context->current_cycle); value = vdp_control_port_read(v_context); } else { - vdp_run_context(v_context, context->current_cycle); value = vdp_hv_counter_read(v_context); //printf("HV Counter: %X at cycle %d\n", value, v_context->cycles); } @@ -673,6 +662,15 @@ } else { value = get_open_bus_value(&gen->header); } + if (v_context->cycles != before_cycle) { + //printf("68K paused for %d (%d) cycles at cycle %d (%d) for read\n", v_context->cycles - context->current_cycle, v_context->cycles - before_cycle, context->current_cycle, before_cycle); + context->current_cycle = v_context->cycles; + //Lock the Z80 out of the bus until the VDP access is complete + genesis_context *gen = context->system; + gen->bus_busy = 1; + sync_z80(gen->z80, v_context->cycles); + gen->bus_busy = 0; + } #ifdef REFRESH_EMULATION last_sync_cycle -= 4 * MCLKS_PER_68K; //refresh may have happened while we were waiting on the VDP,