nes-sim 0.1.4

A NES (Famicom) emulator core library written in pure Rust.
Documentation
use super::*;

#[test]
fn sets_pc_stack_pointer_and_interrupt_disable_from_reset_vector() {
    let mut cpu = CPU::new();
    let mut bus = TestBus::new();
    bus.write_u16(0xFFFC, 0x1234);

    cpu.reset(&mut bus);

    assert_eq!(cpu.pc, 0x1234);
    assert_eq!(cpu.sp, 0xFA);
    assert!(cpu.p.i, "interrupt disable flag should be set after reset");
}

#[test]
fn reset_wraps_stack_pointer_and_clears_internal_interrupt_state() {
    let mut cpu = CPU::new();
    let mut bus = TestBus::new();
    bus.write_u16(0xFFFC, 0x3456);

    cpu.sp = 0x01;
    cpu.interrupt_delay = true;
    cpu.pre_interrupt_delay = true;
    cpu.nmi_next = true;
    cpu.set_nmi(true);

    cpu.reset(&mut bus);

    assert_eq!(cpu.pc, 0x3456);
    assert_eq!(cpu.sp, 0xFE);
    assert!(cpu.p.i);
    assert!(!cpu.interrupt_delay);
    assert!(!cpu.pre_interrupt_delay);
    assert!(!cpu.nmi_next);
    assert!(cpu.nmi_prev, "reset should synchronize NMI edge tracking");
}