pub struct NoiseGenerator {
period: u8,
counter: u8,
value: u32
}
impl NoiseGenerator {
pub(crate) fn new() -> Self {
Self {
period: 1,
counter: 0,
value: 0x4001
}
}
pub(crate) fn render(&mut self) -> u8 {
self.counter += 1;
if self.counter >= (self.period << 1) {
self.counter = 0;
let lsb = self.value & 1;
self.value = ((self.value >> 1) as i32 ^ ((-(lsb as i32)) & 0x12000)) as u32;
}
(self.value & 1) as u8
}
pub fn period(&self) -> u8 {
self.period
}
pub fn set_period(&mut self, period: u8) {
self.period = (period & 0x1f).max(1);
}
}