bsnes/higan/ms/psg/noise.cpp

28 lines
526 B
C++

auto PSG::Noise::run() -> void {
if(counter--) return;
if(rate == 0) counter = 0x10;
if(rate == 1) counter = 0x20;
if(rate == 2) counter = 0x40;
if(rate == 3) counter = pitch; //shared with tone2
if(clock ^= 1) { //0->1 transition
output = !lfsr.bit(0);
lfsr = (lfsr.bit(0) ^ (lfsr.bit(3) & enable)) << 15 | lfsr >> 1;
}
}
auto PSG::Noise::power() -> void {
volume = ~0;
counter = 0;
pitch = 0;
enable = 0;
rate = 0;
lfsr = 0x8000;
clock = 0;
output = 0;
left = 1;
right = 1;
}