@@ -11,12 +11,16 @@ pub fn emulator(rom: Option<&[u8]>) -> NesState {
11
11
emu
12
12
}
13
13
14
- pub fn run_to_return ( emu : & mut NesState ) {
14
+ pub fn run_to_return ( emu : & mut NesState , print : bool ) {
15
15
opcodes:: push ( emu, 0 ) ;
16
16
opcodes:: push ( emu, 0 ) ;
17
17
18
18
loop {
19
- print_step ( emu) ;
19
+ if print {
20
+ print_step ( emu) ;
21
+ } else {
22
+ emu. step ( ) ;
23
+ }
20
24
21
25
if emu. registers . pc < 3 {
22
26
break ;
@@ -35,3 +39,26 @@ pub fn print_step(emu: &mut NesState) {
35
39
36
40
println ! ( "{}" , opcode_info:: disassemble_instruction( emu. cpu. opcode, 0 , 0 ) . 0 ) ;
37
41
}
42
+
43
+ pub fn set_score ( emu : & mut NesState , score : u32 ) {
44
+ let score_addr = labels:: get ( ".score" ) ;
45
+ let binscore_addr = labels:: get ( ".binScore" ) ;
46
+ let bcd_str = format ! ( "{:06}" , score) ;
47
+ let bcd_a = i64:: from_str_radix ( & bcd_str[ 0 ..2 ] , 16 ) . unwrap ( ) ;
48
+ let bcd_b = i64:: from_str_radix ( & bcd_str[ 2 ..4 ] , 16 ) . unwrap ( ) ;
49
+ let bcd_c = i64:: from_str_radix ( & bcd_str[ 4 ..6 ] , 16 ) . unwrap ( ) ;
50
+
51
+ emu. memory . iram_raw [ ( score_addr + 2 ) as usize ] = bcd_a as u8 ;
52
+ emu. memory . iram_raw [ ( score_addr + 1 ) as usize ] = bcd_b as u8 ;
53
+ emu. memory . iram_raw [ score_addr as usize ] = bcd_c as u8 ;
54
+ emu. memory . iram_raw [ binscore_addr as usize ] = score as u8 ;
55
+ emu. memory . iram_raw [ ( binscore_addr + 1 ) as usize ] = ( score >> 8 ) as u8 ;
56
+ emu. memory . iram_raw [ ( binscore_addr + 2 ) as usize ] = ( score >> 16 ) as u8 ;
57
+ }
58
+
59
+ pub fn get_score ( emu : & mut NesState ) -> u32 {
60
+ let binscore_addr = labels:: get ( ".binScore" ) ;
61
+ emu. memory . iram_raw [ binscore_addr as usize ] as u32
62
+ + ( ( emu. memory . iram_raw [ ( binscore_addr + 1 ) as usize ] as u32 ) << 8 )
63
+ + ( ( emu. memory . iram_raw [ ( binscore_addr + 2 ) as usize ] as u32 ) << 16 )
64
+ }
0 commit comments