X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fxa.c;h=b45aef2743631d265b47b5bb38e8c663290053fe;hp=fdae4f9efe6cdabf210b7fc75179756a5ba40351;hb=deb18d24e522ab1d9860ffa5730559e3e6a6aa5d;hpb=ef79bbde537d6b9c745a7d86cb9df1d04c35590d diff --git a/plugins/dfsound/xa.c b/plugins/dfsound/xa.c index fdae4f9e..b45aef27 100644 --- a/plugins/dfsound/xa.c +++ b/plugins/dfsound/xa.c @@ -22,6 +22,8 @@ // will be included from spu.c #ifdef _IN_SPU +#define XA_HACK + //////////////////////////////////////////////////////////////////////// // XA GLOBALS //////////////////////////////////////////////////////////////////////// @@ -61,40 +63,40 @@ INLINE void MixXA(void) int ns; uint32_t l; - for(ns=0;ns>16)&0xffff)) * iRightXAVol)/32768; + SSumLR[ns++]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32768; + SSumLR[ns++]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32768; #else - SSumL[ns]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32767; - SSumR[ns]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32767; + SSumLR[ns++]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32767; + SSumLR[ns++]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32767; #endif } if(XAPlay==XAFeed && XARepeat) { XARepeat--; - for(;ns>16)&0xffff)) * iRightXAVol)/32768; + SSumLR[ns++]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32768; + SSumLR[ns++]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32768; #else - SSumL[ns]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32767; - SSumR[ns]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32767; + SSumLR[ns++]+=(((short)(XALastVal&0xffff)) * iLeftXAVol)/32767; + SSumLR[ns++]+=(((short)((XALastVal>>16)&0xffff)) * iRightXAVol)/32767; #endif } } - for(ns=0;ns>16)&0xffff)) * iRightXAVol)/32767; + SSumLR[ns++]+=(((short)(l&0xffff)) * iLeftXAVol) >> 15; + SSumLR[ns++]+=(((short)((l>>16)&0xffff)) * iRightXAVol) >> 15; } } @@ -122,7 +124,7 @@ INLINE void FeedXA(xa_decode_t *xap) xapGlobal = xap; // store info for save states XARepeat = 100; // set up repeat -#ifdef XA_HACK +#if 0//def XA_HACK iSize=((45500*xap->nsamples)/xap->freq); // get size #else iSize=((44100*xap->nsamples)/xap->freq); // get size @@ -220,13 +222,11 @@ INLINE void FeedXA(xa_decode_t *xap) s=(short)LOWORD(l); l1=s; l1=(l1*iPlace)/iSize; - if(l1<-32767) l1=-32767; - if(l1> 32767) l1=32767; + ssat32_to_16(l1); s=(short)HIWORD(l); l2=s; l2=(l2*iPlace)/iSize; - if(l2<-32767) l2=-32767; - if(l2> 32767) l2=32767; + ssat32_to_16(l2); l=(l1&0xffff)|(l2<<16); *XAFeed++=l; @@ -326,8 +326,7 @@ INLINE void FeedXA(xa_decode_t *xap) } l1=(l1*iPlace)/iSize; - if(l1<-32767) l1=-32767; - if(l1> 32767) l1=32767; + ssat32_to_16(l1); l=(l1&0xffff)|(l1<<16); *XAFeed++=l; @@ -359,7 +358,6 @@ INLINE void FeedXA(xa_decode_t *xap) vr+=(gauss[vl+2]*gvall(2))&~2047; vr+=(gauss[vl+3]*gvall(3))&~2047; l=s= vr >> 11; - l &= 0xffff; } else { @@ -371,6 +369,7 @@ INLINE void FeedXA(xa_decode_t *xap) l=s; } + l &= 0xffff; *XAFeed++=(l|(l<<16)); if(XAFeed==XAEnd) XAFeed=XAStart;