From 0f188280727c4e204b11fbcc241be54d49136b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Mon, 27 Feb 2023 15:52:43 +0000 Subject: [PATCH] feat: rudimentary CH1 sound support There's still a lot of work needed. --- src/apu.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/apu.rs b/src/apu.rs index 349232a7..0e1b92ef 100644 --- a/src/apu.rs +++ b/src/apu.rs @@ -146,9 +146,27 @@ impl Apu { #[inline(always)] pub fn cycle(&mut self, freq: u32) { + self.ch1_timer = self.ch1_timer.saturating_sub(1); + if self.ch1_timer == 0 { + let target_freq = 1048576.0 / (2048.0 - self.ch1_wave_length as f32); + self.ch1_timer = (freq as f32 / target_freq) as u16; + self.ch1_sequence = (self.ch1_sequence + 1) & 7; + + if self.ch1_enabled { + self.ch1_output = + if DUTY_TABLE[self.ch1_wave_duty as usize][self.ch1_sequence as usize] == 1 { + self.ch1_volume + } else { + 0 + }; + } else { + self.ch1_output = 0; + } + } + self.ch2_timer = self.ch2_timer.saturating_sub(1); if self.ch2_timer == 0 { - let target_freq = 1048576.0 / (2048.0 - self.ch1_wave_length as f32); + let target_freq = 1048576.0 / (2048.0 - self.ch2_wave_length as f32); self.ch2_timer = (freq as f32 / target_freq) as u16; self.ch2_sequence = (self.ch2_sequence + 1) & 7; @@ -166,6 +184,6 @@ impl Apu { } pub fn output(&self) -> u8 { - self.ch2_output + self.ch1_output + self.ch2_output } } -- GitLab