dfsound: merge shalma's suggestions
authornotaz <notasas@gmail.com>
Thu, 30 Jun 2011 23:15:08 +0000 (02:15 +0300)
committernotaz <notasas@gmail.com>
Tue, 12 Jul 2011 21:28:41 +0000 (00:28 +0300)
http://www.gp32x.com/board/index.php?/topic/57973-pcsx-rearmed/page__view__findpost__p__952591

plugins/dfsound/registers.c
plugins/dfsound/spu.c

index 19a0a46..c790525 100644 (file)
@@ -168,7 +168,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val)
      case 14:                                          // loop?\r
        //WaitForSingleObject(s_chan[ch].hMutex,2000);        // -> no multithread fuckups\r
        s_chan[ch].pLoop=spuMemC+((unsigned long)((val<<3)&~0xf));\r
-       s_chan[ch].bIgnoreLoop=1;\r
+       //s_chan[ch].bIgnoreLoop=1;\r
        //ReleaseMutex(s_chan[ch].hMutex);                    // -> oki, on with the thread\r
        break;\r
      //------------------------------------------------//\r
index 8558e48..0f952fb 100644 (file)
@@ -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;