示例#1
0
文件: archimds.c 项目: cdenix/psmame
/* audio DMA */
static TIMER_CALLBACK( vidc_audio_tick )
{
	address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
	UINT8 ulaw_comp;
	INT16 res;
	UINT8 ch;
	static const char *const dac_port[8] = { "dac0", "dac1", "dac2", "dac3", "dac4", "dac5", "dac6", "dac7" };

	for(ch=0;ch<8;ch++)
	{
		ulaw_comp = (space->read_byte(vidc_sndstart+vidc_sndcur + ch));

		res=1<<((ulaw_comp>>5)+4);
    	res+=(((ulaw_comp>>1)&0xF)<<(ulaw_comp>>5));
    	if (ulaw_comp&1) res=-res;

		dac_signed_data_16_w(space->machine().device(dac_port[ch & 7]), res);
	}

	vidc_sndcur+=8;

	if (vidc_sndcur >= (vidc_sndend-vidc_sndstart)+0x10)
	{
		vidc_sndcur = 0;
		archimedes_request_irq_b(machine, ARCHIMEDES_IRQB_SOUND_EMPTY);

		if(!audio_dma_on)
		{
			snd_timer->adjust(attotime::never);
			for(ch=0;ch<8;ch++)
				dac_signed_data_16_w(space->machine().device(dac_port[ch & 7]), 0x8000);
		}
	}
}
示例#2
0
文件: ip22.c 项目: risico/jsmess
static TIMER_CALLBACK(ip22_dma)
{
	//ip22_state *state = machine.driver_data<ip22_state>();
	machine.scheduler().timer_set(attotime::never, FUNC(ip22_dma));
#if 0
	if( state->m_PBUS_DMA.nActive )
	{
		UINT16 temp16 = ( state->m_mainram[(state->m_PBUS_DMA.nCurPtr - 0x08000000)/4] & 0xffff0000 ) >> 16;
		INT16 stemp16 = (INT16)((temp16 >> 8) | (temp16 << 8));

		dac_signed_data_16_w(machine.device("dac"), stemp16 ^ 0x8000);

		state->m_PBUS_DMA.nCurPtr += 4;

		state->m_PBUS_DMA.nWordsLeft -= 4;
		if( state->m_PBUS_DMA.nWordsLeft == 0 )
		{
			if( state->m_PBUS_DMA.nNextPtr != 0 )
			{
				state->m_PBUS_DMA.nDescPtr = state->m_PBUS_DMA.nNextPtr;
				state->m_PBUS_DMA.nCurPtr = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4];
				state->m_PBUS_DMA.nWordsLeft = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4+1];
				state->m_PBUS_DMA.nNextPtr = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4+2];
			}
			else
			{
				state->m_PBUS_DMA.nActive = 0;
				return;
			}
		}
		machine.scheduler().timer_set(attotime::from_hz(44100), FUNC(ip22_dma));
	}
示例#3
0
static WRITE8_DEVICE_HANDLER( voice_w )
{
	dac_signed_data_16_w(device, data ? (data + 1) * 0x100 : 0x8000);
}