hopefully a positive breakthrough. was skipping reset of apu cycles and thus missing frame counter clocks when frame counter had been switched to 4-mode but current cycle was already beyond 14915.
This commit is contained in:
parent
73b0a28034
commit
42b3544648
|
@ -77,8 +77,9 @@ impl Apu {
|
||||||
self.noise.clock();
|
self.noise.clock();
|
||||||
self.dmc.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)) {
|
||||||
|
if FRAME_COUNTER_STEPS.contains(&self.cycle) {
|
||||||
self.clock_frame_counter();
|
self.clock_frame_counter();
|
||||||
}
|
}
|
||||||
if self.remainder > CYCLES_PER_SAMPLE {
|
if self.remainder > CYCLES_PER_SAMPLE {
|
||||||
|
@ -89,8 +90,7 @@ impl Apu {
|
||||||
self.remainder += 1.0;
|
self.remainder += 1.0;
|
||||||
|
|
||||||
self.cycle += 1;
|
self.cycle += 1;
|
||||||
if (self.frame_counter == 4 && self.cycle == 14915)
|
if (self.frame_counter == 4 && self.cycle == 14915) || self.cycle == 18641 {
|
||||||
|| (self.frame_counter == 5 && self.cycle == 18641) {
|
|
||||||
self.cycle = 0;
|
self.cycle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,6 +267,7 @@ impl Apu {
|
||||||
self.triangle.clock_length_counter();
|
self.triangle.clock_length_counter();
|
||||||
self.noise.clock_envelope();
|
self.noise.clock_envelope();
|
||||||
self.noise.clock_length_counter();
|
self.noise.clock_length_counter();
|
||||||
|
self.clock_frame_counter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,8 @@ fn main() -> Result<(), String> {
|
||||||
match cpu.apu.clock() {
|
match cpu.apu.clock() {
|
||||||
Some(sample) => {
|
Some(sample) => {
|
||||||
sps += 1;
|
sps += 1;
|
||||||
if sps < 44_100 {audio_device.queue(&vec![sample]);}
|
if sps < 44_100 {audio_device.queue(&vec![sample]);} // TODO: fix this
|
||||||
|
// audio_device.queue(&vec![sample]);
|
||||||
},
|
},
|
||||||
None => (),
|
None => (),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue