42 lines
1.5 KiB
Rust
42 lines
1.5 KiB
Rust
use crate::{NES, hex_view::Memory};
|
|
|
|
macro_rules! rom_test {
|
|
($name:ident, $rom:literal, |$nes:ident| $eval:expr) => {
|
|
#[test]
|
|
fn $name() {
|
|
let rom_file = concat!(env!("ROM_DIR"), "/", $rom);
|
|
println!("{}: {}", stringify!($name), rom_file);
|
|
let mut $nes = NES::load_nes_file(rom_file).expect("Failed to create nes object");
|
|
$nes.reset_and_run_with_timeout(1000000);
|
|
println!("Final: {:?}", $nes);
|
|
$eval
|
|
}
|
|
};
|
|
}
|
|
|
|
rom_test!(basic_cpu, "basic-cpu.nes", |nes| {
|
|
assert_eq!(nes.last_instruction, "0x8001 HLT :2 []");
|
|
// Off by one from Mesen, since Mesen doesn't count the clock cycle attempting to execute the 'invalid' opcode
|
|
assert_eq!(nes.cycle, 11);
|
|
// This is off by one from Mesen, because Mesen is left pointing at the 'invalid' opcode
|
|
assert_eq!(nes.cpu.pc, 0x8002);
|
|
|
|
assert_eq!(nes.cpu.sp, 0xFD);
|
|
// assert_eq!(nes.cpu.a, 0x00);
|
|
// assert_eq!(nes.cpu.x, 0x00);
|
|
// assert_eq!(nes.cpu.y, 0x00);
|
|
});
|
|
|
|
rom_test!(read_write, "read_write.nes", |nes| {
|
|
assert_eq!(nes.last_instruction, "0x8011 HLT :2 []");
|
|
assert_eq!(nes.cycle, 31);
|
|
assert_eq!(nes.cpu.pc, 0x8012);
|
|
assert_eq!(nes.cpu.sp, 0xFD);
|
|
assert_eq!(nes.cpu.a, 0xAA);
|
|
assert_eq!(nes.cpu.x, 0xAA);
|
|
assert_eq!(nes.cpu.y, 0xAA);
|
|
assert_eq!(nes.cpu_mem().peek(0x0000).unwrap(), 0xAA);
|
|
assert_eq!(nes.cpu_mem().peek(0x0001).unwrap(), 0xAA);
|
|
assert_eq!(nes.cpu_mem().peek(0x0002).unwrap(), 0xAA);
|
|
});
|