Coleco: Fix noise channel audio
This commit is contained in:
parent
444e8d7621
commit
38a07e8246
BizHawk.Emulation.Cores/Consoles/Coleco
|
@ -3,6 +3,7 @@
|
|||
using BizHawk.Common;
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Common.NumberExtensions;
|
||||
using System;
|
||||
|
||||
namespace BizHawk.Emulation.Cores.ColecoVision
|
||||
{
|
||||
|
@ -23,6 +24,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
public bool vol_tone;
|
||||
public bool noise_type;
|
||||
public int noise_rate;
|
||||
public bool noise_bit;
|
||||
|
||||
private int _sampleClock;
|
||||
|
||||
|
@ -76,6 +78,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
ser.Sync("Clock_B", ref clock_B);
|
||||
ser.Sync("Clock_C", ref clock_C);
|
||||
ser.Sync("noise_clock", ref noise_clock);
|
||||
ser.Sync("noise_bit", ref noise_bit);
|
||||
|
||||
ser.Sync("psg_clock", ref psg_clock);
|
||||
ser.Sync("sample_clock", ref _sampleClock);
|
||||
|
@ -85,6 +88,8 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
ser.Sync("C_up", ref C_up);
|
||||
ser.Sync("noise", ref noise);
|
||||
|
||||
ser.Sync("current_sample", ref current_sample);
|
||||
|
||||
ser.EndSection();
|
||||
}
|
||||
|
||||
|
@ -104,8 +109,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
|
||||
if (vol_tone)
|
||||
{
|
||||
Chan_vol[chan_sel] &= 0xF0;
|
||||
Chan_vol[chan_sel] |= (byte)(value & 0xF);
|
||||
Chan_vol[chan_sel] = (byte)(value & 0xF);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -128,8 +132,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
{
|
||||
if (vol_tone)
|
||||
{
|
||||
Chan_vol[chan_sel] &= 0xF;
|
||||
Chan_vol[chan_sel] |= (byte)((value & 0xF) << 4);
|
||||
Chan_vol[chan_sel] = (byte)(value & 0xF);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -165,15 +168,18 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
clock_A--;
|
||||
clock_B--;
|
||||
clock_C--;
|
||||
noise_clock--;
|
||||
|
||||
// clock noise
|
||||
if (noise_clock == 0)
|
||||
{
|
||||
noise_bit = noise.Bit(0);
|
||||
if (noise_type)
|
||||
{
|
||||
int bit = (noise & 1) ^ ((noise >> 1) & 1);
|
||||
noise = noise >> 1;
|
||||
noise |= bit << 14;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -188,7 +194,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
}
|
||||
else if (noise_rate == 1)
|
||||
{
|
||||
noise_clock = 0x120;
|
||||
noise_clock = 0x20;
|
||||
}
|
||||
else if (noise_rate == 2)
|
||||
{
|
||||
|
@ -197,7 +203,9 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
else
|
||||
{
|
||||
noise_clock = Chan_tone[2] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
noise_clock *= 2;
|
||||
}
|
||||
|
||||
|
||||
|
@ -229,7 +237,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
|
||||
v += (short)(C_up ? LogScale[Chan_vol[2]] * 42 : 0);
|
||||
|
||||
v += (short)(noise.Bit(0) ? LogScale[Chan_vol[3]] * 42 : 0);
|
||||
v += (short)(noise_bit ? LogScale[Chan_vol[3]] * 42 : 0);
|
||||
|
||||
current_sample = (short)v;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue