spu: rework synchronization
[pcsx_rearmed.git] / plugins / dfsound / externals.h
index f844b25..9096399 100644 (file)
@@ -21,7 +21,7 @@
 // generic defines\r
 /////////////////////////////////////////////////////////\r
 \r
-#if 0 //def __GNUC__\r
+#ifdef __GNUC__\r
 #define noinline __attribute__((noinline))\r
 #define unlikely(x) __builtin_expect((x), 0)\r
 #else\r
 // num of channels\r
 #define MAXCHAN     24\r
 \r
-// ~ FRAG_MSECS ms of data\r
 // note: must be even due to the way reverb works now\r
-#define FRAG_MSECS 2\r
-#define NSSIZE ((44100 * FRAG_MSECS / 1000 + 1) & ~1)\r
+#define NSSIZE ((44100 / 50 + 16) & ~1)\r
 \r
 ///////////////////////////////////////////////////////////\r
 // struct defines\r
 ///////////////////////////////////////////////////////////\r
 \r
 // ADSR INFOS PER CHANNEL\r
-typedef struct\r
-{\r
- int            AttackModeExp;\r
- long           AttackTime;\r
- long           DecayTime;\r
- long           SustainLevel;\r
- int            SustainModeExp;\r
- long           SustainModeDec;\r
- long           SustainTime;\r
- int            ReleaseModeExp;\r
- unsigned long  ReleaseVal;\r
- long           ReleaseTime;\r
- long           ReleaseStartTime; \r
- long           ReleaseVol; \r
- long           lTime;\r
- long           lVolume;\r
-} ADSRInfo;\r
-\r
 typedef struct\r
 {\r
  unsigned char  State:2;\r
@@ -108,6 +88,7 @@ typedef struct
  int               iSBPos;                             // mixing stuff\r
  int               spos;\r
  int               sinc;\r
+ int               sinc_inv;\r
 \r
  unsigned char *   pCurr;                              // current pos in sound mem\r
  unsigned char *   pLoop;                              // loop ptr in sound mem\r
@@ -209,17 +190,15 @@ extern int        iUseReverb;
 extern int        iUseInterpolation;\r
 // MISC\r
 \r
-extern int had_dma;\r
 extern int decode_pos;\r
 \r
 extern SPUCHAN s_chan[];\r
 extern REVERBInfo rvb;\r
 \r
-extern unsigned long dwNoiseVal;\r
 extern unsigned short spuCtrl;\r
 extern unsigned short spuStat;\r
 extern unsigned short spuIrq;\r
-extern unsigned long  spuAddr;\r
+extern unsigned int   spuAddr;\r
 extern int      bSpuInit;\r
 extern unsigned int dwNewChannel;\r
 extern unsigned int dwChannelOn;\r
@@ -228,11 +207,21 @@ extern unsigned int dwChannelDead;
 \r
 extern int      SSumR[];\r
 extern int      SSumL[];\r
-extern int      iCycle;\r
 extern short *  pS;\r
 \r
 extern void (CALLBACK *cddavCallback)(unsigned short,unsigned short);\r
 \r
+extern unsigned int cycles_played;\r
+\r
+void do_samples(unsigned int cycles_to);\r
+void schedule_next_irq(void);\r
+\r
+#define do_samples_if_needed(c) \\r
+ do { \\r
+  if ((int)((c) - cycles_played) >= 16 * 768) \\r
+   do_samples(c); \\r
+ } while (0)\r
+\r
 #endif\r
 \r
 ///////////////////////////////////////////////////////////\r
@@ -248,9 +237,6 @@ extern uint32_t * XAPlay;
 extern uint32_t * XAStart;\r
 extern uint32_t * XAEnd;\r
 \r
-extern uint32_t   XARepeat;\r
-extern uint32_t   XALastVal;\r
-\r
 extern uint32_t * CDDAFeed;\r
 extern uint32_t * CDDAPlay;\r
 extern uint32_t * CDDAStart;\r