diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2025-01-23 19:37:32 +0100 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2025-01-23 19:37:32 +0100 |
| commit | 6512dd599d13035f6a90b2009344e02c488f5aae (patch) | |
| tree | 5d19f043aac57c5cec6edc8221d5ec9057d49ab3 /src/nes/nes.cc | |
| parent | baa585fd21f631708de215929241d40f66b58498 (diff) | |
initial working version
Diffstat (limited to 'src/nes/nes.cc')
| -rw-r--r-- | src/nes/nes.cc | 32 |
1 files changed, 30 insertions, 2 deletions
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 |
