1
1
use crate :: { util, playfield} ;
2
2
3
- // enum for crash type
4
- // struct for crash params
5
-
6
3
#[ derive( Debug ) ]
7
4
struct Params {
8
5
cleared_lines : u8 ,
@@ -11,30 +8,48 @@ struct Params {
11
8
level : u8 ,
12
9
cycles : u8 ,
13
10
clear_count : u8 ,
11
+ nnb : u8 ,
14
12
}
15
13
16
14
pub fn fuzz ( ) {
17
15
let mut emu = util:: emulator ( Some ( util:: OG_ROM ) ) ;
18
16
17
+ for level in 155 ..160 {
18
+ for transition in 0 ..=1 {
19
19
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
+
21
33
let params = Params {
22
34
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 } ,
27
39
cycles : 0 ,
40
+ nnb,
28
41
} ;
29
42
let result = check ( & mut emu, & params) ;
30
43
31
44
if result. is_some ( ) {
32
- println ! ( "crash @ {:?} {:?}" , result. unwrap( ) , params) ;
33
- }
34
-
45
+ println ! ( "*crash* tmp {:04x} {:?}" , result. unwrap( ) , params) ;
35
46
}
36
47
}
37
48
}
49
+ }
50
+ }
51
+ }
52
+ }
38
53
}
39
54
40
55
fn get_lines ( level : u8 ) -> ( u8 , u8 ) {
@@ -107,8 +122,6 @@ fn check(emu: &mut util::NesState, params: &Params) -> Option<u16> {
107
122
108
123
util:: run_n_vblanks ( emu, 1 ) ;
109
124
110
- // playfield::clear(&mut emu);
111
-
112
125
playfield:: set_str_addr ( emu, 0x400 , match params. cleared_lines {
113
126
0 => "" ,
114
127
1 => "##### ####" ,
@@ -129,6 +142,7 @@ fn check(emu: &mut util::NesState, params: &Params) -> Option<u16> {
129
142
emu. memory . iram_raw [ frame_counter] = 0 ;
130
143
emu. memory . iram_raw [ vrow] = 0 ;
131
144
emu. memory . iram_raw [ p1_vrow] = 0 ;
145
+ emu. memory . iram_raw [ nnb] = params. nnb ;
132
146
emu. memory . iram_raw [ push_down] = params. pushdown ;
133
147
emu. memory . iram_raw [ p1_push_down] = params. pushdown ;
134
148
emu. memory . iram_raw [ clear_count] = params. clear_count ;
0 commit comments