From ec4d13a31d4416f0f794f8530d03b820cfa55417 Mon Sep 17 00:00:00 2001 From: notaz Date: Mon, 14 May 2007 21:57:39 +0000 Subject: [PATCH] removed 64bit stuff in sound.c git-svn-id: file:///home/notaz/opt/svn/fceu@132 be3aeb3a-fb24-0410-a615-afba39da0efa --- sound.c | 91 +++++++++++++++++++-------------------------------------- 1 file changed, 30 insertions(+), 61 deletions(-) diff --git a/sound.c b/sound.c index 7d56a2d..9bbda3f 100644 --- a/sound.c +++ b/sound.c @@ -56,7 +56,7 @@ uint8 decvolume[3]; uint8 realvolume[3]; static int32 count[5]; -static int64 sqacc[2]={0,0}; +static int32 sqacc[2]={0,0}; uint8 sqnon=0; uint32 soundtsoffs=0; @@ -82,7 +82,7 @@ static const uint32 SNoiseFreqTable[0x10]= }; static uint32 NoiseFreqTable[0x10]; -int64 nesincsizeLL; +static int32 nesincsize32; int64 nesincsize; static const uint8 NTSCPCMTable[0x10]= @@ -105,7 +105,7 @@ uint32 PSG_base; // $4013 - Size register: Size in bytes = (V+1)*64 -static int64 PCMacc=0; +static int32 PCMacc=0; static int PCMfreq; int32 PCMIRQCount; uint8 PCMBitIndex=0; @@ -155,7 +155,7 @@ static void PrepDPCM() PCMfreq=PALPCMTable[PSG[0x10]&0xF]; else PCMfreq=NTSCPCMTable[PSG[0x10]&0xF]; - PCMacc=(int64)PCMfreq<<50; + PCMacc=PCMfreq<<18; } uint8 sweepon[2]={0,0}; @@ -227,7 +227,7 @@ static DECLFW(Write_PSG) DecCountTo1[0]=(PSG[0]&0xF)+1; SweepCount[0]=((PSG[0x1]>>4)&7)+1; DutyCount[0]=0; - sqacc[0]=((int64)curfreq[0]+1)<<50; + sqacc[0]=((int32)curfreq[0]+1)<<18; break; case 0x4: @@ -256,7 +256,7 @@ static DECLFW(Write_PSG) DecCountTo1[1]=(PSG[0x4]&0xF)+1; SweepCount[1]=((PSG[0x5]>>4)&7)+1; DutyCount[1]=0; - sqacc[1]=((int64)curfreq[1]+1)<<50; + sqacc[1]=((int32)curfreq[1]+1)<<18; break; case 0x8: DoTriangle(); @@ -559,7 +559,7 @@ static void RDoPCM(void) { int32 V; int32 start,end; - int64 freq; + int32 freq; uint32 out=PSG[0x11]<<3; start=ChannelBC[4]; @@ -570,11 +570,11 @@ static void RDoPCM(void) if(PSG[0x15]&0x10) { freq=PCMfreq; - freq<<=50; + freq<<=18; for(V=start;V>4]+=out; - sqacc[0]-=nesincsizeLL; + sqacc[0]-=nesincsize32; if(sqacc[0]<=0) { rea: @@ -682,7 +682,7 @@ static void RDoSQ2(void) { int32 V; int32 start,end; - int64 freq; + int32 freq; CalcRectAmp(1); start=ChannelBC[1]; @@ -701,11 +701,11 @@ static void RDoSQ2(void) freq=curfreq[1]+1; { - freq<<=50; + freq<<=18; for(V=start;V>4]+=out; - sqacc[1]-=nesincsizeLL; + sqacc[1]-=nesincsize32; if(sqacc[1]<=0) { rea: @@ -716,7 +716,6 @@ static void RDoSQ2(void) DutyCount[1]&=7; out=RectAmp[1][DutyCount[1]]; } - } } } @@ -728,7 +727,7 @@ static void RDoTriangle(void) static uint32 tcout=0; int32 V; int32 start,end; //,freq; - int64 freq=(((PSG[0xa]|((PSG[0xb]&7)<<8))+1)); + int32 freq=(((PSG[0xa]|((PSG[0xb]&7)<<8))+1)); start=ChannelBC[2]; end=(SOUNDTS<<16)/soundtsinc; @@ -754,13 +753,13 @@ static void RDoTriangle(void) } else { - static int64 triacc=0; + static int32 triacc=0; static uint8 tc=0; - freq<<=49; + freq<<=17; for(V=start;V>16; - acc2+=((diff-acc2)*lowp)>>16; + acc += (diff*highp)>>16; + acc2+= (int32) (((int64)((diff-acc2)*lowp))>>16); *in=0; - // don't change the sound here -// *out=(acc2*(int64)FSettings.SoundVolume)>>(24+16); - // volume, 4 times louder by default?? -// *out = acc2 >> 24; - // just a bit louder. Hope it's okay - /* - *out = acc2 >> 22; - if(*out<-32767) *out=-32767; - if(*out>32767) *out=32767; - // go one back - - // do MONO - tmp=(int16 *)(out-1); - // don't do this the first time - if (prev == -99999) continue; - // the middle one should be interpolated - tmp[1]=(int16)((*out + prev) >> 1); - prev = *out; - */ - //outMono[index] = (int16)*out; - *outMono = (int16)(acc2 >> 24); - //if(*outMono<-16384) *outMono=-16384; - //if(*outMono>16384) *outMono=16384; - outMono++; - - // out=((int64)(acc2>>24)*(int64)FSettings.SoundVolume)>>16; //acc2>>24; - + *outMono = (int16)acc2; } - // do one more } - static int32 inbuf=0; int FlushEmulateSound(void) { @@ -1033,8 +1001,9 @@ void SetSoundVariables(void) if(GameExpSound.RChange) GameExpSound.RChange(); - nesincsizeLL=(int64)((int64)562949953421312*(double)(PAL?PAL_CPU:NTSC_CPU)/(FSettings.SndRate OVERSAMPLE)); + // nesincsizeLL=(int64)((int64)562949953421312*(double)(PAL?PAL_CPU:NTSC_CPU)/(FSettings.SndRate OVERSAMPLE)); nesincsize=(int64)(((int64)1<<17)*(double)(PAL?PAL_CPU:NTSC_CPU)/(FSettings.SndRate * 16)); + nesincsize32=(int32)nesincsize; PSG_base=(uint32)(PAL?(long double)PAL_CPU/16:(long double)NTSC_CPU/16); for(x=0;x<0x10;x++) @@ -1050,7 +1019,7 @@ void SetSoundVariables(void) for(x=0;x<5;x++) ChannelBC[x]=0; highp=(250<<16)/FSettings.SndRate; // Arbitrary - lowp=((int64)25000<<16)/FSettings.SndRate; // Arbitrary + lowp=(25000<<16)/FSettings.SndRate; // Arbitrary if(highp>(1<<16)) highp=1<<16; if(lowp>(1<<16)) lowp=1<<16; -- 2.39.2