@@ -107,6 +107,7 @@ impl Vm {
107
107
{
108
108
let mut ram = BufWriter :: new ( & mut vm. ram [ FONT_ADDR ..( FONT_ADDR + FONT_BYTES ) ] ) ;
109
109
ram. write_all ( FONT . as_slice ( ) ) . unwrap ( ) ;
110
+ debug ! ( "Initialized VM with built-in font" ) ;
110
111
}
111
112
vm
112
113
}
@@ -115,13 +116,16 @@ impl Vm {
115
116
pub fn load_rom ( & mut self , reader : & mut Read ) -> Result < usize , Chip8Error > {
116
117
let mut rom = Vec :: new ( ) ;
117
118
try!( reader. read_to_end ( & mut rom) ) ;
118
- if rom. len ( ) > ( RAM_SIZE - PROGRAM_START ) {
119
- println ! ( "Rom size {}" , rom. len( ) ) ;
119
+ let rom_len = rom. len ( ) ;
120
+ let available_ram = RAM_SIZE - PROGRAM_START ;
121
+ if rom_len > available_ram {
122
+ error ! ( "ROM size ({}) is larger than available RAM ({})!" , rom_len, available_ram) ;
120
123
return Err ( Chip8Error :: Io ( "ROM was larger than available RAM" , None ) )
121
124
}
122
125
let mut ram = BufWriter :: new ( & mut self . ram [ PROGRAM_START ..RAM_SIZE ] ) ;
123
126
try!( ram. write_all ( rom. as_slice ( ) ) ) ;
124
- return Ok ( rom. len ( ) ) ;
127
+ debug ! ( "Loaded ROM of size {}" , rom_len) ;
128
+ return Ok ( rom_len) ;
125
129
}
126
130
127
131
#[ allow( dead_code) ]
@@ -136,15 +140,18 @@ impl Vm {
136
140
137
141
/// Marks the key with index `idx` as being set
138
142
pub fn set_key ( & mut self , idx : u8 ) {
143
+ debug ! ( "Set key {}" , idx) ;
139
144
self . keys [ idx as usize ] = 1 ;
140
145
if let Some ( vx) = self . waiting_on_key {
146
+ debug ! ( "No longer waiting on key" ) ;
141
147
self . reg [ vx as usize ] = idx;
142
148
self . waiting_on_key = None ;
143
149
}
144
150
}
145
151
146
152
/// Marks they key with index `idx` as being unset
147
153
pub fn unset_key ( & mut self , idx : u8 ) {
154
+ debug ! ( "Unset key {}" , idx) ;
148
155
self . keys [ idx as usize ] = 0 ;
149
156
}
150
157
@@ -347,7 +354,7 @@ impl Vm {
347
354
self . i += vx+1 ;
348
355
} ,
349
356
ref other => {
350
- println ! ( "Instruction not implemented {:?} skipping..." , other)
357
+ debug ! ( "Instruction not implemented {:?} skipping..." , other)
351
358
}
352
359
}
353
360
return false ;
@@ -378,9 +385,11 @@ impl Vm {
378
385
let sub_steps = ( CLOCK_HZ * dt) . round ( ) as usize ;
379
386
let ddt = dt / sub_steps as f32 ;
380
387
381
- for _ in 0 ..sub_steps {
388
+ for step in 0 ..sub_steps {
389
+ trace ! ( "Executing step {}/{}" , step, sub_steps) ;
382
390
self . time_step ( ddt) ;
383
391
if self . waiting_on_key . is_some ( ) {
392
+ debug ! ( "Cancel remaining execution steps while waiting for key" ) ;
384
393
return ;
385
394
}
386
395
0 commit comments