X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fdma.c;h=43019f1d9fccc059bd0be630f50d224d527a9ab4;hp=85b746ceb988388d1a7cfb39e2d3d0c9e433f846;hb=b64fb8912577f6f1e856bf255b6bd96e4e977203;hpb=650adfd2da779ba8855623362c2900583e22931e diff --git a/plugins/dfsound/dma.c b/plugins/dfsound/dma.c index 85b746ce..43019f1d 100644 --- a/plugins/dfsound/dma.c +++ b/plugins/dfsound/dma.c @@ -27,9 +27,9 @@ unsigned short CALLBACK SPUreadDMA(void) { - unsigned short s=spuMem[spuAddr>>1]; - spuAddr+=2; - if(spuAddr>0x7ffff) spuAddr=0; + unsigned short s = *(unsigned short *)(spu.spuMemC + spu.spuAddr); + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; return s; } @@ -43,13 +43,13 @@ 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 addr got by writeregister - spuAddr+=2; // inc spu addr - if(spuAddr>0x7ffff) spuAddr=0; // wrap + *pusPSXMem++ = *(unsigned short *)(spu.spuMemC + spu.spuAddr); + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; } } @@ -67,10 +67,11 @@ void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize, void CALLBACK SPUwriteDMA(unsigned short val) { - spuMem[spuAddr>>1] = val; // spu addr got by writeregister + *(unsigned short *)(spu.spuMemC + spu.spuAddr) = val; - spuAddr+=2; // inc spu addr - if(spuAddr>0x7ffff) spuAddr=0; // wrap + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; + spu.bMemDirty = 1; } //////////////////////////////////////////////////////////////////////// @@ -82,20 +83,21 @@ void CALLBACK SPUwriteDMAMem(unsigned short *pusPSXMem, int iSize, { int i; - do_samples_if_needed(cycles); + do_samples_if_needed(cycles, 1); + spu.bMemDirty = 1; - if(spuAddr + iSize*2 < 0x80000) + if(spu.spuAddr + iSize*2 < 0x80000) { - memcpy(&spuMem[spuAddr>>1], pusPSXMem, iSize*2); - spuAddr += 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 - spuAddr+=2; // inc spu addr - spuAddr&=0x7ffff; // wrap + *(unsigned short *)(spu.spuMemC + spu.spuAddr) = *pusPSXMem++; + spu.spuAddr += 2; + spu.spuAddr &= 0x7fffe; } }