32x: fix some more timing problems
[picodrive.git] / pico / pico_int.h
index ca31ae0..7c890c5 100644 (file)
@@ -240,7 +240,7 @@ extern SH2 sh2s[2];
 #ifndef DRC_SH2\r
 # define sh2_end_run(sh2, after_) do { \\r
   if ((sh2)->icount > (after_)) { \\r
-    (sh2)->cycles_timeslice -= (sh2)->icount; \\r
+    (sh2)->cycles_timeslice -= (sh2)->icount - (after_); \\r
     (sh2)->icount = after_; \\r
   } \\r
 } while (0)\r
@@ -250,7 +250,7 @@ extern SH2 sh2s[2];
 # define sh2_end_run(sh2, after_) do { \\r
   int left_ = (signed int)(sh2)->sr >> 12; \\r
   if (left_ > (after_)) { \\r
-    (sh2)->cycles_timeslice -= left_; \\r
+    (sh2)->cycles_timeslice -= left_ - (after_); \\r
     (sh2)->sr &= 0xfff; \\r
     (sh2)->sr |= (after_) << 12; \\r
   } \\r
@@ -778,8 +778,10 @@ enum {
 extern int Pico32xDrawMode;\r
 \r
 // 32x/pwm.c\r
-unsigned int p32x_pwm_read16(unsigned int a, unsigned int cycles);\r
-void p32x_pwm_write16(unsigned int a, unsigned int d, unsigned int cycles);\r
+unsigned int p32x_pwm_read16(unsigned int a, SH2 *sh2,\r
+  unsigned int m68k_cycles);\r
+void p32x_pwm_write16(unsigned int a, unsigned int d,\r
+  SH2 *sh2, unsigned int m68k_cycles);\r
 void p32x_pwm_update(int *buf32, int length, int stereo);\r
 void p32x_pwm_ctl_changed(void);\r
 void p32x_pwm_schedule(unsigned int m68k_now);\r