#[derive(Clone, Copy, Debug)]
pub struct Psg {
channel_select: u8,
main_volume: u8,
registers: [[u8; 8]; 6],
}
impl Default for Psg {
fn default() -> Self {
Self::new()
}
}
impl Psg {
#[must_use]
pub const fn new() -> Self {
Self {
channel_select: 0,
main_volume: 0,
registers: [[0; 8]; 6],
}
}
pub const fn write(&mut self, offset: u16, value: u8) {
match offset & 0x0F {
0x00 => self.channel_select = value & 0x07,
0x01 => self.main_volume = value,
reg => {
let ch = self.channel_select as usize;
if ch < self.registers.len() {
self.registers[ch][(reg as usize - 2) & 0x07] = value;
}
}
}
}
#[must_use]
pub const fn read(&self, _offset: u16) -> u8 {
0xFF
}
}