From 6aa1a8e80718d79663c4813a9d818821b1f2b0f3 Mon Sep 17 00:00:00 2001 From: "SND\\weimingzhi_cp" Date: Mon, 21 Jun 2010 02:47:18 +0000 Subject: git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@53080 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- plugins/dfsound/freeze.c | 29 ++++++++++++++++++----------- plugins/dfsound/spu.c | 42 ++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 33 deletions(-) (limited to 'plugins') diff --git a/plugins/dfsound/freeze.c b/plugins/dfsound/freeze.c index 2551e608..26094814 100644 --- a/plugins/dfsound/freeze.c +++ b/plugins/dfsound/freeze.c @@ -42,7 +42,7 @@ typedef struct { unsigned short spuIrq; uint32_t pSpuIrq; - uint32_t dummy0; + uint32_t spuAddr; uint32_t dummy1; uint32_t dummy2; uint32_t dummy3; @@ -55,8 +55,8 @@ typedef struct void LoadStateV5(SPUFreeze_t * pF); // newest version void LoadStateUnknown(SPUFreeze_t * pF); // unknown format - -extern int lastch; + +extern int lastch; //////////////////////////////////////////////////////////////////////// // SPUFREEZE: called by main emu on savestate load/save @@ -96,6 +96,9 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode,SPUFreeze_t * pF) pFO->spuIrq=spuIrq; if(pSpuIrq) pFO->pSpuIrq = (unsigned long)pSpuIrq-(unsigned long)spuMemC; + pFO->spuAddr=spuAddr; + if(pFO->spuAddr==0) pFO->spuAddr=0xffffffff; + for(i=0;is_chan[i],(void *)&s_chan[i],sizeof(SPUCHAN)); @@ -125,14 +128,12 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode,SPUFreeze_t * pF) xapGlobal=0; - if(!strcmp(pF->szSPUName,"PBOSS") && - pF->ulFreezeVersion==5) - LoadStateV5(pF); + if(!strcmp(pF->szSPUName,"PBOSS") && pF->ulFreezeVersion==5) + LoadStateV5(pF); else LoadStateUnknown(pF); - spuAddr = 0xffffffff; - lastch = -1; - + lastch = -1; + // repair some globals for(i=0;i<=62;i+=2) SPUwriteRegister(H_Reverb+i,regArea[(H_Reverb+i-0xc00)>>1]); @@ -161,8 +162,14 @@ void LoadStateV5(SPUFreeze_t * pF) pFO=(SPUOSSFreeze_t *)(pF+1); - spuIrq = pFO->spuIrq; - if(pFO->pSpuIrq) pSpuIrq = pFO->pSpuIrq+spuMemC; else pSpuIrq=0; + spuIrq = pFO->spuIrq; + if(pFO->pSpuIrq) pSpuIrq = pFO->pSpuIrq+spuMemC; else pSpuIrq=NULL; + + if(pFO->spuAddr) + { + spuAddr = pFO->spuAddr; + if (spuAddr == 0xffffffff) spuAddr = 0; + } for(i=0;i