- if (a < 6) // L ch
- Pico32xMem->pwm[pwm_ptr * 2] = d;
- else if (a == 6) // R ch
- Pico32xMem->pwm[pwm_ptr * 2 + 1] = d;
- else // MONO
- Pico32xMem->pwm[pwm_ptr * 2] = Pico32xMem->pwm[pwm_ptr * 2 + 1] = d;
-
- if (a >= 6) { // R or MONO
- pwm_smp_cnt++;
- pwm_ptr = (pwm_ptr + 1) & (PWM_BUFF_LEN - 1);
- elprintf(EL_PWM, "pwm: smp_cnt %d, ptr %d, smp %x",
- pwm_smp_cnt, pwm_ptr, d);
+ if (a == 4 || a == 8) { // L ch or MONO
+ short *fifo = Pico32xMem->pwm_fifo[0];
+ if (Pico32x.pwm_p[0] < 3)
+ Pico32x.pwm_p[0]++;
+ else {
+ fifo[1] = fifo[2];
+ fifo[2] = fifo[3];
+ }
+ fifo[Pico32x.pwm_p[0]] = d;
+ }
+ if (a == 6 || a == 8) { // R ch or MONO
+ short *fifo = Pico32xMem->pwm_fifo[1];
+ if (Pico32x.pwm_p[1] < 3)
+ Pico32x.pwm_p[1]++;
+ else {
+ fifo[1] = fifo[2];
+ fifo[2] = fifo[3];
+ }
+ fifo[Pico32x.pwm_p[1]] = d;