70 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|