From bf2317dc28b77ef291c685b5acaf254424e370fb Mon Sep 17 00:00:00 2001 From: Theron Date: Wed, 25 Dec 2019 21:51:54 -0600 Subject: [PATCH] apu --- src/apu/dmc.rs | 3 +++ src/apu/mod.rs | 12 ++++++++++-- src/apu/square.rs | 1 + src/apu/triangle.rs | 4 ++++ src/main.rs | 10 ++++++++-- 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/apu/dmc.rs b/src/apu/dmc.rs index efcee9d..a181f7f 100644 --- a/src/apu/dmc.rs +++ b/src/apu/dmc.rs @@ -17,6 +17,9 @@ impl DMC { } } + pub fn clock(&mut self) { + + } pub fn write_control(&mut self, value: u8) { diff --git a/src/apu/mod.rs b/src/apu/mod.rs index 38f24ff..0332dd5 100644 --- a/src/apu/mod.rs +++ b/src/apu/mod.rs @@ -57,8 +57,10 @@ pub struct Apu { impl Apu { pub fn new() -> Self { - let square_table = (0..31).map(|x| 95.52/(8128.0 / x as f32) + 100.0).collect(); - let tnd_table = (0..203).map(|x| 163.67/(24329.0 / x as f32) + 100.0).collect(); + let square_table = (0..31).map(|x| 95.52/((8128.0 / x as f32) + 100.0)).collect(); + let tnd_table = (0..203).map(|x| 163.67/((24329.0 / x as f32) + 100.0)).collect(); + println!("square_table: {:?}", square_table); + println!("tnd_table: {:?}", tnd_table); Apu { square1: Square::new(false), square2: Square::new(true), @@ -82,6 +84,12 @@ impl Apu { pub fn clock(&mut self) -> Option { let mut sample = None; + self.square1.clock(); + self.square2.clock(); + self.triangle.clock(); + self.noise.clock(); + self.dmc.clock(); + if (self.frame_counter == 4 && FRAME_COUNTER_STEPS[..4].contains(&self.cycle)) || (self.frame_counter == 5 && FRAME_COUNTER_STEPS.contains(&self.cycle)) { self.clock_frame_counter(); diff --git a/src/apu/square.rs b/src/apu/square.rs index a67ed6c..0063ce0 100644 --- a/src/apu/square.rs +++ b/src/apu/square.rs @@ -83,6 +83,7 @@ impl Square { } else { self.decay_counter }; + println!("{}", self.sample); } pub fn clock_envelope(&mut self) { diff --git a/src/apu/triangle.rs b/src/apu/triangle.rs index e267b21..a245772 100644 --- a/src/apu/triangle.rs +++ b/src/apu/triangle.rs @@ -32,6 +32,10 @@ impl Triangle { } + pub fn clock(&mut self) { + + } + pub fn clock_linear_counter(&mut self) { } diff --git a/src/main.rs b/src/main.rs index ca98a16..a70b7e8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,12 +68,18 @@ fn main() -> Result<(), String> { } for _ in 0..apu_cycles { match cpu.apu.clock() { - Some(sample) => {sps += 1; audio_buffer.push(sample)}, + Some(sample) => { + sps += 1; + // if sample != 0.0 { + // println!("sample {}", sample); + // } + audio_buffer.push(sample) + }, None => (), }; } if audio_buffer.len() == 44_100 { - println!("queueing: {:?}", &audio_buffer[..32]); + // println!("queueing: {:?}", &audio_buffer[..32]); audio_device.queue(&audio_buffer); audio_buffer = vec![]; }