diff --git a/Core/memory.c b/Core/memory.c index abad063..fccfd86 100644 --- a/Core/memory.c +++ b/Core/memory.c @@ -741,6 +741,14 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value) GB_timing_sync(gb); GB_lcd_off(gb); } + /* Handle disabling objects while already fetching an object */ + if ((gb->io_registers[GB_IO_LCDC] & 2) && !(value & 2)) { + if (gb->during_object_fetch) { + gb->cycles_for_line += gb->display_cycles; + gb->display_cycles = 0; + gb->object_fetch_aborted = true; + } + } gb->io_registers[GB_IO_LCDC] = value; if (!(value & 0x20)) { gb->wx_triggered = false; diff --git a/Core/sm83_cpu.c b/Core/sm83_cpu.c index f25e14b..73e2ee1 100644 --- a/Core/sm83_cpu.c +++ b/Core/sm83_cpu.c @@ -208,29 +208,12 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value) uint8_t old_value = GB_read_memory(gb, addr); GB_advance_cycles(gb, gb->pending_cycles - 2); - /* Handle disabling objects while already fetching an object */ - if ((old_value & 2) && !(value & 2)) { - if (gb->during_object_fetch) { - gb->cycles_for_line += gb->display_cycles; - gb->display_cycles = 0; - gb->object_fetch_aborted = true; - } - } - if (/* gb->model != GB_MODEL_MGB && */ gb->position_in_line == 0 && (old_value & 2) && !(value & 2)) { old_value &= ~2; } GB_write_memory(gb, addr, old_value | (value & 1)); GB_advance_cycles(gb, 1); - /* Handle disabling objects while already fetching an object */ - if ((old_value & 2) && !(value & 2)) { - if (gb->during_object_fetch) { - gb->cycles_for_line += gb->display_cycles; - gb->display_cycles = 0; - gb->object_fetch_aborted = true; - } - } GB_write_memory(gb, addr, value); gb->pending_cycles = 5; return;