1 /***************************************************************************
\r
2 externals.h - description
\r
4 begin : Wed May 15 2002
\r
5 copyright : (C) 2002 by Pete Bernert
\r
6 email : BlackDove@addcom.de
\r
7 ***************************************************************************/
\r
8 /***************************************************************************
\r
10 * This program is free software; you can redistribute it and/or modify *
\r
11 * it under the terms of the GNU General Public License as published by *
\r
12 * the Free Software Foundation; either version 2 of the License, or *
\r
13 * (at your option) any later version. See also the license.txt file for *
\r
14 * additional informations. *
\r
16 ***************************************************************************/
\r
20 /////////////////////////////////////////////////////////
\r
22 /////////////////////////////////////////////////////////
\r
24 #define PSE_LT_SPU 4
\r
25 #define PSE_SPU_ERR_SUCCESS 0
\r
26 #define PSE_SPU_ERR -60
\r
27 #define PSE_SPU_ERR_NOTCONFIGURED PSE_SPU_ERR - 1
\r
28 #define PSE_SPU_ERR_INIT PSE_SPU_ERR - 2
\r
30 #define max(a,b) (((a) > (b)) ? (a) : (b))
\r
31 #define min(a,b) (((a) < (b)) ? (a) : (b))
\r
34 ////////////////////////////////////////////////////////////////////////
\r
36 ////////////////////////////////////////////////////////////////////////
\r
38 // sound buffer sizes
\r
39 // 400 ms complete sound buffer
\r
40 #define SOUNDSIZE 70560
\r
41 // 137 ms test buffer... if less than that is buffered, a new upload will happen
\r
42 #define TESTSIZE 24192
\r
50 ///////////////////////////////////////////////////////////
\r
52 ///////////////////////////////////////////////////////////
\r
54 // ADSR INFOS PER CHANNEL
\r
62 long SustainModeDec;
\r
65 unsigned long ReleaseVal;
\r
67 long ReleaseStartTime;
\r
81 int SustainIncrease;
\r
91 ///////////////////////////////////////////////////////////
\r
95 // used for debug channel muting
\r
98 // used for simple interpolation
\r
99 #define FLAG_IPOL0 2
\r
100 #define FLAG_IPOL1 4
\r
102 ///////////////////////////////////////////////////////////
\r
104 // MAIN CHANNEL STRUCT
\r
107 // no mutexes used anymore... don't need them to sync access
\r
110 int bNew; // start flag
\r
112 int iSBPos; // mixing stuff
\r
115 int SB[32+32]; // Pete added another 32 dwords in 1.6 ... prevents overflow issues with gaussian/cubic interpolation (thanx xodnizel!), and can be used for even better interpolations, eh? :)
\r
118 unsigned char * pStart; // start ptr into sound mem
\r
119 unsigned char * pCurr; // current pos in sound mem
\r
120 unsigned char * pLoop; // loop ptr in sound mem
\r
122 int bOn; // is channel active (sample playing?)
\r
123 int bStop; // is channel stopped (sample _can_ still be playing, ADSR Release phase)
\r
124 int bReverb; // can we do reverb on this channel? must have ctrl register bit, to get active
\r
125 int iActFreq; // current psx pitch
\r
126 int iUsedFreq; // current pc pitch
\r
127 int iLeftVolume; // left volume
\r
128 int iLeftVolRaw; // left psx volume value
\r
129 int bIgnoreLoop; // ignore loop bit, if an external loop address is used
\r
130 int iMute; // mute mode
\r
131 int iRightVolume; // right volume
\r
132 int iRightVolRaw; // right psx volume value
\r
133 int iRawPitch; // raw pitch (0...3fff)
\r
134 int iIrqDone; // debug irq done flag
\r
135 int s_1; // last decoding infos
\r
137 int bRVBActive; // reverb active flag
\r
138 int iRVBOffset; // reverb offset
\r
139 int iRVBRepeat; // reverb repeat
\r
140 int bNoise; // noise active flag
\r
141 int bFMod; // freq mod (0=off, 1=sound channel, 2=freq channel)
\r
142 int iRVBNum; // another reverb helper
\r
143 int iOldNoise; // old noise val for this channel
\r
144 ADSRInfo ADSR; // active ADSR settings
\r
145 ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start)
\r
148 ///////////////////////////////////////////////////////////
\r
152 int StartAddr; // reverb area start addr in samples
\r
153 int CurrAddr; // reverb area curr addr in samples
\r
162 int FB_SRC_A; // (offset)
\r
163 int FB_SRC_B; // (offset)
\r
164 int IIR_ALPHA; // (coef.)
\r
165 int ACC_COEF_A; // (coef.)
\r
166 int ACC_COEF_B; // (coef.)
\r
167 int ACC_COEF_C; // (coef.)
\r
168 int ACC_COEF_D; // (coef.)
\r
169 int IIR_COEF; // (coef.)
\r
170 int FB_ALPHA; // (coef.)
\r
171 int FB_X; // (coef.)
\r
172 int IIR_DEST_A0; // (offset)
\r
173 int IIR_DEST_A1; // (offset)
\r
174 int ACC_SRC_A0; // (offset)
\r
175 int ACC_SRC_A1; // (offset)
\r
176 int ACC_SRC_B0; // (offset)
\r
177 int ACC_SRC_B1; // (offset)
\r
178 int IIR_SRC_A0; // (offset)
\r
179 int IIR_SRC_A1; // (offset)
\r
180 int IIR_DEST_B0; // (offset)
\r
181 int IIR_DEST_B1; // (offset)
\r
182 int ACC_SRC_C0; // (offset)
\r
183 int ACC_SRC_C1; // (offset)
\r
184 int ACC_SRC_D0; // (offset)
\r
185 int ACC_SRC_D1; // (offset)
\r
186 int IIR_SRC_B1; // (offset)
\r
187 int IIR_SRC_B0; // (offset)
\r
188 int MIX_DEST_A0; // (offset)
\r
189 int MIX_DEST_A1; // (offset)
\r
190 int MIX_DEST_B0; // (offset)
\r
191 int MIX_DEST_B1; // (offset)
\r
192 int IN_COEF_L; // (coef.)
\r
193 int IN_COEF_R; // (coef.)
\r
196 ///////////////////////////////////////////////////////////
\r
198 ///////////////////////////////////////////////////////////
\r
202 // psx buffers / addresses
\r
204 extern unsigned short regArea[];
\r
205 extern unsigned short spuMem[];
\r
206 extern unsigned char * spuMemC;
\r
207 extern unsigned char * pSpuIrq;
\r
208 extern unsigned char * pSpuBuffer;
\r
212 extern int iVolume;
\r
213 extern int iXAPitch;
\r
214 extern int iUseTimer;
\r
215 extern int iSPUIRQWait;
\r
216 extern int iDebugMode;
\r
217 extern int iRecordMode;
\r
218 extern int iUseReverb;
\r
219 extern int iUseInterpolation;
\r
220 extern int iDisStereo;
\r
223 extern int iSpuAsyncWait;
\r
225 extern SPUCHAN s_chan[];
\r
226 extern REVERBInfo rvb;
\r
228 extern unsigned long dwNoiseVal;
\r
229 extern unsigned short spuCtrl;
\r
230 extern unsigned short spuStat;
\r
231 extern unsigned short spuIrq;
\r
232 extern unsigned long spuAddr;
\r
233 extern int bEndThread;
\r
234 extern int bThreadEnded;
\r
235 extern int bSpuInit;
\r
236 extern unsigned long dwNewChannel;
\r
238 extern int SSumR[];
\r
239 extern int SSumL[];
\r
243 extern void (CALLBACK *cddavCallback)(unsigned short,unsigned short);
\r
247 ///////////////////////////////////////////////////////////
\r
249 ///////////////////////////////////////////////////////////
\r
253 extern xa_decode_t * xapGlobal;
\r
255 extern uint32_t * XAFeed;
\r
256 extern uint32_t * XAPlay;
\r
257 extern uint32_t * XAStart;
\r
258 extern uint32_t * XAEnd;
\r
260 extern uint32_t XARepeat;
\r
261 extern uint32_t XALastVal;
\r
263 extern uint32_t * CDDAFeed;
\r
264 extern uint32_t * CDDAPlay;
\r
265 extern uint32_t * CDDAStart;
\r
266 extern uint32_t * CDDAEnd;
\r
268 extern int iLeftXAVol;
\r
269 extern int iRightXAVol;
\r
273 ///////////////////////////////////////////////////////////
\r
274 // REVERB.C globals
\r
275 ///////////////////////////////////////////////////////////
\r
279 extern int * sRVBPlay;
\r
280 extern int * sRVBEnd;
\r
281 extern int * sRVBStart;
\r
282 extern int iReverbOff;
\r
283 extern int iReverbRepeat;
\r
284 extern int iReverbNum;
\r