X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fregisters.c;h=669c70f736004cc781b81760a4e436010669121b;hp=2493a1e58d55e99fc8e1d537a6a12d8ad2ef7af9;hb=be1cb678c445cb8d9a4d707c698f0dc600a490ea;hpb=7e44d49d2a65d6e45d6f99f72a8cccdb02654aae diff --git a/plugins/dfsound/registers.c b/plugins/dfsound/registers.c index 2493a1e5..669c70f7 100644 --- a/plugins/dfsound/registers.c +++ b/plugins/dfsound/registers.c @@ -173,6 +173,10 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val) //------------------------------------------------// case 14: // loop? s_chan[ch].pLoop=spuMemC+((val&~1)<<3); + if(s_chan[ch].bJump) + // real machine would be most likely still doing the last block and use new value for the jump; + // but we decode ahead a bit and already did the jump part, so compensate for that now. + s_chan[ch].pCurr=s_chan[ch].pLoop; break; //------------------------------------------------// } @@ -429,6 +433,7 @@ static void SoundOn(int start,int end,unsigned short val) s_chan[ch].bStop=0; s_chan[ch].pCurr=spuMemC+((regAreaGet(ch,6)&~1)<<3); // must be block aligned s_chan[ch].pLoop=spuMemC+((regAreaGet(ch,14)&~1)<<3); + s_chan[ch].bJump=0; dwNewChannel|=(1<