32x, improve pwm volume accuracy
authorkub <derkub@gmail.com>
Tue, 11 Jul 2023 21:43:00 +0000 (21:43 +0000)
committerkub <derkub@gmail.com>
Tue, 11 Jul 2023 21:43:00 +0000 (21:43 +0000)
pico/32x/pwm.c

index 1b10103..e08ff02 100644 (file)
@@ -34,7 +34,7 @@ void p32x_pwm_ctl_changed(void)
   // but mars test disagrees
   pwm.mult = 0;
   if ((control & 0x0f) != 0)
-    pwm.mult = 0x10000 / cycles;
+    pwm.mult = (0x10000<<8) / (cycles+1);
 
   pwm.irq_timer = (control & 0x0f00) >> 8;
   pwm.irq_timer = ((pwm.irq_timer - 1) & 0x0f) + 1;
@@ -60,9 +60,7 @@ static int convert_sample(unsigned int v)
 {
   if (v > pwm.cycles)
     v = pwm.cycles;
-  if (v == 0)
-    return 0;
-  return v * pwm.mult - 0x10000/2;
+  return (v * pwm.mult >> 8) - 0x10000/2;
 }
 
 #define consume_fifo(sh2, m68k_cycles) { \