32x: implement dreq1, improve dmac
[picodrive.git] / pico / pico_int.h
index 383739c..08e3769 100644 (file)
@@ -467,12 +467,12 @@ typedef struct
 #define P32XV_nFEN  (1<< 1)\r
 #define P32XV_FS    (1<< 0)\r
 \r
-#define P32XP_FULL  (1<<15) // PWM\r
+#define P32XP_RTP   (1<<7)  // PWM control\r
+#define P32XP_FULL  (1<<15) // PWM pulse\r
 #define P32XP_EMPTY (1<<14)\r
 \r
 #define P32XF_68KCPOLL  (1 << 0)\r
 #define P32XF_68KVPOLL  (1 << 1)\r
-#define P32XF_PWM_PEND  (1 << 6)\r
 \r
 #define P32XI_VRES (1 << 14/2) // IRL/2\r
 #define P32XI_VINT (1 << 12/2)\r
@@ -504,11 +504,12 @@ struct Pico32x
   unsigned char sh2irqi[2];      // individual\r
   unsigned int sh2irqs;          // common irqs\r
   unsigned short dmac_fifo[DMAC_FIFO_LEN];\r
-  unsigned int dmac_ptr;\r
-  unsigned int pwm_irq_sample_cnt;\r
+  unsigned int dmac0_fifo_ptr;\r
+  unsigned int pad;\r
   unsigned char comm_dirty_68k;\r
   unsigned char comm_dirty_sh2;\r
-  unsigned short pad;\r
+  unsigned char pwm_irq_cnt;\r
+  unsigned char pad1;\r
   unsigned short pwm_p[2];       // pwm pos in fifo\r
   unsigned int pwm_cycle_p;      // pwm play cursor (32x cycles)\r
   unsigned int reserved[6];\r
@@ -586,6 +587,7 @@ unsigned int PicoRead8_io(unsigned int a);
 unsigned int PicoRead16_io(unsigned int a);\r
 void PicoWrite8_io(unsigned int a, unsigned int d);\r
 void PicoWrite16_io(unsigned int a, unsigned int d);\r
+void p32x_dreq1_trigger(void);\r
 \r
 // pico/memory.c\r
 PICO_INTERNAL void PicoMemSetupPico(void);\r
@@ -781,8 +783,10 @@ void p32x_pwm_write16(unsigned int a, unsigned int d, unsigned int cycles);
 void p32x_pwm_update(int *buf32, int length, int stereo);\r
 void p32x_timers_do(unsigned int m68k_now, unsigned int m68k_slice);\r
 void p32x_timers_recalc(void);\r
-void p32x_pwm_schedule(unsigned int now);\r
+void p32x_pwm_schedule(unsigned int m68k_now);\r
 void p32x_pwm_schedule_sh2(SH2 *sh2);\r
+void p32x_pwm_irq_event(unsigned int m68k_now);\r
+void p32x_pwm_state_loaded(void);\r
 #else\r
 #define Pico32xInit()\r
 #define PicoPower32x()\r