11use crate :: { util, playfield} ;
22
3- // enum for crash type
4- // struct for crash params
5-
63#[ derive( Debug ) ]
74struct 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
1614pub 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
4055fn 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