| @@ -25,6 +25,7 @@ uint8_t nes_ppu_read(nes_ppu* ppu, uint16_t addr) { | |||||
| if (ppu_reg_status == addr) { | if (ppu_reg_status == addr) { | ||||
| val = ppu->status; | val = ppu->status; | ||||
| ppu->latch = 0; | ppu->latch = 0; | ||||
| ppu->status &= ~ppu_Status_VBlank; | |||||
| } else if (oam_reg_data == addr) { | } else if (oam_reg_data == addr) { | ||||
| OAM_LOG("PPU: OAM READ %02x > %02x\n", ppu->oam_addr, val); | 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++; | ppu->frame++; | ||||
| result = ppu_Result_VBlank_Off; | result = ppu_Result_VBlank_Off; | ||||
| } else if (ppu->scanline >= nes_ppu_active) { | |||||
| } else if (ppu->scanline == nes_ppu_active) { | |||||
| ppu->status |= ppu_Status_VBlank; | ppu->status |= ppu_Status_VBlank; | ||||
| if (ppu->control & ppu_Control_VBlank) { | if (ppu->control & ppu_Control_VBlank) { | ||||
| result = ppu_Result_VBlank_On; | result = ppu_Result_VBlank_On; | ||||
| } | } | ||||
| } else { | |||||
| } else if (ppu->scanline < nes_ppu_active) { | |||||
| if ( ppu->scanline > nes_ppu_prerender && | if ( ppu->scanline > nes_ppu_prerender && | ||||
| ppu->scanline < nes_ppu_render) { | ppu->scanline < nes_ppu_render) { | ||||
| ppu->scroll_y++; | ppu->scroll_y++; | ||||