Skip to content

Commit 22984a9

Browse files
committed
brute force framework
1 parent 5ccb1db commit 22984a9

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

tests/src/crash.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
use crate::{util, playfield};
22

3-
// enum for crash type
4-
// struct for crash params
5-
63
#[derive(Debug)]
74
struct Params {
85
cleared_lines: u8,
@@ -11,30 +8,48 @@ struct Params {
118
level: u8,
129
cycles: u8,
1310
clear_count: u8,
11+
nnb: u8,
1412
}
1513

1614
pub fn fuzz() {
1715
let mut emu = util::emulator(Some(util::OG_ROM));
1816

17+
for level in 155..160 {
18+
for transition in 0..=1 {
1919
for cleared_lines in 0..=4 {
20-
for pushdown in 0..1 {
20+
for pushdown in 0..=1 {
21+
for clear_count in 0..=1 {
22+
for nnb in 0..=1 {
23+
let level = if transition == 0 { level } else { level - 1 };
24+
let lines = if transition == 0 { get_lines(level) } else {
25+
let (hi, lo) = get_lines(level);
26+
if lo == 0 {
27+
(hi - 1, 0x99)
28+
} else {
29+
(hi, lo - 7)
30+
}
31+
};
32+
2133
let params = Params {
2234
cleared_lines,
23-
pushdown: if pushdown == 0 { 0 } else { 8 }, // 0 / 8
24-
level: 155,
25-
lines: get_lines(155),
26-
clear_count: 0,
35+
pushdown: if pushdown == 0 { 0 } else { 8 },
36+
level,
37+
lines,
38+
clear_count: if clear_count == 0 { 0 } else { 9 },
2739
cycles: 0,
40+
nnb,
2841
};
2942
let result = check(&mut emu, &params);
3043

3144
if result.is_some() {
32-
println!("crash @ {:?} {:?}", result.unwrap(), params);
33-
}
34-
45+
println!("*crash* tmp {:04x} {:?}", result.unwrap(), params);
3546
}
3647
}
3748
}
49+
}
50+
}
51+
}
52+
}
3853
}
3954

4055
fn get_lines(level: u8) -> (u8, u8) {
@@ -107,8 +122,6 @@ fn check(emu: &mut util::NesState, params: &Params) -> Option<u16> {
107122

108123
util::run_n_vblanks(emu, 1);
109124

110-
// playfield::clear(&mut emu);
111-
112125
playfield::set_str_addr(emu, 0x400, match params.cleared_lines {
113126
0 => "",
114127
1 => "##### ####",
@@ -129,6 +142,7 @@ fn check(emu: &mut util::NesState, params: &Params) -> Option<u16> {
129142
emu.memory.iram_raw[frame_counter] = 0;
130143
emu.memory.iram_raw[vrow] = 0;
131144
emu.memory.iram_raw[p1_vrow] = 0;
145+
emu.memory.iram_raw[nnb] = params.nnb;
132146
emu.memory.iram_raw[push_down] = params.pushdown;
133147
emu.memory.iram_raw[p1_push_down] = params.pushdown;
134148
emu.memory.iram_raw[clear_count] = params.clear_count;

0 commit comments

Comments
 (0)