Compare commits
	
		
			2 Commits
		
	
	
		
			d794a94b68
			...
			01064bab69
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 01064bab69 | |||
| 634bc2d2c0 | 
							
								
								
									
										10
									
								
								src/cpu.rs
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/cpu.rs
									
									
									
									
									
								
							@@ -146,11 +146,11 @@ impl Cpu {
 | 
			
		||||
        self.handle_ei();
 | 
			
		||||
 | 
			
		||||
        // For use in Blargg's Test ROMs
 | 
			
		||||
        if self.read_byte(0xFF02) == 0x81 {
 | 
			
		||||
            let c = self.read_byte(0xFF01) as char;
 | 
			
		||||
            self.write_byte(0xFF02, 0x00);
 | 
			
		||||
            eprint!("{}", c);
 | 
			
		||||
        }
 | 
			
		||||
        // if self.read_byte(0xFF02) == 0x81 {
 | 
			
		||||
        //     let c = self.read_byte(0xFF01) as char;
 | 
			
		||||
        //     self.write_byte(0xFF02, 0x00);
 | 
			
		||||
        //     eprint!("{}", c);
 | 
			
		||||
        // }
 | 
			
		||||
 | 
			
		||||
        elapsed
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								src/timer.rs
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								src/timer.rs
									
									
									
									
									
								
							@@ -22,29 +22,16 @@ impl Timer {
 | 
			
		||||
        use TimerSpeed::*;
 | 
			
		||||
 | 
			
		||||
        match self.state {
 | 
			
		||||
            TIMAOverflow(_) | AbortedTIMAOverflow(_) => self.state = self.state.next(),
 | 
			
		||||
            TIMAOverflow(_) | AbortedTIMAOverflow(_) => self.next(),
 | 
			
		||||
            LoadTMA => {
 | 
			
		||||
                self.counter = self.modulo;
 | 
			
		||||
                self.interrupt = true;
 | 
			
		||||
 | 
			
		||||
                self.state.next();
 | 
			
		||||
                self.next();
 | 
			
		||||
            }
 | 
			
		||||
            Normal => {}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if let TIMAOverflow(step) | AbortedTIMAOverflow(step) = self.state {
 | 
			
		||||
            if step < 3 {
 | 
			
		||||
                self.state = self.state.next();
 | 
			
		||||
            } else {
 | 
			
		||||
                if self.state == TIMAOverflow(step) {
 | 
			
		||||
                    self.counter = self.modulo;
 | 
			
		||||
                    self.interrupt = true;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                self.state = Normal;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        self.divider = self.divider.wrapping_add(1);
 | 
			
		||||
 | 
			
		||||
        // Get Bit Position
 | 
			
		||||
@@ -103,6 +90,18 @@ impl Timer {
 | 
			
		||||
            self.state = State::TIMAOverflow(0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn next(&mut self) {
 | 
			
		||||
        use State::*;
 | 
			
		||||
 | 
			
		||||
        self.state = match self.state {
 | 
			
		||||
            Normal | LoadTMA => Normal,
 | 
			
		||||
            AbortedTIMAOverflow(4) => Normal,
 | 
			
		||||
            TIMAOverflow(4) => LoadTMA,
 | 
			
		||||
            AbortedTIMAOverflow(step) => AbortedTIMAOverflow(step + 1),
 | 
			
		||||
            TIMAOverflow(step) => TIMAOverflow(step + 1),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for Timer {
 | 
			
		||||
@@ -184,17 +183,3 @@ enum State {
 | 
			
		||||
    Normal,
 | 
			
		||||
    LoadTMA,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl State {
 | 
			
		||||
    fn next(&self) -> Self {
 | 
			
		||||
        use State::*;
 | 
			
		||||
 | 
			
		||||
        match self {
 | 
			
		||||
            Normal | LoadTMA => Normal,
 | 
			
		||||
            TIMAOverflow(3) => LoadTMA,
 | 
			
		||||
            AbortedTIMAOverflow(3) => Normal,
 | 
			
		||||
            TIMAOverflow(step) => TIMAOverflow(step + 1),
 | 
			
		||||
            AbortedTIMAOverflow(step) => AbortedTIMAOverflow(step + 1),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user