summaryrefslogtreecommitdiff
path: root/src/nes/nes.cc
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-01-23 19:37:32 +0100
committerHannes Schulze <haschu0103@outlook.de>2025-01-23 19:37:32 +0100
commit6512dd599d13035f6a90b2009344e02c488f5aae (patch)
tree5d19f043aac57c5cec6edc8221d5ec9057d49ab3 /src/nes/nes.cc
parentbaa585fd21f631708de215929241d40f66b58498 (diff)
initial working version
Diffstat (limited to 'src/nes/nes.cc')
-rw-r--r--src/nes/nes.cc32
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