/* 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); } } }
static TIMER_CALLBACK( a310_audio_tick ) { vidc_sndcur++; if (vidc_sndcur >= vidc_sndend) { archimedes_request_irq_b(machine, ARCHIMEDES_IRQB_SOUND_EMPTY); } }
static INTERRUPT_GEN( ertictac_podule_irq ) { archimedes_request_irq_b(device->machine(), ARCHIMEDES_IRQB_PODULE_IRQ); }