From 0157d11bfc1f0cb01815f75bbf80635f71910b4c Mon Sep 17 00:00:00 2001 From: Determinant Date: Fri, 17 Nov 2017 00:30:28 -0500 Subject: pass the vbl nmi timing test --- src/memory.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/memory.rs') diff --git a/src/memory.rs b/src/memory.rs index fc8732c..f8b6632 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -68,7 +68,13 @@ impl<'a> VMem for CPUMemory<'a> { unsafe{(*self.sram.get())[(addr & 0x07ff) as usize] = data;} } else if addr < 0x4000 { match addr & 0x7 { - 0x0 => ppu.write_ctl(data), + 0x0 => { + let old = ppu.get_flag_nmi(); + ppu.write_ctl(data); + if !old && ppu.try_nmi() && ppu.vblank { + cpu.trigger_delayed_nmi() + } /* toggle NMI flag can generate multiple ints */ + }, 0x1 => ppu.write_mask(data), 0x3 => ppu.write_oamaddr(data), 0x4 => ppu.write_oamdata(data), -- cgit v1.2.3