aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2011-07-01 02:15:08 +0300
committernotaz2011-07-13 00:28:41 +0300
commit5238f6f8fcf43fb8506467b358ee976a8c5fdf6b (patch)
treed65b57c953ad177b1e81034e89f808b46a545446
parent0e828e88b618067cfd112b2a8b8cdd4f2a7e04b3 (diff)
downloadpcsx_rearmed-5238f6f8fcf43fb8506467b358ee976a8c5fdf6b.tar.gz
pcsx_rearmed-5238f6f8fcf43fb8506467b358ee976a8c5fdf6b.tar.bz2
pcsx_rearmed-5238f6f8fcf43fb8506467b358ee976a8c5fdf6b.zip
dfsound: merge shalma's suggestions
http://www.gp32x.com/board/index.php?/topic/57973-pcsx-rearmed/page__view__findpost__p__952591
-rw-r--r--plugins/dfsound/registers.c2
-rw-r--r--plugins/dfsound/spu.c10
2 files changed, 9 insertions, 3 deletions
diff --git a/plugins/dfsound/registers.c b/plugins/dfsound/registers.c
index 19a0a46..c790525 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 8558e48..0f952fb 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;