- RemoveTimer(); // we stop processing while doing the save!\r
-\r
- memcpy(spuMem,pF->cSPURam,0x80000); // get ram\r
- memcpy(regArea,pF->cSPUPort,0x200);\r
-\r
- if(pF->xaS.nsamples<=4032) // start xa again\r
- SPUplayADPCMchannel(&pF->xaS);\r
-\r
- xapGlobal=0;\r
- dwPendingChanOff=0;\r
-\r
- if(!strcmp(pF->szSPUName,"PBOSS") && pF->ulFreezeVersion==5)\r
- LoadStateV5(pF);\r
- else LoadStateUnknown(pF);\r
-\r
- lastch = -1;\r
+ memcpy(spu.spuMem,pF->cSPURam,0x80000); // get ram\r
+ memcpy(spu.regArea,pF->cSPUPort,0x200);\r
+ spu.bMemDirty = 1;\r
+\r
+ if (!strcmp(pF->szSPUName,"PBOSS") && pF->ulFreezeVersion==5)\r
+ pFO = LoadStateV5(pF, cycles);\r
+ else LoadStateUnknown(pF, cycles);\r
+\r
+ spu.XAPlay = spu.XAFeed = spu.XAStart;\r
+ spu.CDDAPlay = spu.CDDAFeed = spu.CDDAStart;\r
+ if (pFO && pFO->xa_left && pF->xaS.nsamples) { // start xa again\r
+ FeedXA(&pF->xaS);\r
+ spu.XAPlay = spu.XAFeed - pFO->xa_left;\r
+ if (spu.XAPlay < spu.XAStart)\r
+ spu.XAPlay = spu.XAStart;\r
+ }\r
+ else if (pFO && pFO->cdda_left) { // start cdda again\r
+ FeedCDDA((void *)pF->xaS.pcm, pFO->cdda_left * 4);\r
+ }\r