Skip to content

Commit 61dd3dc

Browse files
Merge pull request #83 from zohassadar/garbage_test
validate garbage 4 nmi occurs during wait loop
2 parents 227d0d5 + 957fb91 commit 61dd3dc

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

tests/src/garbage.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::{util, labels, playfield, video};
2+
use rusticnes_core::memory::read_byte;
23

34
pub fn test_garbage4_crash() {
45
let mut emu = util::emulator(None);
@@ -10,6 +11,9 @@ pub fn test_garbage4_crash() {
1011
let level_number = labels::get("levelNumber") as usize;
1112
let gmod = labels::get("garbageModifier") as usize;
1213
let mode = labels::get("MODE_GARBAGE") as u8;
14+
let nmi_label = labels::get("nmi") as u16;
15+
let wait_loop_start: u16 = labels::get("updateAudioWaitForNmiAndResetOamStaging") + 7 as u16;
16+
let wait_loop_end: u16 = labels::get("resetOAMStaging") as u16;
1317

1418
// spend a few frames bootstrapping
1519
for _ in 0..3 {
@@ -56,10 +60,18 @@ pub fn test_garbage4_crash() {
5660
##########
5761
##########"##);
5862

59-
for _ in 0..40 {
60-
emu.run_until_vblank();
61-
view.render(&mut emu);
62-
}
63+
for _ in 0..40 {
64+
loop {
65+
emu.cycle();
66+
if emu.registers.pc == nmi_label { break };
67+
}
68+
let stack_pointer = emu.registers.s;
69+
let return_lo = read_byte(&mut emu, 0x0100 + stack_pointer as u16 + 2) as u16;
70+
let return_hi = read_byte(&mut emu, 0x0100 + stack_pointer as u16 + 3) as u16 ;
71+
let return_addr = return_hi << 8 | return_lo;
72+
assert!(return_addr >= wait_loop_start && return_addr <= wait_loop_end);
73+
// view.render(&mut emu);
74+
}
6375

64-
assert_ne!(emu.cpu.opcode, 18);
76+
assert_ne!(emu.cpu.opcode, 18);
6577
}

tests/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ fn main() {
4545

4646
// run tests
4747
if options.test {
48-
// garbage::test_garbage4_crash();
49-
// println!(">> garbage4 ✅");
48+
garbage::test_garbage4_crash();
49+
println!(">> garbage4 ✅");
5050
floor::test();
5151
println!(">> floor ✅");
5252
tspins::test();

0 commit comments

Comments
 (0)