PowerNoise: fix low periods

sadly will increase CPU usage on higher notes
but at least it is fixed
This commit is contained in:
tildearrow 2024-01-25 13:22:55 -05:00
parent bf3353ebb8
commit 0a9566d5ad

View file

@ -51,11 +51,11 @@ void pwrnoise_noise_step(noise_channel_t *chan, uint16_t cycles) {
chan->period_counter += (cycles >> (chan->octave + 1));
if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter;
if (chan->period_counter >= 4096) {
while (chan->period_counter >= 4096) {
chan->prev = (uint8_t)(chan->lfsr >> 15);
uint16_t in = ((chan->lfsr >> chan->tapa) ^ (chan->tapb_enable ? (chan->lfsr >> chan->tapb) : 0)) & 0x0001;
chan->lfsr = (chan->lfsr << 1) | in;
chan->period_counter = chan->period + (chan->period_counter - 4096);
chan->period_counter -= 4096 - chan->period;
}
}
@ -111,7 +111,7 @@ void pwrnoise_slope_step(slope_channel_t *chan, uint16_t cycles, bool force_zero
chan->period_counter += (cycles >> (chan->octave + 1));
if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter;
if (chan->period_counter >= 4096) {
while (chan->period_counter >= 4096) {
if (!chan->portion) {
if ((chan->flags & 0x02) != 0) chan->accum -= chan->aoffset;
else chan->accum += chan->aoffset;
@ -139,7 +139,7 @@ void pwrnoise_slope_step(slope_channel_t *chan, uint16_t cycles, bool force_zero
}
}
chan->period_counter = chan->period + (chan->period_counter - 4096);
chan->period_counter -= 4096 - chan->period;
uint8_t left = chan->accum >> 3;
uint8_t right = chan->accum >> 3;