From 6512dd599d13035f6a90b2009344e02c488f5aae Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Thu, 23 Jan 2025 19:37:32 +0100 Subject: initial working version --- src/nes/nes.cc | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src/nes/nes.cc') diff --git a/src/nes/nes.cc b/src/nes/nes.cc index 3ed7a22..7ac1887 100644 --- a/src/nes/nes.cc +++ b/src/nes/nes.cc @@ -32,8 +32,34 @@ namespace nes auto nes::step(cycle_count const delta) -> void { current_cycles_ += delta; - cpu_.step_to(current_cycles_); - ppu_.step_to(current_cycles_); + while (cpu_.get_cycles() < current_cycles_) + { + cpu_.step(); + while (ppu_.get_cycles() < cpu_.get_cycles()) + { + ppu_.step(); + } + } + } + + auto nes::step_to_nmi() -> void + { + while (cpu_.is_nmi_pending()) + { + cpu_.step(); + while (ppu_.get_cycles() < cpu_.get_cycles()) + { + ppu_.step(); + } + } + while (!cpu_.is_nmi_pending()) + { + cpu_.step(); + while (ppu_.get_cycles() < cpu_.get_cycles()) + { + ppu_.step(); + } + } } auto nes::snapshot() -> test::status @@ -41,6 +67,8 @@ namespace nes auto res = test::status{}; res.sram = std::vector(cartridge_.get_ram(), cartridge_.get_ram() + cartridge_.get_ram_length()); cpu_.snapshot(res); + ppu_.snapshot(res); + mapper_.snapshot(res); return res; } } // namespace nes \ No newline at end of file -- cgit v1.3.1