X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fdfsound%2Fxa.c;h=397ed592f7dd2b61043bb3ddffbc526c4cf6a5e7;hb=dc4fa8bcd7d8fb9ccd6c742a350f69e0683350e0;hp=d63e83cc5e6362c29f85988e831e5059b358a454;hpb=609d9ea53d1b2d4c5398066ca7899179b466040a;p=pcsx_rearmed.git diff --git a/plugins/dfsound/xa.c b/plugins/dfsound/xa.c index d63e83cc..397ed592 100644 --- a/plugins/dfsound/xa.c +++ b/plugins/dfsound/xa.c @@ -16,6 +16,7 @@ ***************************************************************************/ #include "stdafx.h" +#include "spu.h" #define _IN_XA #include @@ -60,8 +61,8 @@ INLINE void MixXA(int *SSumLR, int ns_to, int decode_pos) SSumLR[ns++] += l; SSumLR[ns++] += r; - spu.spuMem[cursor] = v; - spu.spuMem[cursor + 0x400/2] = v >> 16; + spu.spuMem[cursor] = HTOLE16(v); + spu.spuMem[cursor + 0x400/2] = HTOLE16(v >> 16); cursor = (cursor + 1) & 0x1ff; } spu.XALastVal = v; @@ -80,8 +81,8 @@ INLINE void MixXA(int *SSumLR, int ns_to, int decode_pos) SSumLR[ns++] += l; SSumLR[ns++] += r; - spu.spuMem[cursor] = v; - spu.spuMem[cursor + 0x400/2] = v >> 16; + spu.spuMem[cursor] = HTOLE16(v); + spu.spuMem[cursor + 0x400/2] = HTOLE16(v >> 16); cursor = (cursor + 1) & 0x1ff; } spu.XALastVal = v; @@ -120,7 +121,7 @@ INLINE void FeedXA(xa_decode_t *xap) if(!spu.bSPUIsOpen) return; spu.xapGlobal = xap; // store info for save states - spu.XARepeat = 100; // set up repeat + spu.XARepeat = 3; // set up repeat #if 0//def XA_HACK iSize=((45500*xap->nsamples)/xap->freq); // get size @@ -200,16 +201,16 @@ INLINE void FeedXA(xa_decode_t *xap) spos -= 0x10000L; } vl = (spos >> 6) & ~3; - vr=(gauss[vl]*gvall0)&~2047; - vr+=(gauss[vl+1]*gvall(1))&~2047; - vr+=(gauss[vl+2]*gvall(2))&~2047; - vr+=(gauss[vl+3]*gvall(3))&~2047; - l= (vr >> 11) & 0xffff; - vr=(gauss[vl]*gvalr0)&~2047; - vr+=(gauss[vl+1]*gvalr(1))&~2047; - vr+=(gauss[vl+2]*gvalr(2))&~2047; - vr+=(gauss[vl+3]*gvalr(3))&~2047; - l |= vr << 5; + vr=(gauss[vl]*gvall0) >> 15; + vr+=(gauss[vl+1]*gvall(1)) >> 15; + vr+=(gauss[vl+2]*gvall(2)) >> 15; + vr+=(gauss[vl+3]*gvall(3)) >> 15; + l= vr & 0xffff; + vr=(gauss[vl]*gvalr0) >> 15; + vr+=(gauss[vl+1]*gvalr(1)) >> 15; + vr+=(gauss[vl+2]*gvalr(2)) >> 15; + vr+=(gauss[vl+3]*gvalr(3)) >> 15; + l |= vr << 16; } else { @@ -258,16 +259,16 @@ INLINE void FeedXA(xa_decode_t *xap) spos -= 0x10000L; } vl = (spos >> 6) & ~3; - vr=(gauss[vl]*gvall0)&~2047; - vr+=(gauss[vl+1]*gvall(1))&~2047; - vr+=(gauss[vl+2]*gvall(2))&~2047; - vr+=(gauss[vl+3]*gvall(3))&~2047; - l= (vr >> 11) & 0xffff; - vr=(gauss[vl]*gvalr0)&~2047; - vr+=(gauss[vl+1]*gvalr(1))&~2047; - vr+=(gauss[vl+2]*gvalr(2))&~2047; - vr+=(gauss[vl+3]*gvalr(3))&~2047; - l |= vr << 5; + vr=(gauss[vl]*gvall0) >> 15; + vr+=(gauss[vl+1]*gvall(1)) >> 15; + vr+=(gauss[vl+2]*gvall(2)) >> 15; + vr+=(gauss[vl+3]*gvall(3)) >> 15; + l= vr & 0xffff; + vr=(gauss[vl]*gvalr0) >> 15; + vr+=(gauss[vl+1]*gvalr(1)) >> 15; + vr+=(gauss[vl+2]*gvalr(2)) >> 15; + vr+=(gauss[vl+3]*gvalr(3)) >> 15; + l |= vr << 16; } else { @@ -311,11 +312,11 @@ INLINE void FeedXA(xa_decode_t *xap) spos -= 0x10000L; } vl = (spos >> 6) & ~3; - vr=(gauss[vl]*gvall0)&~2047; - vr+=(gauss[vl+1]*gvall(1))&~2047; - vr+=(gauss[vl+2]*gvall(2))&~2047; - vr+=(gauss[vl+3]*gvall(3))&~2047; - l1=s= vr >> 11; + vr=(gauss[vl]*gvall0) >> 15; + vr+=(gauss[vl+1]*gvall(1)) >> 15; + vr+=(gauss[vl+2]*gvall(2)) >> 15; + vr+=(gauss[vl+3]*gvall(3)) >> 15; + l1=s= vr; l1 &= 0xffff; } else @@ -357,11 +358,11 @@ INLINE void FeedXA(xa_decode_t *xap) spos -= 0x10000L; } vl = (spos >> 6) & ~3; - vr=(gauss[vl]*gvall0)&~2047; - vr+=(gauss[vl+1]*gvall(1))&~2047; - vr+=(gauss[vl+2]*gvall(2))&~2047; - vr+=(gauss[vl+3]*gvall(3))&~2047; - l=s= vr >> 11; + vr=(gauss[vl]*gvall0) >> 15; + vr+=(gauss[vl+1]*gvall(1)) >> 15; + vr+=(gauss[vl+2]*gvall(2)) >> 15; + vr+=(gauss[vl+3]*gvall(3)) >> 15; + l=s= vr; } else {