⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
字号:
#include "driver.h"


#define MAX_OUTPUT 0x7fff

static int channel[MAX_DAC];
static unsigned char latch[MAX_DAC];
static unsigned char VolTable[MAX_DAC][256];
static unsigned char SignedVolTable[MAX_DAC][256];


static void DAC_update(int num,void *buffer,int length)
{
	memset(buffer,latch[num],length);
}


void DAC_data_w(int num,int data)
{
	/* update the output buffer before changing the registers */
	if (latch[num] != data)
		stream_update(channel[num],0);

	latch[num] = VolTable[num][data];
}


void DAC_signed_data_w(int num,int data)
{
	/* update the output buffer before changing the registers */
	if (latch[num] != data)
		stream_update(channel[num],0);

	latch[num] = SignedVolTable[num][data];
}


void DAC_set_volume(int num,int volume,int gain)
{
	int i;
	int out;


	stream_set_volume(channel[num],volume);

	gain &= 0xff;

	/* build volume table (linear) */
	for (i = 255;i > 0;i--)
	{
		out = (i * (1.0 + (gain / 16))) * MAX_OUTPUT / 255;
		/* limit volume to avoid clipping */
		if (out > MAX_OUTPUT) VolTable[num][i] = MAX_OUTPUT / 256;
		else VolTable[num][i] = out / 256;
	}
	VolTable[num][0] = 0;

	for (i = 0;i < 128;i++)
	{
		SignedVolTable[num][0x80 + i] = VolTable[num][2*i];
		SignedVolTable[num][0x80 - i] = -VolTable[num][2*i];
	}
	SignedVolTable[num][0] = -VolTable[num][255];
}


int DAC_sh_start(struct DACinterface *interface)
{
	int i;


	for (i = 0;i < interface->num;i++)
	{
		char name[40];


		sprintf(name,"DAC #%d",i);
		channel[i] = stream_init(
				name,Machine->sample_rate,8,
				i,DAC_update);

		if (channel[i] == -1)
			return 1;

		DAC_set_volume(i,interface->volume[i] & 0xff,(interface->volume[i] >> 8) & 0xff);

		latch[i] = 0;
	}
	return 0;
}

void DAC_sh_stop(void)
{
}

void DAC_sh_update(void)
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -