AxibugEmuOnline/AxibugEmuOnline.Client/Assets/Plugins/Mame.Core/sound/DAC.cs

70 lines
2.0 KiB
C#

using System.IO;
namespace MAME.Core
{
public class DAC
{
public struct dac_info
{
public sound_stream channel;
public short output;
public short[] UnsignedVolTable;
public short[] SignedVolTable;
};
public static dac_info dac1;
public unsafe static void DAC_update(int offset, int length)
{
;
short out1 = dac1.output;
int i;
for (i = 0; i < length; i++)
{
Sound.dacstream.streamoutput_Ptrs[0][offset + i] = out1;
}
}
public static void dac_signed_data_w(int num, byte data)
{
short out1 = dac1.SignedVolTable[data];
if (dac1.output != out1)
{
Sound.dacstream.stream_update();
dac1.output = out1;
}
}
public static void dac_signed_data_16_w(int num, ushort data)
{
short out1 = (short)((uint)data - (uint)0x08000);
if (dac1.output != out1)
{
Sound.dacstream.stream_update();
dac1.output = out1;
}
}
public static void DAC_build_voltable()
{
int i;
for (i = 0; i < 256; i++)
{
dac1.UnsignedVolTable[i] = (short)(i * 0x101 / 2);
dac1.SignedVolTable[i] = (short)(i * 0x101 - 0x8000);
}
}
public static void dac_start()
{
dac1 = new dac_info();
dac1.UnsignedVolTable = new short[256];
dac1.SignedVolTable = new short[256];
DAC_build_voltable();
dac1.output = 0;
}
public static void SaveStateBinary(BinaryWriter writer)
{
writer.Write(DAC.dac1.output);
}
public static void LoadStateBinary(BinaryReader reader)
{
dac1.output = reader.ReadInt16();
}
}
}