73134d07a20a23fb35b47323524eb50ced7436fd
[pcsx_rearmed.git] / plugins / dfsound / externals.h
1 /***************************************************************************\r
2                          externals.h  -  description\r
3                              -------------------\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
9  *                                                                         *\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
15  *                                                                         *\r
16  ***************************************************************************/\r
17 \r
18 #include <stdint.h>\r
19 \r
20 /////////////////////////////////////////////////////////\r
21 // generic defines\r
22 /////////////////////////////////////////////////////////\r
23 \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
29 #ifndef max\r
30 #define max(a,b)            (((a) > (b)) ? (a) : (b))\r
31 #define min(a,b)            (((a) < (b)) ? (a) : (b))\r
32 #endif\r
33 \r
34 ////////////////////////////////////////////////////////////////////////\r
35 // spu defines\r
36 ////////////////////////////////////////////////////////////////////////\r
37 \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
43 \r
44 // num of channels\r
45 #define MAXCHAN     24\r
46 \r
47 // ~ 1 ms of data\r
48 // note: must be even due to the way reverb works now\r
49 #define NSSIZE 46\r
50 \r
51 ///////////////////////////////////////////////////////////\r
52 // struct defines\r
53 ///////////////////////////////////////////////////////////\r
54 \r
55 // ADSR INFOS PER CHANNEL\r
56 typedef struct\r
57 {\r
58  int            AttackModeExp;\r
59  long           AttackTime;\r
60  long           DecayTime;\r
61  long           SustainLevel;\r
62  int            SustainModeExp;\r
63  long           SustainModeDec;\r
64  long           SustainTime;\r
65  int            ReleaseModeExp;\r
66  unsigned long  ReleaseVal;\r
67  long           ReleaseTime;\r
68  long           ReleaseStartTime; \r
69  long           ReleaseVol; \r
70  long           lTime;\r
71  long           lVolume;\r
72 } ADSRInfo;\r
73 \r
74 typedef struct\r
75 {\r
76  unsigned char  State:2;\r
77  unsigned char  AttackModeExp:1;\r
78  unsigned char  SustainModeExp:1;\r
79  unsigned char  SustainIncrease:1;\r
80  unsigned char  ReleaseModeExp:1;\r
81  unsigned char  AttackRate;\r
82  unsigned char  DecayRate;\r
83  unsigned char  SustainLevel;\r
84  unsigned char  SustainRate;\r
85  unsigned char  ReleaseRate;\r
86  int            EnvelopeVol;\r
87 } ADSRInfoEx;\r
88               \r
89 ///////////////////////////////////////////////////////////\r
90 \r
91 // Tmp Flags\r
92 \r
93 // used for debug channel muting\r
94 #define FLAG_MUTE  1\r
95 \r
96 // used for simple interpolation\r
97 #define FLAG_IPOL0 2\r
98 #define FLAG_IPOL1 4\r
99 \r
100 ///////////////////////////////////////////////////////////\r
101 \r
102 // MAIN CHANNEL STRUCT\r
103 typedef struct\r
104 {\r
105  int               iSBPos;                             // mixing stuff\r
106  int               spos;\r
107  int               sinc;\r
108 \r
109  unsigned char *   pStart;                             // start ptr into sound mem\r
110  unsigned char *   pCurr;                              // current pos in sound mem\r
111  unsigned char *   pLoop;                              // loop ptr in sound mem\r
112 \r
113  unsigned int      bStop:1;                            // is channel stopped (sample _can_ still be playing, ADSR Release phase)\r
114  unsigned int      bReverb:1;                          // can we do reverb on this channel? must have ctrl register bit, to get active\r
115  unsigned int      bIgnoreLoop:1;                      // ignore loop bit, if an external loop address is used\r
116  unsigned int      bRVBActive:1;                       // reverb active flag\r
117  unsigned int      bNoise:1;                           // noise active flag\r
118  unsigned int      bFMod:2;                            // freq mod (0=off, 1=sound channel, 2=freq channel)\r
119 \r
120  int               iActFreq;                           // current psx pitch\r
121  int               iUsedFreq;                          // current pc pitch\r
122  int               iLeftVolume;                        // left volume\r
123  int               iRightVolume;                       // right volume\r
124  int               s_1;                                // last decoding infos\r
125  int               s_2;\r
126  ADSRInfoEx        ADSRX;\r
127  int               iRawPitch;                          // raw pitch (0...3fff)\r
128 \r
129  int               iRVBOffset;                         // reverb offset\r
130  int               iRVBRepeat;                         // reverb repeat\r
131  int               iRVBNum;                            // another reverb helper\r
132  int               iOldNoise;                          // old noise val for this channel   \r
133 \r
134  int               SB[32+32];\r
135 } SPUCHAN;\r
136 \r
137 ///////////////////////////////////////////////////////////\r
138 \r
139 typedef struct\r
140 {\r
141  int StartAddr;      // reverb area start addr in samples\r
142  int CurrAddr;       // reverb area curr addr in samples\r
143 \r
144  int VolLeft;\r
145  int VolRight;\r
146  int iRVBLeft;\r
147  int iRVBRight;\r
148 \r
149  int FB_SRC_A;       // (offset)\r
150  int FB_SRC_B;       // (offset)\r
151  int IIR_ALPHA;      // (coef.)\r
152  int ACC_COEF_A;     // (coef.)\r
153  int ACC_COEF_B;     // (coef.)\r
154  int ACC_COEF_C;     // (coef.)\r
155  int ACC_COEF_D;     // (coef.)\r
156  int IIR_COEF;       // (coef.)\r
157  int FB_ALPHA;       // (coef.)\r
158  int FB_X;           // (coef.)\r
159  int IIR_DEST_A0;    // (offset)\r
160  int IIR_DEST_A1;    // (offset)\r
161  int ACC_SRC_A0;     // (offset)\r
162  int ACC_SRC_A1;     // (offset)\r
163  int ACC_SRC_B0;     // (offset)\r
164  int ACC_SRC_B1;     // (offset)\r
165  int IIR_SRC_A0;     // (offset)\r
166  int IIR_SRC_A1;     // (offset)\r
167  int IIR_DEST_B0;    // (offset)\r
168  int IIR_DEST_B1;    // (offset)\r
169  int ACC_SRC_C0;     // (offset)\r
170  int ACC_SRC_C1;     // (offset)\r
171  int ACC_SRC_D0;     // (offset)\r
172  int ACC_SRC_D1;     // (offset)\r
173  int IIR_SRC_B1;     // (offset)\r
174  int IIR_SRC_B0;     // (offset)\r
175  int MIX_DEST_A0;    // (offset)\r
176  int MIX_DEST_A1;    // (offset)\r
177  int MIX_DEST_B0;    // (offset)\r
178  int MIX_DEST_B1;    // (offset)\r
179  int IN_COEF_L;      // (coef.)\r
180  int IN_COEF_R;      // (coef.)\r
181 \r
182  int dirty;          // registers changed\r
183 \r
184  // normalized offsets\r
185  int nIIR_DEST_A0, nIIR_DEST_A1, nIIR_DEST_B0, nIIR_DEST_B1,\r
186         nACC_SRC_A0, nACC_SRC_A1, nACC_SRC_B0, nACC_SRC_B1, \r
187         nIIR_SRC_A0, nIIR_SRC_A1, nIIR_SRC_B0, nIIR_SRC_B1,\r
188         nACC_SRC_C0, nACC_SRC_C1, nACC_SRC_D0, nACC_SRC_D1,\r
189         nMIX_DEST_A0, nMIX_DEST_A1, nMIX_DEST_B0, nMIX_DEST_B1;\r
190  // MIX_DEST_xx - FB_SRC_x\r
191  int nFB_SRC_A0, nFB_SRC_A1, nFB_SRC_B0, nFB_SRC_B1;\r
192 } REVERBInfo;\r
193 \r
194 ///////////////////////////////////////////////////////////\r
195 // SPU.C globals\r
196 ///////////////////////////////////////////////////////////\r
197 \r
198 #ifndef _IN_SPU\r
199 \r
200 // psx buffers / addresses\r
201 \r
202 extern unsigned short  regArea[];                        \r
203 extern unsigned short  spuMem[];\r
204 extern unsigned char * spuMemC;\r
205 extern unsigned char * pSpuIrq;\r
206 extern unsigned char * pSpuBuffer;\r
207 \r
208 // user settings\r
209 \r
210 extern int        iVolume;\r
211 extern int        iXAPitch;\r
212 extern int        iUseTimer;\r
213 extern int        iSPUIRQWait;\r
214 extern int        iDebugMode;\r
215 extern int        iRecordMode;\r
216 extern int        iUseReverb;\r
217 extern int        iUseInterpolation;\r
218 // MISC\r
219 \r
220 extern int iSpuAsyncWait;\r
221 \r
222 extern SPUCHAN s_chan[];\r
223 extern REVERBInfo rvb;\r
224 \r
225 extern unsigned long dwNoiseVal;\r
226 extern unsigned short spuCtrl;\r
227 extern unsigned short spuStat;\r
228 extern unsigned short spuIrq;\r
229 extern unsigned long  spuAddr;\r
230 extern int      bEndThread; \r
231 extern int      bThreadEnded;\r
232 extern int      bSpuInit;\r
233 extern unsigned int dwNewChannel;\r
234 extern unsigned int dwChannelOn;\r
235 extern unsigned int dwPendingChanOff;\r
236 \r
237 extern int      SSumR[];\r
238 extern int      SSumL[];\r
239 extern int      iCycle;\r
240 extern short *  pS;\r
241 \r
242 extern void (CALLBACK *cddavCallback)(unsigned short,unsigned short);\r
243 \r
244 #endif\r
245 \r
246 ///////////////////////////////////////////////////////////\r
247 // XA.C globals\r
248 ///////////////////////////////////////////////////////////\r
249 \r
250 #ifndef _IN_XA\r
251 \r
252 extern xa_decode_t   * xapGlobal;\r
253 \r
254 extern uint32_t * XAFeed;\r
255 extern uint32_t * XAPlay;\r
256 extern uint32_t * XAStart;\r
257 extern uint32_t * XAEnd;\r
258 \r
259 extern uint32_t   XARepeat;\r
260 extern uint32_t   XALastVal;\r
261 \r
262 extern uint32_t * CDDAFeed;\r
263 extern uint32_t * CDDAPlay;\r
264 extern uint32_t * CDDAStart;\r
265 extern uint32_t * CDDAEnd;\r
266 \r
267 extern int           iLeftXAVol;\r
268 extern int           iRightXAVol;\r
269 \r
270 #endif\r
271 \r
272 ///////////////////////////////////////////////////////////\r
273 // REVERB.C globals\r
274 ///////////////////////////////////////////////////////////\r
275 \r
276 #ifndef _IN_REVERB\r
277 \r
278 extern int *          sRVBPlay;\r
279 extern int *          sRVBEnd;\r
280 extern int *          sRVBStart;\r
281 \r
282 #endif\r