// will be included from spu.c\r
#ifdef _IN_SPU\r
\r
-////////////////////////////////////////////////////////////////////////\r
-// globals\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// REVERB info and timing vars...\r
-\r
-int * sRVBPlay = 0;\r
-int * sRVBEnd = 0;\r
-int * sRVBStart = 0;\r
-\r
////////////////////////////////////////////////////////////////////////\r
// START REVERB\r
////////////////////////////////////////////////////////////////////////\r
\r
INLINE void StartREVERB(int ch)\r
{\r
- if(s_chan[ch].bReverb && (spuCtrl&0x80)) // reverb possible?\r
+ if(spu.s_chan[ch].bReverb && (spu.spuCtrl&0x80)) // reverb possible?\r
{\r
- s_chan[ch].bRVBActive=!!iUseReverb;\r
+ spu.s_chan[ch].bRVBActive=!!spu_config.iUseReverb;\r
}\r
- else s_chan[ch].bRVBActive=0; // else -> no reverb\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// HELPER FOR NEILL'S REVERB: re-inits our reverb mixing buf\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-INLINE void InitREVERB(void)\r
-{\r
- memset(sRVBStart,0,NSSIZE*2*4);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// STORE REVERB\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-INLINE void StoreREVERB(int ch,int ns,int l,int r)\r
-{\r
- ns<<=1;\r
-\r
- sRVBStart[ns] +=l; // -> we mix all active reverb channels into an extra buffer\r
- sRVBStart[ns+1]+=r;\r
+ else spu.s_chan[ch].bRVBActive=0; // else -> no reverb\r
}\r
\r
////////////////////////////////////////////////////////////////////////\r
\r
// get_buffer content helper: takes care about wraps\r
#define g_buffer(var) \\r
- ((int)(signed short)spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var)])\r
+ ((int)(signed short)spu.spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var)])\r
\r
// saturate iVal and store it as var\r
#define s_buffer(var, iVal) \\r
ssat32_to_16(iVal); \\r
- spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var)] = iVal\r
+ spu.spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var)] = iVal\r
\r
#define s_buffer1(var, iVal) \\r
ssat32_to_16(iVal); \\r
- spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var + 1)] = iVal\r
+ spu.spuMem[rvb2ram_offs(curr_addr, space, rvb.n##var + 1)] = iVal\r
\r
////////////////////////////////////////////////////////////////////////\r
\r
// portions based on spu2-x from PCSX2\r
-static void MixREVERB(void)\r
+static void MixREVERB(int *SSumLR, int *RVB, int ns_to)\r
{\r
int l_old = rvb.iRVBLeft;\r
int r_old = rvb.iRVBRight;\r
int curr_addr = rvb.CurrAddr;\r
int space = 0x40000 - rvb.StartAddr;\r
- int l, r, ns;\r
+ int l = 0, r = 0, ns;\r
\r
- for (ns = 0; ns < NSSIZE*2; )\r
+ for (ns = 0; ns < ns_to * 2; )\r
{\r
int IIR_ALPHA = rvb.IIR_ALPHA;\r
int ACC0, ACC1, FB_A0, FB_A1, FB_B0, FB_B1;\r
int mix_dest_a0, mix_dest_a1, mix_dest_b0, mix_dest_b1;\r
\r
- int input_L = sRVBStart[ns] * rvb.IN_COEF_L;\r
- int input_R = sRVBStart[ns+1] * rvb.IN_COEF_R;\r
+ int input_L = RVB[ns] * rvb.IN_COEF_L;\r
+ int input_R = RVB[ns+1] * rvb.IN_COEF_R;\r
\r
int IIR_INPUT_A0 = ((g_buffer(IIR_SRC_A0) * rvb.IIR_COEF) + input_L) >> 15;\r
int IIR_INPUT_A1 = ((g_buffer(IIR_SRC_A1) * rvb.IIR_COEF) + input_R) >> 15;\r
rvb.CurrAddr = curr_addr;\r
}\r
\r
-static void MixREVERB_off(void)\r
+static void MixREVERB_off(int *SSumLR, int ns_to)\r
{\r
int l_old = rvb.iRVBLeft;\r
int r_old = rvb.iRVBRight;\r
int curr_addr = rvb.CurrAddr;\r
int space = 0x40000 - rvb.StartAddr;\r
- int l, r, ns;\r
+ int l = 0, r = 0, ns;\r
\r
- for (ns = 0; ns < NSSIZE*2; )\r
+ for (ns = 0; ns < ns_to * 2; )\r
{\r
l = (g_buffer(MIX_DEST_A0) + g_buffer(MIX_DEST_B0)) / 2;\r
r = (g_buffer(MIX_DEST_A1) + g_buffer(MIX_DEST_B1)) / 2;\r
rvb.dirty = 0;\r
}\r
\r
-INLINE void REVERBDo(void)\r
+INLINE void REVERBDo(int *SSumLR, int *RVB, int ns_to)\r
{\r
if (!rvb.StartAddr) // reverb is off\r
{\r
return;\r
}\r
\r
- if (spuCtrl & 0x80) // -> reverb on? oki\r
+ if (spu.spuCtrl & 0x80) // -> reverb on? oki\r
{\r
if (unlikely(rvb.dirty))\r
prepare_offsets();\r
\r
- MixREVERB();\r
+ MixREVERB(SSumLR, RVB, ns_to);\r
}\r
else if (rvb.VolLeft || rvb.VolRight)\r
{\r
if (unlikely(rvb.dirty))\r
prepare_offsets();\r
\r
- MixREVERB_off();\r
+ MixREVERB_off(SSumLR, ns_to);\r
}\r
else // -> reverb off\r
{\r
// reverb runs anyway\r
- rvb.CurrAddr += NSSIZE/2;\r
+ rvb.CurrAddr += ns_to / 2;\r
while (rvb.CurrAddr >= 0x40000)\r
rvb.CurrAddr -= 0x40000 - rvb.StartAddr;\r
}\r