diff --git a/src/gbc/timer.rs b/src/gbc/timer.rs index 2de422b..910f199 100644 --- a/src/gbc/timer.rs +++ b/src/gbc/timer.rs @@ -69,20 +69,15 @@ impl Timer { } fn flush_tima(&mut self, cycle_count: u32) -> bool { - self.tima_cycles = self.tima_cycles + cycle_count; - - let cycles = self.tima_cycles; + let tima_cycles = self.tima_cycles + cycle_count; let rate = CLOCKS[self.clock_select as usize]; + let ticks = tima_cycles / rate; - let tick = cycles >= rate; - - if tick { - self.tima_cycles = cycles - rate; - } + self.tima_cycles = tima_cycles - rate * ticks; - if self.enabled && tick { - let (tima, overflow) = self.tima.overflowing_add(1); - self.tima = if overflow { self.tma } else { tima }; + if self.enabled { + let (tima, overflow) = self.tima.overflowing_add(ticks as u8); + self.tima = if overflow { self.tma.wrapping_add(tima) } else { tima }; overflow } else { false