diff --git a/agb/src/sound/mixer/sw_mixer.rs b/agb/src/sound/mixer/sw_mixer.rs index fd28e4b..5604672 100644 --- a/agb/src/sound/mixer/sw_mixer.rs +++ b/agb/src/sound/mixer/sw_mixer.rs @@ -8,7 +8,7 @@ use super::{SoundChannel, SoundPriority}; use crate::{ fixnum::Num, interrupt::free, - interrupt::{add_interrupt_handler, Interrupt, InterruptHandler}, + interrupt::{add_interrupt_handler, InterruptHandler}, timer::Divider, timer::Timer, }; @@ -63,13 +63,14 @@ impl Mixer { /// You are still required to call `frame` pub fn setup_interrupt_handler(&self) -> InterruptHandler<'_> { let mut timer1 = unsafe { Timer::new(1) }; - timer1.set_cascade(true); - timer1.set_divider(Divider::Divider1); - timer1.set_interrupt(true); - timer1.set_overflow_amount(constants::SOUND_BUFFER_SIZE as u16); - timer1.set_enabled(true); + timer1 + .set_cascade(true) + .set_divider(Divider::Divider1) + .set_interrupt(true) + .set_overflow_amount(constants::SOUND_BUFFER_SIZE as u16) + .set_enabled(true); - add_interrupt_handler(Interrupt::Timer1, move |cs| self.buffer.swap(cs)) + add_interrupt_handler(timer1.interrupt(), move |cs| self.buffer.swap(cs)) } pub fn frame(&mut self) { diff --git a/agb/src/timer.rs b/agb/src/timer.rs index f9ed9c5..6fb1a9d 100644 --- a/agb/src/timer.rs +++ b/agb/src/timer.rs @@ -62,32 +62,37 @@ impl Timer { new_timer } - pub fn set_overflow_amount(&mut self, n: u16) { + pub fn set_overflow_amount(&mut self, n: u16) -> &mut Self { let count_up_value = 0u16.wrapping_sub(n); self.data_register().set(count_up_value); + self } pub fn value(&self) -> u16 { self.data_register().get() } - pub fn set_divider(&mut self, divider: Divider) { + pub fn set_divider(&mut self, divider: Divider) -> &mut Self { self.control_register().set_bits(divider.as_bits(), 2, 0); + self } - pub fn set_enabled(&mut self, enabled: bool) { + pub fn set_enabled(&mut self, enabled: bool) -> &mut Self { let bit = if enabled { 1 } else { 0 }; self.control_register().set_bits(bit, 1, 7); + self } - pub fn set_cascade(&mut self, cascade: bool) { + pub fn set_cascade(&mut self, cascade: bool) -> &mut Self { let bit = if cascade { 1 } else { 0 }; self.control_register().set_bits(bit, 1, 2); + self } - pub fn set_interrupt(&mut self, interrupt: bool) { + pub fn set_interrupt(&mut self, interrupt: bool) -> &mut Self { let bit = interrupt as u16; self.control_register().set_bits(bit, 1, 6); + self } fn data_register(&self) -> MemoryMapped {