X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fdma.c;h=8d647ff34664181b8875cca1fed92aa2a9671deb;hp=7c164ac61e999ed572a7dd52ff64547be4a88ce1;hb=63a4f6b6a3b0315590cd3009df2c92480ed2d98b;hpb=fb552464f06137102fd9ca69a05492265bbdcea7 diff --git a/plugins/dfsound/dma.c b/plugins/dfsound/dma.c index 7c164ac6..8d647ff3 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=spu.spuMem[spu.spuAddr>>1]; + spu.spuAddr+=2; + if(spu.spuAddr>0x7ffff) spu.spuAddr=0; 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++=spu.spuMem[spu.spuAddr>>1]; // spu addr got by writeregister + spu.spuAddr+=2; // inc spu addr + if(spu.spuAddr>0x7ffff) spu.spuAddr=0; // wrap } } @@ -64,34 +67,35 @@ void CALLBACK SPUreadDMAMem(unsigned short * pusPSXMem,int iSize) void CALLBACK SPUwriteDMA(unsigned short val) { - spuMem[spuAddr>>1] = val; // spu addr got by writeregister + spu.spuMem[spu.spuAddr>>1] = val; // spu addr got by writeregister - spuAddr+=2; // inc spu addr - if(spuAddr>0x7ffff) spuAddr=0; // wrap + spu.spuAddr+=2; // inc spu addr + if(spu.spuAddr>0x7ffff) spu.spuAddr=0; // wrap } //////////////////////////////////////////////////////////////////////// // 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); - if(spuAddr + iSize*2 < 0x80000) + if(spu.spuAddr + iSize*2 < 0x80000) { - memcpy(&spuMem[spuAddr>>1], pusPSXMem, iSize*2); - spuAddr += iSize*2; + memcpy(&spu.spuMem[spu.spuAddr>>1], 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 + spu.spuMem[spu.spuAddr>>1] = *pusPSXMem++; // spu addr got by writeregister + spu.spuAddr+=2; // inc spu addr + spu.spuAddr&=0x7ffff; // wrap } }