This is an automated email from the git hooks/post-receive script. ecsv-guest pushed a commit to branch armhf_test in repository mupen64plus-rsp-hle.
commit 88038950047ecc0315db9417b74d2abf8fa29d1e Author: Sven Eckelmann <[email protected]> Date: Wed May 12 16:42:38 2010 +0200 Imported Upstream version 1.99.4~hg20100511 --- src/hle.h | 6 ++- src/jpeg.c | 4 +- src/main.c | 4 +- src/ucode1.cpp | 119 +++++++++++++++++++++++------------------- src/ucode2.cpp | 148 ++++++++++++++++++++++++++++------------------------ src/ucode3.cpp | 153 +++++++++++++++++++++++++++++------------------------- src/ucode3mp3.cpp | 98 +++++++++++++++++----------------- 7 files changed, 285 insertions(+), 247 deletions(-) diff --git a/src/hle.h b/src/hle.h index 951c28e..f9345ca 100644 --- a/src/hle.h +++ b/src/hle.h @@ -28,9 +28,11 @@ #ifdef _BIG_ENDIAN #define S 0 +#define S16 0 #define S8 0 #else #define S 1 +#define S16 2 #define S8 3 #endif @@ -98,8 +100,8 @@ void jpg_uncompress(OSTask_t *task); /*void ucode1(OSTask_t *task); void ucode2(OSTask_t *task); void ucode3(OSTask_t *task); -void init_ucode1(); -void init_ucode2();*/ +void init_ucode1();*/ +void init_ucode2(); extern u32 inst1, inst2; extern u16 AudioInBuffer, AudioOutBuffer, AudioCount; diff --git a/src/jpeg.c b/src/jpeg.c index bf2830e..dd9a4fe 100644 --- a/src/jpeg.c +++ b/src/jpeg.c @@ -393,8 +393,8 @@ void jpg_uncompress(OSTask_t *task) m[30*8+k] |= m[1*8+6]; m[29*8+k] |= m[1*8+6]; - pic[(i*128+j*32+0+k)^1] = m[30*8+k]; - pic[(i*128+j*32+8+k)^1] = m[29*8+k]; + pic[(i*128+j*32+0+k)^S] = m[30*8+k]; + pic[(i*128+j*32+8+k)^S] = m[29*8+k]; m[24*8+k] = m[20*8+k] + m[16*8+k]; m[23*8+k] = m[19*8+k] + m[15*8+k]; diff --git a/src/main.c b/src/main.c index c55d606..536bcd4 100644 --- a/src/main.c +++ b/src/main.c @@ -314,7 +314,7 @@ EXPORT void CALL RomClosed(void) { rsp.DMEM[i] = rsp.IMEM[i] = 0; } -/* init_ucode1(); - init_ucode2();*/ + //init_ucode1(); + init_ucode2(); } diff --git a/src/ucode1.cpp b/src/ucode1.cpp index d7368af..0c0ad75 100644 --- a/src/ucode1.cpp +++ b/src/ucode1.cpp @@ -89,6 +89,11 @@ Address/Range Description 0x5C0..0xF7F Buffers... 0xF80..0xFFF <Unknown> ***************************************************/ +#ifdef USE_EXPANSION + #define MEMMASK 0x7FFFFF +#else + #define MEMMASK 0x3FFFFF +#endif static void SPNOOP (void) { //MessageBox (NULL, "Unknown Audio Command in ABI 1", "Audio HLE Error", MB_OK); @@ -258,12 +263,12 @@ static void ENVMIXER (void) { } for (int x = 0; x < 8; x++) { - i1=(int)inp[ptr^1]; - o1=(int)out[ptr^1]; - a1=(int)aux1[ptr^1]; + i1=(int)inp[ptr^S]; + o1=(int)out[ptr^S]; + a1=(int)aux1[ptr^S]; if (AuxIncRate) { - a2=(int)aux2[ptr^1]; - a3=(int)aux3[ptr^1]; + a2=(int)aux2[ptr^S]; + a3=(int)aux3[ptr^S]; } // TODO: here... //LAcc = LTrg; @@ -350,8 +355,8 @@ static void ENVMIXER (void) { if(a1>32767) a1=32767; else if(a1<-32768) a1=-32768; - out[ptr^1]=o1; - aux1[ptr^1]=a1; + out[ptr^S]=o1; + aux1[ptr^S]=a1; if (AuxIncRate) { //a2=((s64)(((s64)a2*0xfffe)+((s64)i1*AuxR*2)+0x8000)>>16); @@ -365,8 +370,8 @@ static void ENVMIXER (void) { if(a3>32767) a3=32767; else if(a3<-32768) a3=-32768; - aux2[ptr^1]=a2; - aux3[ptr^1]=a3; + aux2[ptr^S]=a2; + aux3[ptr^S]=a3; } ptr++; } @@ -412,17 +417,18 @@ static void RESAMPLE (void) { if ((Flags & 0x1) == 0) { //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); for (int x=0; x < 4; x++) - src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; + src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; Accum = *(u16 *)(rsp.RDRAM+addy+10); } else { for (int x=0; x < 4; x++) - src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); } for(int i=0;i < ((AudioCount+0xf)&0xFFF0)/2;i++) { //location = (((Accum * 0x40) >> 0x10) * 8); - location = (Accum >> 0xa) << 0x3; - lut = (s16 *)(((u8 *)ResampleLUT) + location); + // location is the fractional position between two samples + location = (Accum >> 0xa) * 4; + lut = (s16*)ResampleLUT + location; // mov eax, dword ptr [src+srcPtr]; // movsx edx, word ptr [lut]; @@ -436,29 +442,29 @@ static void RESAMPLE (void) { // and edx, 0f000h // imul - temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); + temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); accum = (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); + temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); + temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); + temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); accum += (s32)(temp >> 15); if (accum > 32767) accum = 32767; if (accum < -32768) accum = -32768; - dst[dstPtr^1] = (accum); + dst[dstPtr^S] = (accum); dstPtr++; Accum += Pitch; srcPtr += (Accum>>16); Accum&=0xffff; } for (int x=0; x < 4; x++) - ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; + ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; //memcpy (RSWORK, src+srcPtr, 0x8); *(u16 *)(rsp.RDRAM+addy+10) = Accum; } @@ -490,17 +496,17 @@ static void SETVOL (void) { //u16 VolRamp_Left; // 0x0012(T8) if(flags & A_LEFT) { // Set the Ramping values Target, Ramp //loopval = (((u32)vol << 0x10) | (u32)voltarg); - VolTrg_Left = *(s16 *)&inst1; // m_LeftVol + VolTrg_Left = (s16)inst1; // m_LeftVol //VolRamp_Left = (s32)inst2; - VolRamp_Left = *(s32 *)&inst2;//(u16)(inst2) | (s32)(s16)(inst2 << 0x10); + VolRamp_Left = (s32)inst2;//(u16)(inst2) | (s32)(s16)(inst2 << 0x10); //fprintf (dfile, "Ramp Left: %f\n", (float)VolRamp_Left/65536.0); //fprintf (dfile, "Ramp Left: %08X\n", inst2); //VolRamp_Left = (s16)voltarg; // m_LeftVolTarget //VolRate_Left = (s16)volrate; // m_LeftVolRate } else { // A_RIGHT - VolTrg_Right = *(s16 *)&inst1; // m_RightVol + VolTrg_Right = (s16)inst1; // m_RightVol //VolRamp_Right = (s32)inst2; - VolRamp_Right = *(s32 *)&inst2;//(u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); + VolRamp_Right = (s32)inst2;//(u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); //fprintf (dfile, "Ramp Right: %f\n", (float)VolRamp_Right/65536.0); //fprintf (dfile, "Ramp Right: %08X\n", inst2); //VolRamp_Right = (s16)voltarg; // m_RightVolTarget @@ -541,14 +547,14 @@ static void ADPCM (void) { // Work in progress! :) if(!(Flags&0x1)) { if(Flags&0x2) { - memcpy(out,&rsp.RDRAM[loopval&0x7fffff],32); + memcpy(out,&rsp.RDRAM[loopval&MEMMASK],32); } else { memcpy(out,&rsp.RDRAM[Address],32); } } - int l1=out[15]; - int l2=out[14]; + int l1=out[14^S]; + int l2=out[15^S]; int inp1[8]; int inp2[8]; out+=16; @@ -559,7 +565,7 @@ static void ADPCM (void) { // Work in progress! :) // area of memory in the case of A_LOOP or just // the values we calculated the last time - code=BufferSpace[(AudioInBuffer+inPtr)^3]; + code=BufferSpace[(AudioInBuffer+inPtr)^S8]; index=code&0xf; index<<=4; // index into the adpcm code table book1=(short *)&adpcmtable[index]; @@ -577,7 +583,7 @@ static void ADPCM (void) { // Work in progress! :) while(j<8) // loop of 8, for 8 coded nibbles from 4 bytes // which yields 8 short pcm values { - icode=BufferSpace[(AudioInBuffer+inPtr)^3]; + icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; inPtr++; inp1[j]=(s16)((icode&0xf0)<<8); // this will in effect be signed @@ -597,7 +603,7 @@ static void ADPCM (void) { // Work in progress! :) j=0; while(j<8) { - icode=BufferSpace[(AudioInBuffer+inPtr)^3]; + icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; inPtr++; inp2[j]=(short)((icode&0xf0)<<8); // this will in effect be signed @@ -677,10 +683,10 @@ static void ADPCM (void) { // Work in progress! :) for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; } l1=a[6]; l2=a[7]; @@ -747,10 +753,10 @@ static void ADPCM (void) { // Work in progress! :) for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; } l1=a[6]; l2=a[7]; @@ -806,7 +812,7 @@ static void DMEMMOVE (void) { // Doesn't sound just right?... will fix when HLE //memcpy (BufferSpace+v1, BufferSpace+v0, count-1); for (cnt = 0; cnt < count; cnt++) { - *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); + *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); } } @@ -819,17 +825,17 @@ static void LOADADPCM (void) { // Loads an ADPCM table - Works 100% Now 03-13-01 //assert ((inst1&0xffff) <= 0x80); u16 *table = (u16 *)(rsp.RDRAM+v0); for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { - adpcmtable[0x1+(x<<3)] = table[0]; - adpcmtable[0x0+(x<<3)] = table[1]; + adpcmtable[0x0+(x<<3)^S] = table[0]; + adpcmtable[0x1+(x<<3)^S] = table[1]; - adpcmtable[0x3+(x<<3)] = table[2]; - adpcmtable[0x2+(x<<3)] = table[3]; + adpcmtable[0x2+(x<<3)^S] = table[2]; + adpcmtable[0x3+(x<<3)^S] = table[3]; - adpcmtable[0x5+(x<<3)] = table[4]; - adpcmtable[0x4+(x<<3)] = table[5]; + adpcmtable[0x4+(x<<3)^S] = table[4]; + adpcmtable[0x5+(x<<3)^S] = table[5]; - adpcmtable[0x7+(x<<3)] = table[6]; - adpcmtable[0x6+(x<<3)] = table[7]; + adpcmtable[0x6+(x<<3)^S] = table[6]; + adpcmtable[0x7+(x<<3)^S] = table[7]; table += 8; } } @@ -840,7 +846,7 @@ static void INTERLEAVE (void) { // Works... - 3-11-01 u16 *outbuff = (u16 *)(AudioOutBuffer+BufferSpace); u16 *inSrcR; u16 *inSrcL; - u16 Left, Right; + u16 Left, Right, Left2, Right2; inL = inst2 & 0xFFFF; inR = (inst2 >> 16) & 0xFFFF; @@ -851,11 +857,20 @@ static void INTERLEAVE (void) { // Works... - 3-11-01 for (int x = 0; x < (AudioCount/4); x++) { Left=*(inSrcL++); Right=*(inSrcR++); - - *(outbuff++)=*(inSrcR++); - *(outbuff++)=*(inSrcL++); - *(outbuff++)=(u16)Right; - *(outbuff++)=(u16)Left; + Left2=*(inSrcL++); + Right2=*(inSrcR++); + +#ifdef _BIG_ENDIAN + *(outbuff++)=Right; + *(outbuff++)=Left; + *(outbuff++)=Right2; + *(outbuff++)=Left2; +#else + *(outbuff++)=Right2; + *(outbuff++)=Left2; + *(outbuff++)=Right; + *(outbuff++)=Left; +#endif } } diff --git a/src/ucode2.cpp b/src/ucode2.cpp index edc8ba4..0ab3591 100644 --- a/src/ucode2.cpp +++ b/src/ucode2.cpp @@ -48,23 +48,25 @@ extern u16 ResampleLUT [0x200]; bool isMKABI = false; bool isZeldaABI = false; +void init_ucode2() { isMKABI = isZeldaABI = false; } + static void LOADADPCM2 (void) { // Loads an ADPCM table - Works 100% Now 03-13-01 u32 v0; v0 = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; u16 *table = (u16 *)(rsp.RDRAM+v0); // Zelda2 Specific... for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { - adpcmtable[0x1+(x<<3)] = table[0]; - adpcmtable[0x0+(x<<3)] = table[1]; + adpcmtable[0x0+(x<<3)^S] = table[0]; + adpcmtable[0x1+(x<<3)^S] = table[1]; - adpcmtable[0x3+(x<<3)] = table[2]; - adpcmtable[0x2+(x<<3)] = table[3]; + adpcmtable[0x2+(x<<3)^S] = table[2]; + adpcmtable[0x3+(x<<3)^S] = table[3]; - adpcmtable[0x5+(x<<3)] = table[4]; - adpcmtable[0x4+(x<<3)] = table[5]; + adpcmtable[0x4+(x<<3)^S] = table[4]; + adpcmtable[0x5+(x<<3)^S] = table[5]; - adpcmtable[0x7+(x<<3)] = table[6]; - adpcmtable[0x6+(x<<3)] = table[7]; + adpcmtable[0x6+(x<<3)^S] = table[6]; + adpcmtable[0x7+(x<<3)^S] = table[7]; table += 8; } } @@ -138,13 +140,13 @@ static void ADPCM2 (void) { // Verified to be 100% Accurate... } } - int l1=out[15]; - int l2=out[14]; + int l1=out[14^S]; + int l2=out[15^S]; int inp1[8]; int inp2[8]; out+=16; while(count>0) { - code=BufferSpace[(AudioInBuffer+inPtr)^3]; + code=BufferSpace[(AudioInBuffer+inPtr)^S8]; index=code&0xf; index<<=4; book1=(short *)&adpcmtable[index]; @@ -156,7 +158,7 @@ static void ADPCM2 (void) { // Verified to be 100% Accurate... j=0; while(j<8) { - icode=BufferSpace[(AudioInBuffer+inPtr)^3]; + icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; inPtr++; inp1[j]=(s16)((icode&mask1) << 8); // this will in effect be signed @@ -186,7 +188,7 @@ static void ADPCM2 (void) { // Verified to be 100% Accurate... j=0; while(j<8) { - icode=BufferSpace[(AudioInBuffer+inPtr)^3]; + icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; inPtr++; inp2[j]=(s16)((icode&mask1) << 8); @@ -274,10 +276,10 @@ static void ADPCM2 (void) { // Verified to be 100% Accurate... for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; } l1=a[6]; l2=a[7]; @@ -344,10 +346,10 @@ static void ADPCM2 (void) { // Verified to be 100% Accurate... for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; } l1=a[6]; l2=a[7]; @@ -384,12 +386,12 @@ static void MIXER2 (void) { // Needs accuracy verification... u16 dmemin = (u16)(inst2 >> 0x10); u16 dmemout = (u16)(inst2 & 0xFFFF); u32 count = ((inst1 >> 12) & 0xFF0); - s32 gain = (s16)(inst1 & 0xFFFF)*2; + s32 gain = (s16)(inst1 & 0xFFFF); s32 temp; for (unsigned int x=0; x < count; x+=2) { // I think I can do this a lot easier - temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 16; + temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 15; temp += *(s16 *)(BufferSpace+dmemout+x); if ((s32)temp > 32767) @@ -425,11 +427,11 @@ static void RESAMPLE2 (void) { if ((Flags & 0x1) == 0) { for (int x=0; x < 4; x++) //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); - src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; + src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; Accum = *(u16 *)(rsp.RDRAM+addy+10); } else { for (int x=0; x < 4; x++) - src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); } for(int i=0;i < ((AudioCount+0xf)&0xFFF0)/2;i++) { @@ -437,29 +439,29 @@ static void RESAMPLE2 (void) { //location = (Accum >> 0xa) << 0x3; lut = (s16 *)(((u8 *)ResampleLUT) + location); - temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); + temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); accum = (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); + temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); + temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); + temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); accum += (s32)(temp >> 15); if (accum > 32767) accum = 32767; if (accum < -32768) accum = -32768; - dst[dstPtr^1] = (s16)(accum); + dst[dstPtr^S] = (s16)(accum); dstPtr++; Accum += Pitch; srcPtr += (Accum>>16); Accum&=0xffff; } for (int x=0; x < 4; x++) - ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; + ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; *(u16 *)(rsp.RDRAM+addy+10) = (u16)Accum; //memcpy (RSWORK, src+srcPtr, 0x8); } @@ -479,7 +481,7 @@ static void DMEMMOVE2 (void) { // Needs accuracy verification... //memcpy (dmem+v1, dmem+v0, count-1); for (cnt = 0; cnt < count; cnt++) { - *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); + *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); } } @@ -554,59 +556,59 @@ static void ENVMIXER2 (void) { while (count > 0) { int temp, x; for (x=0; x < 0x8; x++) { - vec9 = (s16)(((s32)buffs3[x^1] * (u32)env[0]) >> 0x10) ^ v2[0]; - vec10 = (s16)(((s32)buffs3[x^1] * (u32)env[2]) >> 0x10) ^ v2[1]; - temp = bufft6[x^1] + vec9; + vec9 = (s16)(((s32)buffs3[x^S] * (u32)env[0]) >> 0x10) ^ v2[0]; + vec10 = (s16)(((s32)buffs3[x^S] * (u32)env[2]) >> 0x10) ^ v2[1]; + temp = bufft6[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - bufft6[x^1] = temp; - temp = bufft7[x^1] + vec10; + bufft6[x^S] = temp; + temp = bufft7[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - bufft7[x^1] = temp; + bufft7[x^S] = temp; vec9 = (s16)(((s32)vec9 * (u32)env[4]) >> 0x10) ^ v2[2]; vec10 = (s16)(((s32)vec10 * (u32)env[4]) >> 0x10) ^ v2[3]; if (inst1 & 0x10) { - temp = buffs0[x^1] + vec10; + temp = buffs0[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs0[x^1] = temp; - temp = buffs1[x^1] + vec9; + buffs0[x^S] = temp; + temp = buffs1[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs1[x^1] = temp; + buffs1[x^S] = temp; } else { - temp = buffs0[x^1] + vec9; + temp = buffs0[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs0[x^1] = temp; - temp = buffs1[x^1] + vec10; + buffs0[x^S] = temp; + temp = buffs1[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs1[x^1] = temp; + buffs1[x^S] = temp; } } if (!isMKABI) for (x=0x8; x < 0x10; x++) { - vec9 = (s16)(((s32)buffs3[x^1] * (u32)env[1]) >> 0x10) ^ v2[0]; - vec10 = (s16)(((s32)buffs3[x^1] * (u32)env[3]) >> 0x10) ^ v2[1]; - temp = bufft6[x^1] + vec9; + vec9 = (s16)(((s32)buffs3[x^S] * (u32)env[1]) >> 0x10) ^ v2[0]; + vec10 = (s16)(((s32)buffs3[x^S] * (u32)env[3]) >> 0x10) ^ v2[1]; + temp = bufft6[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - bufft6[x^1] = temp; - temp = bufft7[x^1] + vec10; + bufft6[x^S] = temp; + temp = bufft7[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - bufft7[x^1] = temp; + bufft7[x^S] = temp; vec9 = (s16)(((s32)vec9 * (u32)env[5]) >> 0x10) ^ v2[2]; vec10 = (s16)(((s32)vec10 * (u32)env[5]) >> 0x10) ^ v2[3]; if (inst1 & 0x10) { - temp = buffs0[x^1] + vec10; + temp = buffs0[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs0[x^1] = temp; - temp = buffs1[x^1] + vec9; + buffs0[x^S] = temp; + temp = buffs1[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs1[x^1] = temp; + buffs1[x^S] = temp; } else { - temp = buffs0[x^1] + vec9; + temp = buffs0[x^S] + vec9; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs0[x^1] = temp; - temp = buffs1[x^1] + vec10; + buffs0[x^S] = temp; + temp = buffs1[x^S] + vec10; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - buffs1[x^1] = temp; + buffs1[x^S] = temp; } } bufft6 += adder; bufft7 += adder; @@ -674,7 +676,7 @@ static void INTERL2 (void) { src=(unsigned char *)(BufferSpace);//[In]; dst=(unsigned char *)(BufferSpace);//[Out]; while(Count) { - *(short *)(dst+(Out^3)) = *(short *)(src+(In^3)); + *(short *)(dst+(Out^S8)) = *(short *)(src+(In^S8)); Out += 2; In += 4; Count--; @@ -686,7 +688,7 @@ static void INTERLEAVE2 (void) { // Needs accuracy verification... u16 *outbuff; u16 *inSrcR; u16 *inSrcL; - u16 Left, Right; + u16 Left, Right, Left2, Right2; u32 count; count = ((inst1 >> 12) & 0xFF0); if (count == 0) { @@ -705,11 +707,20 @@ static void INTERLEAVE2 (void) { // Needs accuracy verification... for (u32 x = 0; x < (count/4); x++) { Left=*(inSrcL++); Right=*(inSrcR++); - - *(outbuff++)=*(inSrcR++); - *(outbuff++)=*(inSrcL++); - *(outbuff++)=(u16)Right; - *(outbuff++)=(u16)Left; + Left2=*(inSrcL++); + Right2=*(inSrcR++); + +#ifdef _BIG_ENDIAN + *(outbuff++)=Right; + *(outbuff++)=Left; + *(outbuff++)=Right2; + *(outbuff++)=Left2; +#else + *(outbuff++)=Right2; + *(outbuff++)=Left2; + *(outbuff++)=Right; + *(outbuff++)=Left; +#endif } } @@ -725,7 +736,8 @@ static void ADDMIXER (void) { for (int cntr = 0; cntr < Count; cntr+=2) { temp = *outp + *inp; if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; - outp++; inp++; + *(outp++) = temp; + inp++; } } diff --git a/src/ucode3.cpp b/src/ucode3.cpp index 302e75b..ad8db73 100644 --- a/src/ucode3.cpp +++ b/src/ucode3.cpp @@ -77,17 +77,17 @@ static void SETVOL3 (void) { u8 Flags = (u8)(inst1 >> 0x10); if (Flags & 0x4) { // 288 if (Flags & 0x2) { // 290 - Vol_Left = *(s16*)&inst1; // 0x50 - Env_Dry = (s16)(*(s32*)&inst2 >> 0x10); // 0x4E - Env_Wet = *(s16*)&inst2; // 0x4C + Vol_Left = (s16)inst1; // 0x50 + Env_Dry = (s16)(inst2 >> 0x10); // 0x4E + Env_Wet = (s16)inst2; // 0x4C } else { - VolTrg_Right = *(s16*)&inst1; // 0x46 + VolTrg_Right = (s16)inst1; // 0x46 //VolRamp_Right = (u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); - VolRamp_Right = *(s32*)&inst2; // 0x48/0x4A + VolRamp_Right = (s32)inst2; // 0x48/0x4A } } else { - VolTrg_Left = *(s16*)&inst1; // 0x40 - VolRamp_Left = *(s32*)&inst2; // 0x42/0x44 + VolTrg_Left = (s16)inst1; // 0x40 + VolRamp_Left = (s32)inst2; // 0x42/0x44 } } @@ -115,7 +115,7 @@ static void ENVMIXER3 (void) { s16 Wet, Dry; s16 LTrg, RTrg; - Vol_Right = (*(s16 *)&inst1); + Vol_Right = (s16)inst1; if (flags & A_INIT) { LAdder = VolRamp_Left / 8; @@ -191,9 +191,9 @@ static void ENVMIXER3 (void) { MainL = ((Dry * LVol) + 0x4000) >> 15; MainR = ((Dry * RVol) + 0x4000) >> 15; - o1 = out [y^1]; - a1 = aux1[y^1]; - i1 = inp [y^1]; + o1 = out [y^S]; + a1 = aux1[y^S]; + i1 = inp [y^S]; o1+=((i1*MainL)+0x4000)>>15; a1+=((i1*MainR)+0x4000)>>15; @@ -208,13 +208,13 @@ static void ENVMIXER3 (void) { // **************************************************************** - out[y^1]=o1; - aux1[y^1]=a1; + out[y^S]=o1; + aux1[y^S]=a1; // **************************************************************** //if (!(flags&A_AUX)) { - a2 = aux2[y^1]; - a3 = aux3[y^1]; + a2 = aux2[y^S]; + a3 = aux3[y^S]; AuxL = ((Wet * LVol) + 0x4000) >> 15; AuxR = ((Wet * RVol) + 0x4000) >> 15; @@ -228,8 +228,8 @@ static void ENVMIXER3 (void) { if(a3>32767) a3=32767; else if(a3<-32768) a3=-32768; - aux2[y^1]=a2; - aux3[y^1]=a3; + aux2[y^S]=a2; + aux3[y^S]=a3; } //} @@ -278,7 +278,7 @@ static void ENVMIXER3o (void) { s16 Wet, Dry; //fprintf (dfile, "\n----------------------------------------------------\n"); - Vol_Right = (*(s16 *)&inst1); + Vol_Right = inst1; if (flags & A_INIT) { LVol = (((s32)(s16)Vol_Left * VolRamp_Left) - ((s32)(s16)Vol_Left << 16)) >> 3; RVol = (((s32)(s16)Vol_Right * VolRamp_Right) - ((s32)(s16)Vol_Right << 16)) >> 3; @@ -310,12 +310,12 @@ static void ENVMIXER3o (void) { //fprintf (dfile, "LTrg = %08X, LVol = %08X\n", LTrg, LVol); for (int x=0; x<(0x170/2); x++) { - i1=(int)inp[x^1]; - o1=(int)out[x^1]; - a1=(int)aux1[x^1]; + i1=(int)inp[x^S]; + o1=(int)out[x^S]; + a1=(int)aux1[x^S]; if (AuxIncRate) { - a2=(int)aux2[x^1]; - a3=(int)aux3[x^1]; + a2=(int)aux2[x^S]; + a3=(int)aux3[x^S]; } // TODO: here... //LAcc = (LTrg << 16); @@ -378,8 +378,8 @@ static void ENVMIXER3o (void) { if(a1>32767) a1=32767; else if(a1<-32768) a1=-32768; - out[x^1]=o1; - aux1[x^1]=a1; + out[x^S]=o1; + aux1[x^S]=a1; if (AuxIncRate) { a2+=(/*(a2*0x7fff)+*/(i1*AuxR)+0x4000)>>15; a3+=(/*(a3*0x7fff)+*/(i1*AuxL)+0x4000)>>15; @@ -390,8 +390,8 @@ static void ENVMIXER3o (void) { if(a3>32767) a3=32767; else if(a3<-32768) a3=-32768; - aux2[x^1]=a2; - aux3[x^1]=a3; + aux2[x^S]=a2; + aux3[x^S]=a3; } } @@ -495,11 +495,11 @@ static void MIXER3 (void) { // Needs accuracy verification... u16 dmemin = (u16)(inst2 >> 0x10) + 0x4f0; u16 dmemout = (u16)(inst2 & 0xFFFF) + 0x4f0; //u8 flags = (u8)((inst1 >> 16) & 0xff); - s32 gain = (s16)(inst1 & 0xFFFF)*2; + s32 gain = (s16)(inst1 & 0xFFFF); s32 temp; - for (int x=0; x < 0x170; x+=2) { // I think I can do this a lot easier - temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 16; + for (int x=0; x < 0x170; x+=2) { // I think I can do this a lot easier + temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 15; temp += *(s16 *)(BufferSpace+dmemout+x); if ((s32)temp > 32767) @@ -534,17 +534,17 @@ static void LOADADPCM3 (void) { // Loads an ADPCM table - Works 100% Now 03-13-0 //assert ((inst1&0xffff) <= 0x80); u16 *table = (u16 *)(rsp.RDRAM+v0); for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { - adpcmtable[0x1+(x<<3)] = table[0]; - adpcmtable[0x0+(x<<3)] = table[1]; + adpcmtable[0x0+(x<<3)^S] = table[0]; + adpcmtable[0x1+(x<<3)^S] = table[1]; - adpcmtable[0x3+(x<<3)] = table[2]; - adpcmtable[0x2+(x<<3)] = table[3]; + adpcmtable[0x2+(x<<3)^S] = table[2]; + adpcmtable[0x3+(x<<3)^S] = table[3]; - adpcmtable[0x5+(x<<3)] = table[4]; - adpcmtable[0x4+(x<<3)] = table[5]; + adpcmtable[0x4+(x<<3)^S] = table[4]; + adpcmtable[0x5+(x<<3)^S] = table[5]; - adpcmtable[0x7+(x<<3)] = table[6]; - adpcmtable[0x6+(x<<3)] = table[7]; + adpcmtable[0x6+(x<<3)^S] = table[6]; + adpcmtable[0x7+(x<<3)^S] = table[7]; table += 8; } } @@ -558,7 +558,7 @@ static void DMEMMOVE3 (void) { // Needs accuracy verification... //memcpy (dmem+v1, dmem+v0, count-1); for (cnt = 0; cnt < count; cnt++) { - *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); + *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); } } @@ -605,8 +605,8 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... } } - int l1=out[15]; - int l2=out[14]; + int l1=out[14^S]; + int l2=out[15^S]; int inp1[8]; int inp2[8]; out+=16; @@ -617,7 +617,7 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... // area of memory in the case of A_LOOP or just // the values we calculated the last time - code=BufferSpace[(0x4f0+inPtr)^3]; + code=BufferSpace[(0x4f0+inPtr)^S8]; index=code&0xf; index<<=4; // index into the adpcm code table book1=(short *)&adpcmtable[index]; @@ -635,7 +635,7 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... while(j<8) // loop of 8, for 8 coded nibbles from 4 bytes // which yields 8 short pcm values { - icode=BufferSpace[(0x4f0+inPtr)^3]; + icode=BufferSpace[(0x4f0+inPtr)^S8]; inPtr++; inp1[j]=(s16)((icode&0xf0)<<8); // this will in effect be signed @@ -655,7 +655,7 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... j=0; while(j<8) { - icode=BufferSpace[(0x4f0+inPtr)^3]; + icode=BufferSpace[(0x4f0+inPtr)^S8]; inPtr++; inp2[j]=(short)((icode&0xf0)<<8); // this will in effect be signed @@ -735,11 +735,11 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; - //*(out+j)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; + //*(out+j)=a[j^S]; } //out += 0x10; l1=a[6]; @@ -807,11 +807,11 @@ static void ADPCM3 (void) { // Verified to be 100% Accurate... for(j=0;j<8;j++) { - a[j^1]>>=11; - if(a[j^1]>32767) a[j^1]=32767; - else if(a[j^1]<-32768) a[j^1]=-32768; - *(out++)=a[j^1]; - //*(out+j+0x1f8)=a[j^1]; + a[j^S]>>=11; + if(a[j^S]>32767) a[j^S]=32767; + else if(a[j^S]<-32768) a[j^S]=-32768; + *(out++)=a[j^S]; + //*(out+j+0x1f8)=a[j^S]; } l1=a[6]; l2=a[7]; @@ -851,11 +851,11 @@ static void RESAMPLE3 (void) { if ((Flags & 0x1) == 0) { for (int x=0; x < 4; x++) //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); - src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; + src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; Accum = *(u16 *)(rsp.RDRAM+addy+10); } else { for (int x=0; x < 4; x++) - src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); } for(int i=0;i < 0x170/2;i++) { @@ -863,18 +863,18 @@ static void RESAMPLE3 (void) { //location = (Accum >> 0xa) << 0x3; lut = (s16 *)(((u8 *)ResampleLUT) + location); - temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); + temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); accum = (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); + temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); + temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); accum += (s32)(temp >> 15); - temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); + temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); accum += (s32)(temp >> 15); -/* temp = ((s64)*(s16*)(src+((srcPtr+0)^1))*((s64)((s16)lut[0]<<1))); +/* temp = ((s64)*(s16*)(src+((srcPtr+0)^S))*((s64)((s16)lut[0]<<1))); if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; else temp = (temp^0x8000); temp = (s32)(temp >> 16); @@ -882,7 +882,7 @@ static void RESAMPLE3 (void) { if ((s32)temp < -32768) temp = -32768; accum = (s32)(s16)temp; - temp = ((s64)*(s16*)(src+((srcPtr+1)^1))*((s64)((s16)lut[1]<<1))); + temp = ((s64)*(s16*)(src+((srcPtr+1)^S))*((s64)((s16)lut[1]<<1))); if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; else temp = (temp^0x8000); temp = (s32)(temp >> 16); @@ -890,7 +890,7 @@ static void RESAMPLE3 (void) { if ((s32)temp < -32768) temp = -32768; accum += (s32)(s16)temp; - temp = ((s64)*(s16*)(src+((srcPtr+2)^1))*((s64)((s16)lut[2]<<1))); + temp = ((s64)*(s16*)(src+((srcPtr+2)^S))*((s64)((s16)lut[2]<<1))); if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; else temp = (temp^0x8000); temp = (s32)(temp >> 16); @@ -898,7 +898,7 @@ static void RESAMPLE3 (void) { if ((s32)temp < -32768) temp = -32768; accum += (s32)(s16)temp; - temp = ((s64)*(s16*)(src+((srcPtr+3)^1))*((s64)((s16)lut[3]<<1))); + temp = ((s64)*(s16*)(src+((srcPtr+3)^S))*((s64)((s16)lut[3]<<1))); if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; else temp = (temp^0x8000); temp = (s32)(temp >> 16); @@ -909,14 +909,14 @@ static void RESAMPLE3 (void) { if (accum > 32767) accum = 32767; if (accum < -32768) accum = -32768; - dst[dstPtr^1] = (accum); + dst[dstPtr^S] = (accum); dstPtr++; Accum += Pitch; srcPtr += (Accum>>16); Accum&=0xffff; } for (int x=0; x < 4; x++) - ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; + ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; *(u16 *)(rsp.RDRAM+addy+10) = Accum; } @@ -925,7 +925,7 @@ static void INTERLEAVE3 (void) { // Needs accuracy verification... u16 *outbuff = (u16 *)(BufferSpace + 0x4f0);//(u16 *)(AudioOutBuffer+dmem); u16 *inSrcR; u16 *inSrcL; - u16 Left, Right; + u16 Left, Right, Left2, Right2; //inR = inst2 & 0xFFFF; //inL = (inst2 >> 16) & 0xFFFF; @@ -936,11 +936,20 @@ static void INTERLEAVE3 (void) { // Needs accuracy verification... for (int x = 0; x < (0x170/4); x++) { Left=*(inSrcL++); Right=*(inSrcR++); - - *(outbuff++)=*(inSrcR++); - *(outbuff++)=*(inSrcL++); - *(outbuff++)=(u16)Right; - *(outbuff++)=(u16)Left; + Left2=*(inSrcL++); + Right2=*(inSrcR++); + +#ifdef _BIG_ENDIAN + *(outbuff++)=Right; + *(outbuff++)=Left; + *(outbuff++)=Right2; + *(outbuff++)=Left2; +#else + *(outbuff++)=Right2; + *(outbuff++)=Left2; + *(outbuff++)=Right; + *(outbuff++)=Left; +#endif /* Left=*(inSrcL++); Right=*(inSrcR++); diff --git a/src/ucode3mp3.cpp b/src/ucode3mp3.cpp index 5297521..b0ff4b5 100644 --- a/src/ucode3mp3.cpp +++ b/src/ucode3mp3.cpp @@ -257,25 +257,25 @@ static void InnerLoop () { // Part 1: 100% Accurate int i; - v[0] = *(s16 *)(mp3data+inPtr+(0x00^2)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^2)); v[0] += v[31]; - v[1] = *(s16 *)(mp3data+inPtr+(0x02^2)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^2)); v[1] += v[30]; - v[2] = *(s16 *)(mp3data+inPtr+(0x06^2)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^2)); v[2] += v[28]; - v[3] = *(s16 *)(mp3data+inPtr+(0x04^2)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^2)); v[3] += v[29]; - - v[4] = *(s16 *)(mp3data+inPtr+(0x0E^2)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^2)); v[4] += v[24]; - v[5] = *(s16 *)(mp3data+inPtr+(0x0C^2)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^2)); v[5] += v[25]; - v[6] = *(s16 *)(mp3data+inPtr+(0x08^2)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^2)); v[6] += v[27]; - v[7] = *(s16 *)(mp3data+inPtr+(0x0A^2)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^2)); v[7] += v[26]; - - v[8] = *(s16 *)(mp3data+inPtr+(0x1E^2)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^2)); v[8] += v[16]; - v[9] = *(s16 *)(mp3data+inPtr+(0x1C^2)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^2)); v[9] += v[17]; - v[10]= *(s16 *)(mp3data+inPtr+(0x18^2)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^2)); v[10]+= v[19]; - v[11]= *(s16 *)(mp3data+inPtr+(0x1A^2)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^2)); v[11]+= v[18]; - - v[12]= *(s16 *)(mp3data+inPtr+(0x10^2)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^2)); v[12]+= v[23]; - v[13]= *(s16 *)(mp3data+inPtr+(0x12^2)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^2)); v[13]+= v[22]; - v[14]= *(s16 *)(mp3data+inPtr+(0x16^2)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^2)); v[14]+= v[20]; - v[15]= *(s16 *)(mp3data+inPtr+(0x14^2)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^2)); v[15]+= v[21]; + v[0] = *(s16 *)(mp3data+inPtr+(0x00^S16)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^S16)); v[0] += v[31]; + v[1] = *(s16 *)(mp3data+inPtr+(0x02^S16)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^S16)); v[1] += v[30]; + v[2] = *(s16 *)(mp3data+inPtr+(0x06^S16)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^S16)); v[2] += v[28]; + v[3] = *(s16 *)(mp3data+inPtr+(0x04^S16)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^S16)); v[3] += v[29]; + + v[4] = *(s16 *)(mp3data+inPtr+(0x0E^S16)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^S16)); v[4] += v[24]; + v[5] = *(s16 *)(mp3data+inPtr+(0x0C^S16)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^S16)); v[5] += v[25]; + v[6] = *(s16 *)(mp3data+inPtr+(0x08^S16)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^S16)); v[6] += v[27]; + v[7] = *(s16 *)(mp3data+inPtr+(0x0A^S16)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^S16)); v[7] += v[26]; + + v[8] = *(s16 *)(mp3data+inPtr+(0x1E^S16)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^S16)); v[8] += v[16]; + v[9] = *(s16 *)(mp3data+inPtr+(0x1C^S16)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^S16)); v[9] += v[17]; + v[10]= *(s16 *)(mp3data+inPtr+(0x18^S16)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^S16)); v[10]+= v[19]; + v[11]= *(s16 *)(mp3data+inPtr+(0x1A^S16)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^S16)); v[11]+= v[18]; + + v[12]= *(s16 *)(mp3data+inPtr+(0x10^S16)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^S16)); v[12]+= v[23]; + v[13]= *(s16 *)(mp3data+inPtr+(0x12^S16)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^S16)); v[13]+= v[22]; + v[14]= *(s16 *)(mp3data+inPtr+(0x16^S16)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^S16)); v[14]+= v[20]; + v[15]= *(s16 *)(mp3data+inPtr+(0x14^S16)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^S16)); v[15]+= v[21]; // Part 2-4 @@ -378,25 +378,25 @@ static void InnerLoop () { // Part 6 - 100% Accurate - v[0] = *(s16 *)(mp3data+inPtr+(0x00^2)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^2)); v[0] -= v[31]; - v[1] = *(s16 *)(mp3data+inPtr+(0x02^2)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^2)); v[1] -= v[30]; - v[2] = *(s16 *)(mp3data+inPtr+(0x06^2)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^2)); v[2] -= v[28]; - v[3] = *(s16 *)(mp3data+inPtr+(0x04^2)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^2)); v[3] -= v[29]; + v[0] = *(s16 *)(mp3data+inPtr+(0x00^S16)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^S16)); v[0] -= v[31]; + v[1] = *(s16 *)(mp3data+inPtr+(0x02^S16)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^S16)); v[1] -= v[30]; + v[2] = *(s16 *)(mp3data+inPtr+(0x06^S16)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^S16)); v[2] -= v[28]; + v[3] = *(s16 *)(mp3data+inPtr+(0x04^S16)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^S16)); v[3] -= v[29]; - v[4] = *(s16 *)(mp3data+inPtr+(0x0E^2)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^2)); v[4] -= v[24]; - v[5] = *(s16 *)(mp3data+inPtr+(0x0C^2)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^2)); v[5] -= v[25]; - v[6] = *(s16 *)(mp3data+inPtr+(0x08^2)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^2)); v[6] -= v[27]; - v[7] = *(s16 *)(mp3data+inPtr+(0x0A^2)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^2)); v[7] -= v[26]; + v[4] = *(s16 *)(mp3data+inPtr+(0x0E^S16)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^S16)); v[4] -= v[24]; + v[5] = *(s16 *)(mp3data+inPtr+(0x0C^S16)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^S16)); v[5] -= v[25]; + v[6] = *(s16 *)(mp3data+inPtr+(0x08^S16)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^S16)); v[6] -= v[27]; + v[7] = *(s16 *)(mp3data+inPtr+(0x0A^S16)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^S16)); v[7] -= v[26]; - v[8] = *(s16 *)(mp3data+inPtr+(0x1E^2)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^2)); v[8] -= v[16]; - v[9] = *(s16 *)(mp3data+inPtr+(0x1C^2)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^2)); v[9] -= v[17]; - v[10]= *(s16 *)(mp3data+inPtr+(0x18^2)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^2)); v[10]-= v[19]; - v[11]= *(s16 *)(mp3data+inPtr+(0x1A^2)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^2)); v[11]-= v[18]; + v[8] = *(s16 *)(mp3data+inPtr+(0x1E^S16)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^S16)); v[8] -= v[16]; + v[9] = *(s16 *)(mp3data+inPtr+(0x1C^S16)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^S16)); v[9] -= v[17]; + v[10]= *(s16 *)(mp3data+inPtr+(0x18^S16)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^S16)); v[10]-= v[19]; + v[11]= *(s16 *)(mp3data+inPtr+(0x1A^S16)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^S16)); v[11]-= v[18]; - v[12]= *(s16 *)(mp3data+inPtr+(0x10^2)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^2)); v[12]-= v[23]; - v[13]= *(s16 *)(mp3data+inPtr+(0x12^2)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^2)); v[13]-= v[22]; - v[14]= *(s16 *)(mp3data+inPtr+(0x16^2)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^2)); v[14]-= v[20]; - v[15]= *(s16 *)(mp3data+inPtr+(0x14^2)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^2)); v[15]-= v[21]; + v[12]= *(s16 *)(mp3data+inPtr+(0x10^S16)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^S16)); v[12]-= v[23]; + v[13]= *(s16 *)(mp3data+inPtr+(0x12^S16)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^S16)); v[13]-= v[22]; + v[14]= *(s16 *)(mp3data+inPtr+(0x16^S16)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^S16)); v[14]-= v[20]; + v[15]= *(s16 *)(mp3data+inPtr+(0x14^S16)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^S16)); v[15]-= v[21]; //0, 1, 3, 2, 7, 6, 4, 5, 7, 6, 4, 5, 0, 1, 3, 2 const u16 LUT6[16] = { 0xFFB2, 0xFD3A, 0xF10A, 0xF854, @@ -517,8 +517,8 @@ static void InnerLoop () { //Clamp(v0); //Clamp(v18); // clamp??? - *(s16 *)(mp3data+(outPtr^2)) = v0; - *(s16 *)(mp3data+((outPtr+2)^2)) = v18; + *(s16 *)(mp3data+(outPtr^S16)) = v0; + *(s16 *)(mp3data+((outPtr+2)^S16)) = v18; outPtr+=4; addptr += 0x30; offset += 0x38; @@ -538,10 +538,10 @@ static void InnerLoop () { s32 mult4 = *(s32 *)(mp3data+0xCEC); if (t4 & 0x2) { v2 = (v2 * *(u32 *)(mp3data+0xCE8)) >> 0x10; - *(s16 *)(mp3data+(outPtr^2)) = v2; + *(s16 *)(mp3data+(outPtr^S16)) = v2; } else { v4 = (v4 * *(u32 *)(mp3data+0xCE8)) >> 0x10; - *(s16 *)(mp3data+(outPtr^2)) = v4; + *(s16 *)(mp3data+(outPtr^S16)) = v4; mult4 = *(u32 *)(mp3data+0xCE8); } addptr -= 0x50; @@ -567,8 +567,8 @@ static void InnerLoop () { //Clamp(v0); //Clamp(v18); // clamp??? - *(s16 *)(mp3data+((outPtr+2)^2)) = v0; - *(s16 *)(mp3data+((outPtr+4)^2)) = v18; + *(s16 *)(mp3data+((outPtr+2)^S16)) = v0; + *(s16 *)(mp3data+((outPtr+4)^S16)) = v18; outPtr+=4; addptr -= 0x50; } @@ -582,21 +582,21 @@ static void InnerLoop () { hi1 = (int)hi1 >> 0x10; for (i = 0; i < 8; i++) { // v0 - v = (*(s16 *)(mp3data+((tmp-0x40)^2)) * hi0); + v = (*(s16 *)(mp3data+((tmp-0x40)^S16)) * hi0); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; - *(s16 *)((u8 *)mp3data+((tmp-0x40)^2)) = (s16)v; + *(s16 *)((u8 *)mp3data+((tmp-0x40)^S16)) = (s16)v; // v17 - v = (*(s16 *)(mp3data+((tmp-0x30)^2)) * hi0); + v = (*(s16 *)(mp3data+((tmp-0x30)^S16)) * hi0); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; - *(s16 *)((u8 *)mp3data+((tmp-0x30)^2)) = v; + *(s16 *)((u8 *)mp3data+((tmp-0x30)^S16)) = v; // v2 - v = (*(s16 *)(mp3data+((tmp-0x1E)^2)) * hi1); + v = (*(s16 *)(mp3data+((tmp-0x1E)^S16)) * hi1); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; - *(s16 *)((u8 *)mp3data+((tmp-0x1E)^2)) = v; + *(s16 *)((u8 *)mp3data+((tmp-0x1E)^S16)) = v; // v4 - v = (*(s16 *)(mp3data+((tmp-0xE)^2)) * hi1); + v = (*(s16 *)(mp3data+((tmp-0xE)^S16)) * hi1); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; - *(s16 *)((u8 *)mp3data+((tmp-0xE)^2)) = v; + *(s16 *)((u8 *)mp3data+((tmp-0xE)^S16)) = v; tmp += 2; } } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus-rsp-hle.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

