From 42ed8daebcd42e9d54e56a5624bdc4fe0f1b1ba7 Mon Sep 17 00:00:00 2001 From: Nathaniel Walizer Date: Mon, 3 Feb 2025 23:26:36 -0600 Subject: [PATCH] Make VBlank flags hew more closely to console behavior --- src/ppu.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ppu.c b/src/ppu.c index 929f4b0..fbafb5f 100644 --- a/src/ppu.c +++ b/src/ppu.c @@ -25,6 +25,7 @@ uint8_t nes_ppu_read(nes_ppu* ppu, uint16_t addr) { if (ppu_reg_status == addr) { val = ppu->status; ppu->latch = 0; + ppu->status &= ~ppu_Status_VBlank; } else if (oam_reg_data == addr) { OAM_LOG("PPU: OAM READ %02x > %02x\n", ppu->oam_addr, val); @@ -274,13 +275,13 @@ nes_ppu_Result nes_ppu_run(nes_ppu* ppu, int cycles) { ppu->frame++; result = ppu_Result_VBlank_Off; - } else if (ppu->scanline >= nes_ppu_active) { + } else if (ppu->scanline == nes_ppu_active) { ppu->status |= ppu_Status_VBlank; if (ppu->control & ppu_Control_VBlank) { result = ppu_Result_VBlank_On; } - } else { + } else if (ppu->scanline < nes_ppu_active) { if ( ppu->scanline > nes_ppu_prerender && ppu->scanline < nes_ppu_render) { ppu->scroll_y++;