diff --git a/src/burn/drivers/sega/d_sys1.cpp b/src/burn/drivers/sega/d_sys1.cpp index ba35ce603..81b4c86bf 100644 --- a/src/burn/drivers/sega/d_sys1.cpp +++ b/src/burn/drivers/sega/d_sys1.cpp @@ -4114,6 +4114,8 @@ static INT32 System1Init(INT32 nZ80Rom1Num, INT32 nZ80Rom1Size, INT32 nZ80Rom2Nu SN76489AInit(0, 2000000, 0); SN76489AInit(1, 4000000, 1); + SN76496SetVolShift(0, 2); + SN76496SetVolShift(1, 2); GenericTilesInit(); diff --git a/src/burn/sound/sn76496.cpp b/src/burn/sound/sn76496.cpp index 8b62a90f2..f2a12809c 100644 --- a/src/burn/sound/sn76496.cpp +++ b/src/burn/sound/sn76496.cpp @@ -24,6 +24,7 @@ struct SN76496 INT32 Count[4]; INT32 Output[4]; INT32 bSignalAdd; + INT32 nVolShift; }; static INT32 NumChips; @@ -155,6 +156,8 @@ void SN76496Update(INT32 Num, INT16* pSoundBuf, INT32 Length) Out /= STEP; + Out >>= R->nVolShift; + if (R->bSignalAdd) { Temp = pSoundBuf[0] + Out; if (Temp > 32767) Temp = 32767; @@ -311,6 +314,7 @@ static void GenericStart(INT32 Num, INT32 Clock, INT32 FeedbackMask, INT32 Noise Chip0->WhitenoiseTaps = NoiseTaps; Chip0->WhitenoiseInvert = NoiseInvert; Chip0->bSignalAdd = SignalAdd; + Chip0->nVolShift = 0; } if (Num == 1) { @@ -324,6 +328,7 @@ static void GenericStart(INT32 Num, INT32 Clock, INT32 FeedbackMask, INT32 Noise Chip1->WhitenoiseTaps = NoiseTaps; Chip1->WhitenoiseInvert = NoiseInvert; Chip1->bSignalAdd = SignalAdd; + Chip1->nVolShift = 0; } if (Num == 2) { @@ -337,6 +342,7 @@ static void GenericStart(INT32 Num, INT32 Clock, INT32 FeedbackMask, INT32 Noise Chip2->WhitenoiseTaps = NoiseTaps; Chip2->WhitenoiseInvert = NoiseInvert; Chip2->bSignalAdd = SignalAdd; + Chip2->nVolShift = 0; } if (Num == 3) { @@ -350,6 +356,7 @@ static void GenericStart(INT32 Num, INT32 Clock, INT32 FeedbackMask, INT32 Noise Chip3->WhitenoiseTaps = NoiseTaps; Chip3->WhitenoiseInvert = NoiseInvert; Chip3->bSignalAdd = SignalAdd; + Chip3->nVolShift = 0; } if (Num == 4) { @@ -363,6 +370,7 @@ static void GenericStart(INT32 Num, INT32 Clock, INT32 FeedbackMask, INT32 Noise Chip4->WhitenoiseTaps = NoiseTaps; Chip4->WhitenoiseInvert = NoiseInvert; Chip4->bSignalAdd = SignalAdd; + Chip4->nVolShift = 0; } } @@ -423,6 +431,20 @@ void SN76496Exit() DebugSnd_SN76496Initted = 0; } +void SN76496SetVolShift(INT32 Num, INT32 nVolShift) +{ +#if defined FBA_DEBUG + if (!DebugSnd_SN76496Initted) bprintf(PRINT_ERROR, _T("SN76496SetVolShift called without init\n")); + if (Num > NumChips) bprintf(PRINT_ERROR, _T("SN76496SetVolShift called with invalid chip %x\n"), Num); +#endif + + if (Num == 0) Chip0->nVolShift = nVolShift; + if (Num == 1) Chip1->nVolShift = nVolShift; + if (Num == 2) Chip2->nVolShift = nVolShift; + if (Num == 3) Chip3->nVolShift = nVolShift; + if (Num == 4) Chip4->nVolShift = nVolShift; +} + INT32 SN76496Scan(INT32 nAction,INT32 *pnMin) { #if defined FBA_DEBUG diff --git a/src/burn/sound/sn76496.h b/src/burn/sound/sn76496.h index 763e7bb08..aafab2f48 100644 --- a/src/burn/sound/sn76496.h +++ b/src/burn/sound/sn76496.h @@ -5,4 +5,5 @@ void SN76489AInit(INT32 Num, INT32 Clock, INT32 SignalAdd); void SN76494Init(INT32 Num, INT32 Clock, INT32 SignalAdd); void SN76496Init(INT32 Num, INT32 Clock, INT32 SignalAdd); void SN76496Exit(); +void SN76496SetVolShift(INT32 Num, INT32 nVolShift); INT32 SN76496Scan(INT32 nAction,INT32 *pnMin);