Exemplo n.º 1
0
/* 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);
		}
	}
}
Exemplo n.º 2
0
static TIMER_CALLBACK( a310_audio_tick )
{
	vidc_sndcur++;

	if (vidc_sndcur >= vidc_sndend)
	{
		archimedes_request_irq_b(machine, ARCHIMEDES_IRQB_SOUND_EMPTY);
	}
}
Exemplo n.º 3
0
static INTERRUPT_GEN( ertictac_podule_irq )
{
	archimedes_request_irq_b(device->machine(), ARCHIMEDES_IRQB_PODULE_IRQ);
}