apu
This commit is contained in:
parent
b128ad485e
commit
bf2317dc28
|
@ -17,6 +17,9 @@ impl DMC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn clock(&mut self) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
pub fn write_control(&mut self, value: u8) {
|
pub fn write_control(&mut self, value: u8) {
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,10 @@ pub struct Apu {
|
||||||
|
|
||||||
impl Apu {
|
impl Apu {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let square_table = (0..31).map(|x| 95.52/(8128.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();
|
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 {
|
Apu {
|
||||||
square1: Square::new(false),
|
square1: Square::new(false),
|
||||||
square2: Square::new(true),
|
square2: Square::new(true),
|
||||||
|
@ -82,6 +84,12 @@ impl Apu {
|
||||||
pub fn clock(&mut self) -> Option<f32> {
|
pub fn clock(&mut self) -> Option<f32> {
|
||||||
let mut sample = None;
|
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))
|
if (self.frame_counter == 4 && FRAME_COUNTER_STEPS[..4].contains(&self.cycle))
|
||||||
|| (self.frame_counter == 5 && FRAME_COUNTER_STEPS.contains(&self.cycle)) {
|
|| (self.frame_counter == 5 && FRAME_COUNTER_STEPS.contains(&self.cycle)) {
|
||||||
self.clock_frame_counter();
|
self.clock_frame_counter();
|
||||||
|
|
|
@ -83,6 +83,7 @@ impl Square {
|
||||||
} else {
|
} else {
|
||||||
self.decay_counter
|
self.decay_counter
|
||||||
};
|
};
|
||||||
|
println!("{}", self.sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn clock_envelope(&mut self) {
|
pub fn clock_envelope(&mut self) {
|
||||||
|
|
|
@ -32,6 +32,10 @@ impl Triangle {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn clock(&mut self) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
pub fn clock_linear_counter(&mut self) {
|
pub fn clock_linear_counter(&mut self) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
10
src/main.rs
10
src/main.rs
|
@ -68,12 +68,18 @@ fn main() -> Result<(), String> {
|
||||||
}
|
}
|
||||||
for _ in 0..apu_cycles {
|
for _ in 0..apu_cycles {
|
||||||
match cpu.apu.clock() {
|
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 => (),
|
None => (),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if audio_buffer.len() == 44_100 {
|
if audio_buffer.len() == 44_100 {
|
||||||
println!("queueing: {:?}", &audio_buffer[..32]);
|
// println!("queueing: {:?}", &audio_buffer[..32]);
|
||||||
audio_device.queue(&audio_buffer);
|
audio_device.queue(&audio_buffer);
|
||||||
audio_buffer = vec![];
|
audio_buffer = vec![];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue