// 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
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
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
\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