diff --git a/src/apu/dmc.rs b/src/apu/dmc.rs index e344902..b700064 100644 --- a/src/apu/dmc.rs +++ b/src/apu/dmc.rs @@ -1,7 +1,24 @@ impl super::DMC { pub fn new() -> Self { super::DMC { - + sample: 0, } } + + + pub fn control(&mut self, value: u8) { + + } + + pub fn direct_load(&mut self, value: u8) { + + } + + pub fn sample_address(&mut self, value: u8) { + + } + + pub fn sample_length(&mut self, value: u8) { + + } } \ No newline at end of file diff --git a/src/apu/mod.rs b/src/apu/mod.rs index 3d21862..eb5d53f 100644 --- a/src/apu/mod.rs +++ b/src/apu/mod.rs @@ -46,7 +46,7 @@ struct Noise { } struct DMC { - + sample: u16, } impl Apu { @@ -91,16 +91,21 @@ impl Apu { 0x4015 => self.control(value), 0x4016 => (), 0x4017 => self.frame_counter(value), + _ => panic!("bad address written: 0x{:X}", address), } } fn mix(&self) -> f32 { - let square_out = self.square_table[self.square1.sample + self.square2.sample as usize]; - let tnd_out = self.tnd_table[(3*self.triangle.sample)+(2*self.noise.sample)+self.dmc.sample as usize]; + let square_out = self.square_table[(self.square1.sample + self.square2.sample) as usize]; + let tnd_out = self.tnd_table[((3*self.triangle.sample)+(2*self.noise.sample) + self.dmc.sample) as usize]; square_out + tnd_out } - fn frame_counter(value: u8) { + fn frame_counter(&mut self, value: u8) { } + + fn control(&mut self, value: u8) { + + } } diff --git a/src/apu/noise.rs b/src/apu/noise.rs index 93b66b3..59b4e4d 100644 --- a/src/apu/noise.rs +++ b/src/apu/noise.rs @@ -19,6 +19,17 @@ impl super::Noise { self.linear_feedback_sr >>= 1; self.linear_feedback_sr |= feedback << 14; } + + pub fn envelope(&mut self, value: u8) { + + } + + pub fn loop_noise(&mut self, value: u8) { + + } + pub fn load_length_counter(&mut self, value: u8) { + + } } // When the timer clocks the shift register, the following actions occur in order: diff --git a/src/apu/square.rs b/src/apu/square.rs index fe6fbf2..77b0572 100644 --- a/src/apu/square.rs +++ b/src/apu/square.rs @@ -8,6 +8,27 @@ impl super::Square { length_counter: 0, envelope: 0, sweep: 0, + sample: 0, } } + + pub fn clock(&mut self) { + + } + + pub fn duty(&mut self, value: u8) { + + } + + pub fn sweep(&mut self, value: u8) { + + } + + pub fn timer_low(&mut self, value: u8) { + + } + + pub fn timer_high(&mut self, value: u8) { + + } } \ No newline at end of file diff --git a/src/apu/triangle.rs b/src/apu/triangle.rs index 15b50c2..202f21c 100644 --- a/src/apu/triangle.rs +++ b/src/apu/triangle.rs @@ -6,4 +6,16 @@ impl super::Triangle { linear_counter: 0, } } + + pub fn timer_low(&mut self, value: u8) { + + } + + pub fn timer_high(&mut self, value: u8) { + + } + + pub fn counter(&mut self, value: u8) { + + } } \ No newline at end of file