// generic defines\r
/////////////////////////////////////////////////////////\r
\r
+#ifdef __GNUC__\r
+#define noinline __attribute__((noinline))\r
+#define unlikely(x) __builtin_expect((x), 0)\r
+#else\r
+#define noinline\r
+#define unlikely(x) x\r
+#endif\r
+\r
#define PSE_LT_SPU 4\r
#define PSE_SPU_ERR_SUCCESS 0\r
#define PSE_SPU_ERR -60\r
// num of channels\r
#define MAXCHAN 24\r
\r
-// ~ 1 ms of data\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
///////////////////////////////////////////////////////////\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
unsigned int bRVBActive:1; // reverb active flag\r
unsigned int bNoise:1; // noise active flag\r
unsigned int bFMod:2; // freq mod (0=off, 1=sound channel, 2=freq channel)\r
- unsigned int bJump:1; // last decoded block jumped\r
+ unsigned int prevflags:3; // flags from previous block\r
\r
int iLeftVolume; // left volume\r
int iRightVolume; // right volume\r
\r
extern int iVolume;\r
extern int iXAPitch;\r
-extern int iSPUIRQWait;\r
-extern int iDebugMode;\r
-extern int iRecordMode;\r
extern int iUseReverb;\r
extern int iUseInterpolation;\r
// MISC\r
\r
-extern int iSpuAsyncWait;\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
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