@@ -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