static uint32 NoiseFreqTable[0x10];
int64 nesincsizeLL;
+int64 nesincsize;
static const uint8 NTSCPCMTable[0x10]=
{
X6502_IRQEnd(FCEU_IQDPCM);
}
break;
- case 0x17:
- V&=0xC0;
- fcnt=0;
- if(V&0x80)
- FrameSoundUpdate();
- fhcnt=fhinc;
- X6502_IRQEnd(FCEU_IQFCOUNT);
- SIRQStat&=~0x40;
- break;
}
PSG[A]=V;
}
}
}
+DECLFW(Write_IRQFM)
+{
+ PSG[0x17]=V;
+ V=(V&0xC0)>>6;
+ fcnt=0;
+ if(V&0x2)
+ FrameSoundUpdate();
+ fcnt=1;
+ fhcnt=fhinc;
+ X6502_IRQEnd(FCEU_IQFCOUNT);
+ SIRQStat&=~0x40;
+ //IRQFrameMode=V; // IRQFrameMode is PSG[0x17] upper bits
+}
+
void SetNESSoundMap(void)
{
SetWriteHandler(0x4000,0x4013,Write_PSG);
SetWriteHandler(0x4011,0x4011,Write0x11);
SetWriteHandler(0x4015,0x4015,Write_PSG);
- SetWriteHandler(0x4017,0x4017,Write_PSG);
+ SetWriteHandler(0x4017,0x4017,Write_IRQFM);
SetReadHandler(0x4015,0x4015,Read_PSG);
}
-static int32 WaveNSF[256];
+static int32 WaveNSF[2048];
int32 highp; // 0 through 65536, 0 = no high pass, 65536 = max high pass
+static int32 inbuf=0;
int FlushEmulateSound(void)
{
int x;
// printf("count %d, num ints %d\n", end, (end >> 4));
if(FCEUGameInfo.type==GIT_NSF)
{
- printf("IS NSF");
- int x,s=0,si=end/1024; // Only want 1/4 of the output buffer to be displayed
- for(x=0;x<256;x++)
+ int x;//,s=0,si=end/1024;
+ for(x=0;x<1024;x++)
{
- WaveNSF[x]=WaveFinal[s>>4];
- s+=si;
+ //WaveNSF[x]=WaveFinal[s>>4];
+ WaveNSF[x]=WaveFinalMono[x];
+ //s+=si;
}
}
for(x=0;x<5;x++)
ChannelBC[x]=end&0xF;
soundtsoffs=(soundtsinc*(end&0xF))>>16;
- return(end>>4);
+ end>>=4;
+ inbuf=end;
+ return(end);
}
-void GetSoundBuffer(int32 **W)
+int GetSoundBuffer(int32 **W)
{
*W=WaveNSF;
+ return inbuf;
}
void PowerSound(void)
if(GameExpSound.RChange)
GameExpSound.RChange();
- nesincsizeLL=(int64)((int64)562949953421312*(long 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));
PSG_base=(uint32)(PAL?(long double)PAL_CPU/16:(long double)NTSC_CPU/16);
for(x=0;x<0x10;x++)
void FCEUI_SetSoundVolume(uint32 volume)
{
- FSettings.SoundVolume=(volume<<16)/100;
+ FSettings.SoundVolume=volume;
}