From 5238f6f8fcf43fb8506467b358ee976a8c5fdf6b Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 1 Jul 2011 02:15:08 +0300 Subject: [PATCH] dfsound: merge shalma's suggestions http://www.gp32x.com/board/index.php?/topic/57973-pcsx-rearmed/page__view__findpost__p__952591 --- plugins/dfsound/registers.c | 2 +- plugins/dfsound/spu.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/dfsound/registers.c b/plugins/dfsound/registers.c index 19a0a46b..c7905255 100644 --- a/plugins/dfsound/registers.c +++ b/plugins/dfsound/registers.c @@ -168,7 +168,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val) case 14: // loop? //WaitForSingleObject(s_chan[ch].hMutex,2000); // -> no multithread fuckups s_chan[ch].pLoop=spuMemC+((unsigned long)((val<<3)&~0xf)); - s_chan[ch].bIgnoreLoop=1; + //s_chan[ch].bIgnoreLoop=1; //ReleaseMutex(s_chan[ch].hMutex); // -> oki, on with the thread break; //------------------------------------------------// diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c index 8558e48f..0f952fbb 100644 --- a/plugins/dfsound/spu.c +++ b/plugins/dfsound/spu.c @@ -586,9 +586,12 @@ static void *MAINThread(void *arg) { // We play this block out first... //if(!(flags&2)) // 1+2: do loop... otherwise: stop - if(flags!=3 || s_chan[ch].pLoop==NULL) // PETE: if we don't check exactly for 3, loop hang ups will happen (DQ4, for example) - { // and checking if pLoop is set avoids crashes, yeah + if((flags!=3 && flags!=7) // PETE: if we don't check exactly for 3, loop hang ups will happen (DQ4, for example) + || s_chan[ch].pLoop==NULL) // and checking if pLoop is set avoids crashes, yeah + { start = (unsigned char*)-1; + // Actua Soccer 2, Jungle Book, other games that check for this condition + s_chan[ch].ADSRX.EnvelopeVol = 0; } else { @@ -596,6 +599,9 @@ static void *MAINThread(void *arg) } } + if (start - spuMemC >= 0x80000) + start = (unsigned char*)-1; + s_chan[ch].pCurr=start; // store values for next cycle s_chan[ch].s_1=s_1; s_chan[ch].s_2=s_2; -- 2.39.2