From 7e44d49d2a65d6e45d6f99f72a8cccdb02654aae Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 22 Sep 2011 20:26:34 +0300 Subject: [PATCH] spu: clean up unneeded code --- plugins/dfsound/externals.h | 4 ---- plugins/dfsound/freeze.c | 18 ++++------------ plugins/dfsound/registers.c | 43 ++++++++++++++++++------------------- plugins/dfsound/registers.h | 4 ++++ plugins/dfsound/regs.h | 27 ----------------------- plugins/dfsound/spu.c | 35 +++++------------------------- 6 files changed, 34 insertions(+), 97 deletions(-) delete mode 100644 plugins/dfsound/regs.h diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 0ddf4067..4ce39bb8 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -107,19 +107,15 @@ typedef struct int spos; int sinc; - unsigned char * pStart; // start ptr into sound mem unsigned char * pCurr; // current pos in sound mem unsigned char * pLoop; // loop ptr in sound mem unsigned int bStop:1; // is channel stopped (sample _can_ still be playing, ADSR Release phase) unsigned int bReverb:1; // can we do reverb on this channel? must have ctrl register bit, to get active - unsigned int bIgnoreLoop:1; // ignore loop bit, if an external loop address is used unsigned int bRVBActive:1; // reverb active flag unsigned int bNoise:1; // noise active flag unsigned int bFMod:2; // freq mod (0=off, 1=sound channel, 2=freq channel) - int iActFreq; // current psx pitch - int iUsedFreq; // current pc pitch int iLeftVolume; // left volume int iRightVolume; // right volume ADSRInfoEx ADSRX; diff --git a/plugins/dfsound/freeze.c b/plugins/dfsound/freeze.c index d09a9b00..6caa6bf8 100644 --- a/plugins/dfsound/freeze.c +++ b/plugins/dfsound/freeze.c @@ -22,7 +22,6 @@ #include "externals.h" #include "registers.h" #include "spu.h" -#include "regs.h" //////////////////////////////////////////////////////////////////////// // freeze structs @@ -129,16 +128,16 @@ static void save_channel(SPUCHAN_orig *d, const SPUCHAN *s, int ch) d->spos = s->spos; d->sinc = s->sinc; memcpy(d->SB, s->SB, sizeof(d->SB)); - d->pStart = s->pStart; + d->pStart = (unsigned char *)((regAreaGet(ch,6)&~1)<<3); d->pCurr = s->pCurr; d->pLoop = s->pLoop; d->bOn = !!(dwChannelOn & (1<bStop = s->bStop; d->bReverb = s->bReverb; - d->iActFreq = s->iActFreq; - d->iUsedFreq = s->iUsedFreq; + d->iActFreq = 1; + d->iUsedFreq = 2; d->iLeftVolume = s->iLeftVolume; - d->bIgnoreLoop = s->bIgnoreLoop; + d->bIgnoreLoop = 0; d->iRightVolume = s->iRightVolume; d->iRawPitch = s->iRawPitch; d->s_1 = s->SB[27]; // yes it's reversed @@ -168,16 +167,12 @@ static void load_channel(SPUCHAN *d, const SPUCHAN_orig *s, int ch) d->spos = s->spos; d->sinc = s->sinc; memcpy(d->SB, s->SB, sizeof(d->SB)); - d->pStart = (void *)((long)s->pStart & 0x7fff0); d->pCurr = (void *)((long)s->pCurr & 0x7fff0); d->pLoop = (void *)((long)s->pLoop & 0x7fff0); if (s->bOn) dwChannelOn |= 1<bStop = s->bStop; d->bReverb = s->bReverb; - d->iActFreq = s->iActFreq; - d->iUsedFreq = s->iUsedFreq; d->iLeftVolume = s->iLeftVolume; - d->bIgnoreLoop = s->bIgnoreLoop; d->iRightVolume = s->iRightVolume; d->iRawPitch = s->iRawPitch; d->bRVBActive = s->bRVBActive; @@ -243,8 +238,6 @@ long CALLBACK SPUfreeze(uint32_t ulFreezeMode,SPUFreeze_t * pF) for(i=0;is_chan[i],&s_chan[i],i); - if(pFO->s_chan[i].pStart) - pFO->s_chan[i].pStart-=(unsigned long)spuMemC; if(pFO->s_chan[i].pCurr) pFO->s_chan[i].pCurr-=(unsigned long)spuMemC; if(pFO->s_chan[i].pLoop) @@ -320,7 +313,6 @@ void LoadStateV5(SPUFreeze_t * pF) { load_channel(&s_chan[i],&pFO->s_chan[i],i); - s_chan[i].pStart+=(unsigned long)spuMemC; s_chan[i].pCurr+=(unsigned long)spuMemC; s_chan[i].pLoop+=(unsigned long)spuMemC; } @@ -336,8 +328,6 @@ void LoadStateUnknown(SPUFreeze_t * pF) { s_chan[i].bStop=0; s_chan[i].pLoop=spuMemC; - s_chan[i].pStart=spuMemC; - s_chan[i].pLoop=spuMemC; } dwNewChannel=0; diff --git a/plugins/dfsound/registers.c b/plugins/dfsound/registers.c index 983af8c9..2493a1e5 100644 --- a/plugins/dfsound/registers.c +++ b/plugins/dfsound/registers.c @@ -21,7 +21,6 @@ #include "externals.h" #include "registers.h" -#include "regs.h" /* // adsr time values (in ms) by James Higgs ... see the end of @@ -41,6 +40,15 @@ #define SUSTAIN_MS 441L #define RELEASE_MS 437L +static void SoundOn(int start,int end,unsigned short val); +static void SoundOff(int start,int end,unsigned short val); +static void FModOn(int start,int end,unsigned short val); +static void NoiseOn(int start,int end,unsigned short val); +static void SetVolumeL(unsigned char ch,short vol); +static void SetVolumeR(unsigned char ch,short vol); +static void SetPitch(int ch,unsigned short val); +static void ReverbOn(int start,int end,unsigned short val); + //////////////////////////////////////////////////////////////////////// // WRITE REGISTERS: called by main emu //////////////////////////////////////////////////////////////////////// @@ -69,8 +77,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val) break; //------------------------------------------------// start case 6: - // Brain Dead 13 - align to 16 boundary - s_chan[ch].pStart= spuMemC+(unsigned long)((val<<3)&~0xf); + // taken from regArea later break; //------------------------------------------------// level with pre-calcs case 8: @@ -165,11 +172,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val) break; //------------------------------------------------// 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; - //ReleaseMutex(s_chan[ch].hMutex); // -> oki, on with the thread - dwChannelDead&=~(1<>=1) // loop channels @@ -460,7 +461,7 @@ void SoundOff(int start,int end,unsigned short val) // SOUND OFF PSX COMMAND // FMOD register write //////////////////////////////////////////////////////////////////////// -void FModOn(int start,int end,unsigned short val) // FMOD ON PSX COMMAND +static void FModOn(int start,int end,unsigned short val) { int ch; @@ -487,7 +488,7 @@ void FModOn(int start,int end,unsigned short val) // FMOD ON PSX COMMAND // NOISE register write //////////////////////////////////////////////////////////////////////// -void NoiseOn(int start,int end,unsigned short val) // NOISE ON PSX COMMAND +static void NoiseOn(int start,int end,unsigned short val) { int ch; @@ -504,7 +505,7 @@ void NoiseOn(int start,int end,unsigned short val) // NOISE ON PSX COMMAND // please note: sweep and phase invert are wrong... but I've never seen // them used -void SetVolumeL(unsigned char ch,short vol) // LEFT VOLUME +static void SetVolumeL(unsigned char ch,short vol) // LEFT VOLUME { if(vol&0x8000) // sweep? { @@ -530,7 +531,7 @@ void SetVolumeL(unsigned char ch,short vol) // LEFT VOLUME // RIGHT VOLUME register write //////////////////////////////////////////////////////////////////////// -void SetVolumeR(unsigned char ch,short vol) // RIGHT VOLUME +static void SetVolumeR(unsigned char ch,short vol) // RIGHT VOLUME { if(vol&0x8000) // comments... see above :) { @@ -556,24 +557,22 @@ void SetVolumeR(unsigned char ch,short vol) // RIGHT VOLUME // PITCH register write //////////////////////////////////////////////////////////////////////// -void SetPitch(int ch,unsigned short val) // SET PITCH +static void SetPitch(int ch,unsigned short val) // SET PITCH { int NP; if(val>0x3fff) NP=0x3fff; // get pitch val else NP=val; s_chan[ch].iRawPitch=NP; - - NP=(44100L*NP)/4096L; // calc frequency - if(NP<1) NP=1; // some security - s_chan[ch].iActFreq=NP; // store frequency + s_chan[ch].sinc=(NP<<4)|8; + if(iUseInterpolation==1) s_chan[ch].SB[32]=1; // -> freq change in simple interpolation mode: set flag } //////////////////////////////////////////////////////////////////////// // REVERB register write //////////////////////////////////////////////////////////////////////// -void ReverbOn(int start,int end,unsigned short val) // REVERB ON PSX COMMAND +static void ReverbOn(int start,int end,unsigned short val) { int ch; diff --git a/plugins/dfsound/registers.h b/plugins/dfsound/registers.h index 204a669c..cb95bc15 100644 --- a/plugins/dfsound/registers.h +++ b/plugins/dfsound/registers.h @@ -150,3 +150,7 @@ #define STAT_IRQ 0x40 +/////////////////////////////////////////////////////////// + +void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val); + diff --git a/plugins/dfsound/regs.h b/plugins/dfsound/regs.h deleted file mode 100644 index 3d2689bc..00000000 --- a/plugins/dfsound/regs.h +++ /dev/null @@ -1,27 +0,0 @@ -/*************************************************************************** - regs.h - description - ------------------- - begin : Wed May 15 2002 - copyright : (C) 2002 by Pete Bernert - email : BlackDove@addcom.de - ***************************************************************************/ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. See also the license.txt file for * - * additional informations. * - * * - ***************************************************************************/ - -void SoundOn(int start,int end,unsigned short val); -void SoundOff(int start,int end,unsigned short val); -void FModOn(int start,int end,unsigned short val); -void NoiseOn(int start,int end,unsigned short val); -void SetVolumeL(unsigned char ch,short vol); -void SetVolumeR(unsigned char ch,short vol); -void SetPitch(int ch,unsigned short val); -void ReverbOn(int start,int end,unsigned short val); -void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val); - diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c index b866cff6..8c6f7d2f 100644 --- a/plugins/dfsound/spu.c +++ b/plugins/dfsound/spu.c @@ -26,7 +26,6 @@ #include "registers.h" #include "cfg.h" #include "dsoundoss.h" -#include "regs.h" #ifdef ENABLE_NLS #include @@ -287,19 +286,9 @@ INLINE void StartSound(int ch) // ALL KIND OF HELPERS //////////////////////////////////////////////////////////////////////// -INLINE void VoiceChangeFrequency(int ch) -{ - s_chan[ch].iUsedFreq=s_chan[ch].iActFreq; // -> take it and calc steps - s_chan[ch].sinc=s_chan[ch].iRawPitch<<4; - if(!s_chan[ch].sinc) s_chan[ch].sinc=1; - if(iUseInterpolation==1) s_chan[ch].SB[32]=1; // -> freq change in simle imterpolation mode: set flag -} - -//////////////////////////////////////////////////////////////////////// - INLINE int FModChangeFrequency(int ch,int ns) { - int NP=s_chan[ch].iRawPitch; + unsigned int NP=s_chan[ch].iRawPitch; int sinc; NP=((32768L+iFMod[ns])*NP)/32768L; @@ -307,12 +296,7 @@ INLINE int FModChangeFrequency(int ch,int ns) if(NP>0x3fff) NP=0x3fff; if(NP<0x1) NP=0x1; - NP=(44100L*NP)/(4096L); // calc frequency - - s_chan[ch].iActFreq=NP; - s_chan[ch].iUsedFreq=NP; - sinc=(((NP/10)<<16)/4410); - if(!sinc) sinc=1; + sinc=NP<<4; // calc frequency if(iUseInterpolation==1) // freq change in simple interpolation mode s_chan[ch].SB[32]=1; iFMod[ns]=0; @@ -512,9 +496,6 @@ static int skip_block(int ch) int flags = start[1]; int ret = 0; - // Tron Bonne hack, probably wrong (could be wrong memory contents..) - if(flags & ~7) flags = 0; - if(start == pSpuIrq) { do_irq(); @@ -750,9 +731,6 @@ static void *MAINThread(void *arg) if(dwNewChannel&(1< pSpuIrq && s_chan[ch].pLoop > pSpuIrq) continue; - if(s_chan[ch].iActFreq!=s_chan[ch].iUsedFreq) // new psx frequency? - VoiceChangeFrequency(ch); - s_chan[ch].spos += s_chan[ch].sinc * NSSIZE; while(s_chan[ch].spos >= 28 * 0x10000) { - unsigned char *start=s_chan[ch].pCurr; + unsigned char *start = s_chan[ch].pCurr; // no need for bIRQReturn since the channel is silent iSpuAsyncWait |= skip_block(ch); if(start == s_chan[ch].pCurr) { // looping on self - dwChannelDead|=1< init sustain s_chan[i].pLoop=spuMemC; - s_chan[i].pStart=spuMemC; s_chan[i].pCurr=spuMemC; } -- 2.39.2