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)); chan->period_counter += (cycles >> (chan->octave + 1));
if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter; 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); chan->prev = (uint8_t)(chan->lfsr >> 15);
uint16_t in = ((chan->lfsr >> chan->tapa) ^ (chan->tapb_enable ? (chan->lfsr >> chan->tapb) : 0)) & 0x0001; uint16_t in = ((chan->lfsr >> chan->tapa) ^ (chan->tapb_enable ? (chan->lfsr >> chan->tapb) : 0)) & 0x0001;
chan->lfsr = (chan->lfsr << 1) | in; 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)); chan->period_counter += (cycles >> (chan->octave + 1));
if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter; if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter;
if (chan->period_counter >= 4096) { while (chan->period_counter >= 4096) {
if (!chan->portion) { if (!chan->portion) {
if ((chan->flags & 0x02) != 0) chan->accum -= chan->aoffset; if ((chan->flags & 0x02) != 0) chan->accum -= chan->aoffset;
else 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 left = chan->accum >> 3;
uint8_t right = chan->accum >> 3; uint8_t right = chan->accum >> 3;