fix(apu): resolve off-by-one error
This commit is contained in:
parent
22f96a10e7
commit
5d64e539a7
|
@ -101,8 +101,6 @@ impl Apu {
|
||||||
if self.falling_edge(12, div) {
|
if self.falling_edge(12, div) {
|
||||||
use FrameSequencerState::*;
|
use FrameSequencerState::*;
|
||||||
|
|
||||||
self.sequencer.next();
|
|
||||||
|
|
||||||
match self.sequencer.state() {
|
match self.sequencer.state() {
|
||||||
Length => self.handle_length(),
|
Length => self.handle_length(),
|
||||||
LengthAndSweep => {
|
LengthAndSweep => {
|
||||||
|
@ -112,6 +110,8 @@ impl Apu {
|
||||||
Envelope => self.handle_envelope(),
|
Envelope => self.handle_envelope(),
|
||||||
Nothing => {}
|
Nothing => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.sequencer.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.div_prev = Some(div);
|
self.div_prev = Some(div);
|
||||||
|
|
|
@ -531,13 +531,9 @@ pub(super) mod fs {
|
||||||
|
|
||||||
self.step = (self.step + 1) % 8;
|
self.step = (self.step + 1) % 8;
|
||||||
self.state = match self.step {
|
self.state = match self.step {
|
||||||
0 => Length,
|
1 | 3 | 5 => Nothing,
|
||||||
1 => Nothing,
|
0 | 4 => Length,
|
||||||
2 => LengthAndSweep,
|
2 | 6 => LengthAndSweep,
|
||||||
3 => Nothing,
|
|
||||||
4 => Length,
|
|
||||||
5 => Nothing,
|
|
||||||
6 => LengthAndSweep,
|
|
||||||
7 => Envelope,
|
7 => Envelope,
|
||||||
_ => unreachable!("Step {} is invalid for the Frame Sequencer", self.step),
|
_ => unreachable!("Step {} is invalid for the Frame Sequencer", self.step),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue