From 232108c5226a8d8f1268ed9d9051e62fcdfa0cdd Mon Sep 17 00:00:00 2001 From: JakeBreath Date: Sun, 9 Aug 2026 14:47:16 -0500 Subject: [PATCH] temporal backup --- src/cpu.rs | 2 +- src/main.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/cpu.rs b/src/cpu.rs index 68ede6b..e1a85c1 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -17,7 +17,7 @@ pub struct Cpu { sp: u8, // Stack Pointer pc: u16, // Program Counter p: u8, // Status Register - cycles: u64, + pub cycles: u64, irq_pending: bool, nmi_pending: bool, } diff --git a/src/main.rs b/src/main.rs index be4e454..bc14733 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,35 @@ use crate::cartridge::Cartridge; use crate::cpu::Cpu; fn main() { + let args: Vec = std::env::args().collect(); + + if args.len() > 1 { + run_blargg(&args[1]); + } else { + run_nestest(); + } +} + +fn run_blargg(path: &str) { + let cart = Cartridge::from_file(path).unwrap(); + let mut bus = NesBus::new(cart); + let mut cpu = Cpu::new(); + cpu.reset(&mut bus); // boots from $FFFC-$FFFD via MMC1 PRG banking + + let cycle_cap: u64 = 5_000_000; // blargg tests complete well under this; tune if needed + while cpu.cycles < cycle_cap { + cpu.step(&mut bus); + } + + let r0 = bus.read(0x6000); + let r1 = bus.read(0x6001); + let r2 = bus.read(0x6002); + let r3 = bus.read(0x6003); + println!("result: $6000={:02X} $6001={:02X} $6002={:02X} $6003={:02X}", r0, r1, r2, r3); + if r0 == 0 { println!("PASS"); } else { println!("FAIL (error {:#04X})", r0); } +} + +fn run_nestest() { let cart: Cartridge = Cartridge::from_file("roms/test/cpu/nestest/nestest.nes").unwrap(); let mut bus: NesBus = NesBus::new(cart); let mut cpu = Cpu::new();