From 63a4f6b6a3b0315590cd3009df2c92480ed2d98b Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 2 Jan 2015 04:13:50 +0200 Subject: spu: threaded implementation unlike original P.E.Op.S. implementation, the goal here is to carefully avoid any side effects caused by having the thread enabled --- plugins/dfsound/dma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins/dfsound/dma.c') diff --git a/plugins/dfsound/dma.c b/plugins/dfsound/dma.c index d3706b9..8d647ff 100644 --- a/plugins/dfsound/dma.c +++ b/plugins/dfsound/dma.c @@ -43,7 +43,7 @@ void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize, { int i; - do_samples_if_needed(cycles); + do_samples_if_needed(cycles, 1); for(i=0;i>1]; - spu.spuAddr+=2; - if(spu.spuAddr>0x7ffff) spu.spuAddr=0; + unsigned short s = *(unsigned short *)(spu.spuMemC + spu.spuAddr); + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; return s; } @@ -47,9 +47,9 @@ void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize, for(i=0;i>1]; // spu addr got by writeregister - spu.spuAddr+=2; // inc spu addr - if(spu.spuAddr>0x7ffff) spu.spuAddr=0; // wrap + *pusPSXMem++ = *(unsigned short *)(spu.spuMemC + spu.spuAddr); + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; } } @@ -67,10 +67,10 @@ void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize, void CALLBACK SPUwriteDMA(unsigned short val) { - spu.spuMem[spu.spuAddr>>1] = val; // spu addr got by writeregister + *(unsigned short *)(spu.spuMemC + spu.spuAddr) = val; - spu.spuAddr+=2; // inc spu addr - if(spu.spuAddr>0x7ffff) spu.spuAddr=0; // wrap + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; } //////////////////////////////////////////////////////////////////////// @@ -86,16 +86,16 @@ void CALLBACK SPUwriteDMAMem(unsigned short *pusPSXMem, int iSize, if(spu.spuAddr + iSize*2 < 0x80000) { - memcpy(&spu.spuMem[spu.spuAddr>>1], pusPSXMem, iSize*2); + memcpy(spu.spuMemC + spu.spuAddr, pusPSXMem, iSize*2); spu.spuAddr += iSize*2; return; } for(i=0;i>1] = *pusPSXMem++; // spu addr got by writeregister - spu.spuAddr+=2; // inc spu addr - spu.spuAddr&=0x7ffff; // wrap + *(unsigned short *)(spu.spuMemC + spu.spuAddr) = *pusPSXMem++; + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; } } -- cgit v1.2.3