diff --git a/src/apu/mod.rs b/src/apu/mod.rs index eb5d53f..3acfb11 100644 --- a/src/apu/mod.rs +++ b/src/apu/mod.rs @@ -16,7 +16,7 @@ pub struct Apu { struct Square { sample: u16, - duty_cycle: usize, + duty_cycle: u8, length_counter_halt: bool, // (this bit is also the envelope's loop flag) constant_volume_flag: bool, // (0: use volume from envelope; 1: use constant volume) timer: usize, @@ -49,6 +49,12 @@ struct DMC { sample: u16, } +struct Envelope { + start_flag: bool, + divider: usize, + delay_level_counter: usize, +} + impl Apu { fn new() -> Self { let square_table = (0..31).map(|x| 95.52/(8128.0 / x as f32) + 100.0).collect(); diff --git a/src/apu/square.rs b/src/apu/square.rs index 77b0572..79609d0 100644 --- a/src/apu/square.rs +++ b/src/apu/square.rs @@ -17,7 +17,8 @@ impl super::Square { } pub fn duty(&mut self, value: u8) { - + self.duty_cycle = value >> 6; + self.length_counter_halt = } pub fn sweep(&mut self, value: u8) {