Skip to content

Commit de86379

Browse files
committed
make noise channel actually use the proper period
1 parent 5198268 commit de86379

1 file changed

Lines changed: 14 additions & 11 deletions

File tree

emu/src/apu/channels.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ impl NoiseChannel {
191191

192192
pub fn write_reg2(&mut self, data: u8) {
193193
self.mode = data & 0b1000_0000 != 0;
194-
self.timer.reload = NOISE_PERIOD_LOOKUP[(data & 0x0F) as usize];
194+
self.timer.reload = NOISE_PERIOD_LOOKUP[(data & 0b0000_1111) as usize];
195+
self.timer.force_reload();
195196
}
196197

197198
pub fn write_reg3(&mut self, data: u8) {
@@ -204,17 +205,19 @@ impl NoiseChannel {
204205
}
205206

206207
pub fn clock(&mut self) {
207-
let bit0 = (self.shift_register & 0x01).into_bit();
208-
let other_bit = if self.mode {
209-
self.shift_register & 0x0040
210-
} else {
211-
self.shift_register & 0x0002
212-
}
213-
.into_bit();
208+
if self.timer.clock() {
209+
let bit0 = (self.shift_register & 0x01).into_bit();
210+
let other_bit = if self.mode {
211+
self.shift_register & 0x0040
212+
} else {
213+
self.shift_register & 0x0002
214+
}
215+
.into_bit();
214216

215-
let feedback = (bit0 ^ other_bit) as u16;
216-
self.shift_register >>= 1;
217-
self.shift_register |= feedback << 14;
217+
let feedback = (bit0 ^ other_bit) as u16;
218+
self.shift_register >>= 1;
219+
self.shift_register |= feedback << 14;
220+
}
218221
}
219222
}
220223

0 commit comments

Comments
 (0)