fix(apu): ch4 set_len should set timer to 64 - len
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Rekai Nyangadzayi Musuka 2021-08-18 02:32:48 -05:00
parent f92b9d61ef
commit 4658a0d106
1 changed files with 17 additions and 9 deletions

View File

@ -509,8 +509,10 @@ impl Channel1 {
} }
fn amplitude(&self) -> f32 { fn amplitude(&self) -> f32 {
if self.is_dac_enabled() && self.enabled { if self.is_dac_enabled() {
let input = self.duty.wave_pattern().amplitude(self.duty_pos) * self.current_volume; let sample = self.duty.wave_pattern().amplitude(self.duty_pos) * self.current_volume;
let input = if self.enabled { sample } else { 0 };
(input as f32 / 7.5) - 1.0 (input as f32 / 7.5) - 1.0
} else { } else {
0.0 0.0
@ -631,8 +633,10 @@ impl Channel2 {
} }
fn amplitude(&self) -> f32 { fn amplitude(&self) -> f32 {
if self.is_dac_enabled() && self.enabled { if self.is_dac_enabled() {
let input = self.duty.wave_pattern().amplitude(self.duty_pos) * self.current_volume; let sample = self.duty.wave_pattern().amplitude(self.duty_pos) * self.current_volume;
let input = if self.enabled { sample } else { 0 };
(input as f32 / 7.5) - 1.0 (input as f32 / 7.5) - 1.0
} else { } else {
0.0 0.0
@ -780,8 +784,10 @@ impl Channel3 {
} }
fn amplitude(&self) -> f32 { fn amplitude(&self) -> f32 {
if self.dac_enabled && self.enabled { if self.dac_enabled {
let input = self.read_sample(self.offset) >> self.volume.shift_count(); let sample = self.read_sample(self.offset) >> self.volume.shift_count();
let input = if self.enabled { sample } else { 0 };
(input as f32 / 7.5) - 1.0 (input as f32 / 7.5) - 1.0
} else { } else {
0.0 0.0
@ -835,7 +841,7 @@ impl Channel4 {
/// 0xFF20 | NR41 - Channel 4 Sound Length /// 0xFF20 | NR41 - Channel 4 Sound Length
pub(crate) fn set_len(&mut self, byte: u8) { pub(crate) fn set_len(&mut self, byte: u8) {
self.len = byte & 0x3F; self.len = byte & 0x3F;
self.length_timer = 256 - self.len as u16; self.length_timer = 64 - self.len as u16;
} }
/// 0xFF21 | NR42 - Channel 4 Volume Envelope /// 0xFF21 | NR42 - Channel 4 Volume Envelope
@ -909,8 +915,10 @@ impl Channel4 {
} }
fn amplitude(&self) -> f32 { fn amplitude(&self) -> f32 {
if self.is_dac_enabled() && self.enabled { if self.is_dac_enabled() {
let input = (!self.lf_shift & 0x01) as u8 * self.current_volume; let sample = (!self.lf_shift & 0x01) as u8 * self.current_volume;
let input = if self.enabled { sample } else { 0 };
(input as f32 / 7.5) - 1.0 (input as f32 / 7.5) - 1.0
} else { } else {
0.0 0.0