dfsound: backport fixes from pcsxr
[pcsx_rearmed.git] / plugins / dfsound / registers.c
index b684914..5ab519b 100644 (file)
@@ -70,7 +70,8 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val)
        break;\r
      //------------------------------------------------// start\r
      case 6:      \r
-       s_chan[ch].pStart=spuMemC+((unsigned long) val<<3);\r
+       // Brain Dead 13 - align to 16 boundary\r
+       s_chan[ch].pStart= spuMemC+(unsigned long)((val<<3)&~0xf);\r
        break;\r
      //------------------------------------------------// level with pre-calcs\r
      case 8:\r
@@ -162,7 +163,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val)
      //------------------------------------------------//\r
      case 14:                                          // loop?\r
        //WaitForSingleObject(s_chan[ch].hMutex,2000);        // -> no multithread fuckups\r
-       s_chan[ch].pLoop=spuMemC+((unsigned long) val<<3);\r
+       s_chan[ch].pLoop=spuMemC+((unsigned long)((val<<3)&~0xf));\r
        s_chan[ch].bIgnoreLoop=1;\r
        //ReleaseMutex(s_chan[ch].hMutex);                    // -> oki, on with the thread\r
        break;\r
@@ -424,6 +425,13 @@ void SoundOn(int start,int end,unsigned short val)     // SOUND ON PSX COMAND
     {\r
      s_chan[ch].bIgnoreLoop=0;\r
      s_chan[ch].bNew=1;\r
+\r
+     // do this here, not in StartSound\r
+     // - fixes fussy timing issues\r
+     s_chan[ch].bStop=0;\r
+     s_chan[ch].bOn=1;\r
+     s_chan[ch].pCurr=s_chan[ch].pStart;\r
+\r
      dwNewChannel|=(1<<ch);                            // bitfield for faster testing\r
     }\r
   }\r
@@ -441,6 +449,11 @@ void SoundOff(int start,int end,unsigned short val)    // SOUND OFF PSX COMMAND
    if(val&1)                                           // && s_chan[i].bOn)  mmm...\r
     {\r
      s_chan[ch].bStop=1;\r
+\r
+     // Jungle Book - Rhythm 'n Groove\r
+     // - turns off buzzing sound (loop hangs)\r
+     s_chan[ch].bNew=0;\r
+     dwNewChannel &= ~(1<<ch);\r
     }                                                  \r
   }\r
 }\r