use crate::Bus;
#[derive(Debug, Clone)]
pub struct Bank<'a> {
bus: &'a Bus,
memory_offset: u16,
timer_setup: u16,
}
impl<'a> Bank<'a> {
pub fn new(bus: &Bus) -> Bank {
Bank {
bus,
memory_offset: 0x0,
timer_setup: 0x0,
}
}
pub fn set_period(&self, period: u16) {
self.bus_write(self.memory_offset + 1, period);
}
pub fn set_duty(&self, duty: u16) {
self.bus_write(self.memory_offset + 2, duty);
}
fn bus_write(&self, memory_offset: u16, timer_setup: u16) {
let mut buffer: [u32; 3] = [0; 3];
buffer[0] = (memory_offset) as u32; buffer[1] = 2; buffer[2] = timer_setup as u32;
self.bus
.write(unsafe { std::mem::transmute::<&mut [u32], &mut [u8]>(&mut buffer) });
}
}