32x: improve pwm a bit more
[picodrive.git] / pico / pico_int.h
index 53c6f4e..aa8e497 100644 (file)
@@ -251,6 +251,7 @@ extern SH2 sh2s[2];
   } \\r
 } while (0)\r
 # define sh2_cycles_left(sh2) (sh2)->icount\r
+# define sh2_burn_cycles(sh2, n) (sh2)->icount -= n\r
 # define sh2_pc(sh2) (sh2)->ppc\r
 #else\r
 # define sh2_end_run(sh2, after_) do { \\r
@@ -262,6 +263,7 @@ extern SH2 sh2s[2];
   } \\r
 } while (0)\r
 # define sh2_cycles_left(sh2) ((signed int)(sh2)->sr >> 12)\r
+# define sh2_burn_cycles(sh2, n) (sh2)->sr -= ((n) << 12)\r
 # define sh2_pc(sh2) (sh2)->pc\r
 #endif\r
 \r
@@ -281,6 +283,9 @@ extern SH2 sh2s[2];
 #define sh2_set_vbr(c, v) \\r
   { if (c) ssh2.vbr = v; else msh2.vbr = v; }\r
 \r
+#define elprintf_sh2(sh2, w, f, ...) \\r
+       elprintf(w,"%csh2 "f,(sh2)->is_slave?'s':'m',##__VA_ARGS__)\r
+\r
 // ---------------------------------------------------------\r
 \r
 // main oscillator clock which controls timing\r
@@ -489,8 +494,7 @@ typedef struct
 // peripheral reg access\r
 #define PREG8(regs,offs) ((unsigned char *)regs)[offs ^ 3]\r
 \r
-// real one is 4*2, but we use more because we don't lockstep\r
-#define DMAC_FIFO_LEN (4*4)\r
+#define DMAC_FIFO_LEN (4*2)\r
 #define PWM_BUFF_LEN 1024 // in one channel samples\r
 \r
 #define SH2_DRCBLK_RAM_SHIFT 1\r
@@ -511,9 +515,10 @@ struct Pico32x
   unsigned char sh2irqi[2];      // individual\r
   unsigned int sh2irqs;          // common irqs\r
   unsigned short dmac_fifo[DMAC_FIFO_LEN];\r
+  unsigned int pad[4];\r
   unsigned int dmac0_fifo_ptr;\r
   unsigned short vdp_fbcr_fake;\r
-  unsigned short pad;\r
+  unsigned short pad2;\r
   unsigned char comm_dirty_68k;\r
   unsigned char comm_dirty_sh2;\r
   unsigned char pwm_irq_cnt;\r
@@ -744,6 +749,7 @@ extern struct Pico32x Pico32x;
 enum p32x_event {\r
   P32X_EVENT_PWM,\r
   P32X_EVENT_FILLEND,\r
+  P32X_EVENT_HINT,\r
   P32X_EVENT_COUNT,\r
 };\r
 extern unsigned int event_times[P32X_EVENT_COUNT];\r
@@ -761,6 +767,7 @@ void p32x_update_irls(SH2 *active_sh2, int m68k_cycles);
 void p32x_reset_sh2s(void);\r
 void p32x_event_schedule(unsigned int now, enum p32x_event event, int after);\r
 void p32x_event_schedule_sh2(SH2 *sh2, enum p32x_event event, int after);\r
+void p32x_schedule_hint(SH2 *sh2, int m68k_cycles);\r
 \r
 // 32x/memory.c\r
 struct Pico32xMem *Pico32xMem;\r