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=7c164ac61e999ed572a7dd52ff64547be4a88ce1;hb=16f3ca666fb090dcb9ac0b399b767e4ed0aabece;hpb=fb552464f06137102fd9ca69a05492265bbdcea7 diff --git a/plugins/dfsound/dma.c b/plugins/dfsound/dma.c index 7c164ac6..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; } @@ -38,15 +38,18 @@ unsigned short CALLBACK SPUreadDMA(void) // READ DMA (many values) //////////////////////////////////////////////////////////////////////// -void CALLBACK SPUreadDMAMem(unsigned short * pusPSXMem,int iSize) +void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize, + unsigned int cycles) { int i; + 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; } } @@ -64,34 +67,37 @@ 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; } //////////////////////////////////////////////////////////////////////// // WRITE DMA (many values) //////////////////////////////////////////////////////////////////////// -void CALLBACK SPUwriteDMAMem(unsigned short * pusPSXMem,int iSize) +void CALLBACK SPUwriteDMAMem(unsigned short *pusPSXMem, int iSize, + unsigned int cycles) { int i; - had_dma = 1; + 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; } }