X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Ffreeze.c;h=3bdbab1bd0bf8fcc98bd747981f2148828d51243;hp=5b4267bfad8b9ecd62bfc4ce58454078dda61a7d;hb=d9dcc8cb7803c89a528c8d808a429932673f8074;hpb=de4a0279efefdd2e4595c8fc27f1564f4bff9341 diff --git a/plugins/dfsound/freeze.c b/plugins/dfsound/freeze.c index 5b4267bf..3bdbab1b 100644 --- a/plugins/dfsound/freeze.c +++ b/plugins/dfsound/freeze.c @@ -119,6 +119,7 @@ typedef struct typedef struct { unsigned short spuIrq; + unsigned short decode_pos; uint32_t pSpuIrq; uint32_t spuAddr; uint32_t dummy1; @@ -231,6 +232,8 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode, SPUFreeze_t * pF, if(!pF) return 0; // first check + do_samples(cycles, 1); + if(ulFreezeMode) // info or save? {//--------------------------------------------------// if(ulFreezeMode==1) @@ -242,8 +245,6 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode, SPUFreeze_t * pF, if(ulFreezeMode==2) return 1; // info mode? ok, bye // save mode: - do_samples(cycles, 1); - memcpy(pF->cSPURam,spu.spuMem,0x80000); // copy common infos memcpy(pF->cSPUPort,spu.regArea,0x200); @@ -261,6 +262,7 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode, SPUFreeze_t * pF, pFO->spuAddr=spu.spuAddr; if(pFO->spuAddr==0) pFO->spuAddr=0xbaadf00d; + pFO->decode_pos = spu.decode_pos; for(i=0;icSPURam,0x80000); // get ram memcpy(spu.regArea,pF->cSPUPort,0x200); + spu.bMemDirty = 1; if(pF->xaS.nsamples<=4032) // start xa again SPUplayADPCMchannel(&pF->xaS); @@ -328,6 +331,7 @@ void LoadStateV5(SPUFreeze_t * pF) if (pFO->spuAddr == 0xbaadf00d) spu.spuAddr = 0; else spu.spuAddr = pFO->spuAddr & 0x7fffe; } + spu.decode_pos = pFO->decode_pos & 0x1ff; spu.dwNewChannel=0; spu.dwChannelOn=0;