Coleco: Fix noise channel audio

This commit is contained in:
alyosha-tas 2018-03-09 19:32:49 -05:00
parent 444e8d7621
commit 38a07e8246
1 changed files with 15 additions and 7 deletions
BizHawk.Emulation.Cores/Consoles/Coleco

View File

@ -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;
}