From b37a0b285a4c31013df7d0f1990a97391687ae0f Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Mon, 24 Feb 2020 23:59:18 +0200 Subject: [PATCH] Window Y still advances if WX=166 --- Core/display.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Core/display.c b/Core/display.c index 2161328..c9ca8ce 100644 --- a/Core/display.c +++ b/Core/display.c @@ -1037,17 +1037,19 @@ abort_fetching_object: /* Handle window */ /* Todo: verify timings */ if (!gb->wx_triggered && gb->wy_triggered && (gb->io_registers[GB_IO_LCDC] & 0x20)) { - if (gb->io_registers[GB_IO_WX] >= 166) { + if (gb->io_registers[GB_IO_WX] >= 167) { // Too late to enable the window } else if (gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 7) || - gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 6)) { - gb->wx_triggered = true; + gb->io_registers[GB_IO_WX] == (uint8_t) (gb->position_in_line + 6)) { gb->window_y++; - fifo_clear(&gb->bg_fifo); - gb->bg_fifo_paused = true; - gb->oam_fifo_paused = true; - gb->fetcher_state = 1; + if (gb->io_registers[GB_IO_WX] != 166) { + gb->wx_triggered = true; + fifo_clear(&gb->bg_fifo); + gb->bg_fifo_paused = true; + gb->oam_fifo_paused = true; + gb->fetcher_state = 1; + } } }