const REVERBInfo *rvb = spu.rvb;\r
unsigned short *spuMem = spu.spuMem;\r
int space = 0x40000 - rvb->StartAddr;\r
+ int vAPF1 = rvb->vAPF1 >> 1, vAPF2 = rvb->vAPF2 >> 1;\r
int Lout, Rout, ns;\r
\r
- for (ns = 0; ns < ns_to * 2; )\r
+ if (vAPF1 || vAPF2)\r
+ {\r
+ for (ns = 0; ns < ns_to * 2; )\r
+ {\r
+ int lapf1 = g_buffer(rvb->mLAPF1_dAPF1);\r
+ int rapf1 = g_buffer(rvb->mRAPF1_dAPF1);\r
+ int lapf2 = g_buffer(rvb->mLAPF2_dAPF2);\r
+ int rapf2 = g_buffer(rvb->mRAPF2_dAPF2);\r
+ preload(SSumLR + ns + 64*2/4 - 4);\r
+\r
+ Lout = Rout = 0; // but should be COMB?\r
+\r
+ Lout -= vAPF1 * lapf1; Lout >>= (15-1);\r
+ Rout -= vAPF1 * rapf1; Rout >>= (15-1);\r
+ Lout = Lout * vAPF1 + (lapf1 << (15-1));\r
+ Rout = Rout * vAPF1 + (rapf1 << (15-1));\r
+\r
+ Lout -= vAPF2 * lapf2; Lout >>= (15-1);\r
+ Rout -= vAPF2 * rapf2; Rout >>= (15-1);\r
+ Lout = Lout * vAPF2 + (lapf2 << (15-1));\r
+ Rout = Rout * vAPF2 + (rapf2 << (15-1));\r
+\r
+ Lout = (Lout >> (15-1)) * rvb->VolLeft >> 15;\r
+ Rout = (Rout >> (15-1)) * rvb->VolRight >> 15;\r
+\r
+ SSumLR[ns++] += Lout;\r
+ SSumLR[ns++] += Rout;\r
+ SSumLR[ns++] += Lout;\r
+ SSumLR[ns++] += Rout;\r
+\r
+ curr_addr++;\r
+ if (curr_addr >= 0x40000) curr_addr = rvb->StartAddr;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for (ns = 0; ns < ns_to * 2; )\r
{\r
preload(SSumLR + ns + 64*2/4 - 4);\r
\r
- // todo: is this missing COMB and APF1?\r
Lout = g_buffer(rvb->mLAPF2_dAPF2);\r
- Rout = g_buffer(rvb->mLAPF2_dAPF2);\r
+ Rout = g_buffer(rvb->mRAPF2_dAPF2);\r
\r
Lout = (Lout * rvb->VolLeft) >> 15;\r
Rout = (Rout * rvb->VolRight) >> 15;\r
curr_addr++;\r
if (curr_addr >= 0x40000) curr_addr = rvb->StartAddr;\r
}\r
+ }\r
}\r
\r
static void REVERBPrep(void)\r