spu: threaded implementation
[pcsx_rearmed.git] / plugins / dfsound / registers.c
index 210adb2..e65d112 100644 (file)
@@ -57,7 +57,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
  if (val == 0 && (r & 0xff8) == 0xd88)\r
   return;\r
 \r
- do_samples_if_needed(cycles);\r
+ do_samples_if_needed(cycles, 0);\r
 \r
  if(r>=0x0c00 && r<0x0d80)                             // some channel info?\r
   {\r
@@ -362,16 +362,9 @@ static void SoundOn(int start,int end,unsigned short val)
   {\r
    if((val&1) && regAreaGet(ch,6))                     // mmm... start has to be set before key on !?!\r
     {\r
-     // do this here, not in StartSound\r
-     // - fixes fussy timing issues\r
-     s_chan[ch].bStop=0;\r
      s_chan[ch].pCurr=spu.spuMemC+((regAreaGet(ch,6)&~1)<<3); // must be block aligned\r
      s_chan[ch].pLoop=spu.spuMemC+((regAreaGet(ch,14)&~1)<<3);\r
-     s_chan[ch].prevflags=2;\r
-\r
      spu.dwNewChannel|=(1<<ch);\r
-     spu.dwChannelOn|=1<<ch;\r
-     spu.dwChannelDead&=~(1<<ch);\r
     }\r
   }\r
 }\r
@@ -385,9 +378,9 @@ static void SoundOff(int start,int end,unsigned short val)
  int ch;\r
  for(ch=start;ch<end;ch++,val>>=1)                     // loop channels\r
   {\r
-   if(val&1)                                           // && s_chan[i].bOn)  mmm...\r
+   if(val&1)\r
     {\r
-     s_chan[ch].bStop=1;\r
+     s_chan[ch].ADSRX.State = ADSR_RELEASE;\r
 \r
      // Jungle Book - Rhythm 'n Groove\r
      // - turns off buzzing sound (loop hangs)\r