static INTERRUPT_GEN( sm1800_vblank_interrupt ) { sm1800_state *state = device->machine().driver_data<sm1800_state>(); cputag_set_input_line(device->machine(), "maincpu", 0, state->m_irq_state ? HOLD_LINE : CLEAR_LINE); state->m_irq_state ^= 1; }
static WRITE8_HANDLER( sound_cpu_command_w ) { soundlatch_w(space, offset, data); cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); }
static TIMER_CALLBACK( irq5_gen ) { cputag_set_input_line(machine, "maincpu", R3000_IRQ5, ASSERT_LINE); }
static void set_gate_a20(running_machine *machine, int a20) { cputag_set_input_line(machine, "maincpu", INPUT_LINE_A20, a20); }
static WRITE8_HANDLER( gyruss_i8039_irq_w ) { cputag_set_input_line(space->machine, "audio2", 0, ASSERT_LINE); }
static READ8_HANDLER( magmax_sound_irq_ack ) { cputag_set_input_line(space->machine(), "audiocpu", 0, CLEAR_LINE); return 0; }
static MACHINE_RESET( friskyt ) { /* start with the protection mcu halted */ cputag_set_input_line(machine, "mcu", INPUT_LINE_HALT, ASSERT_LINE); }
static void update_interrupts(running_machine *machine) { cputag_set_input_line(machine, "maincpu", 1, vblank_interrupt_pending ? ASSERT_LINE : CLEAR_LINE); cputag_set_input_line(machine, "maincpu", 2, display_position_interrupt_pending ? ASSERT_LINE : CLEAR_LINE); cputag_set_input_line(machine, "maincpu", 3, irq3_pending ? ASSERT_LINE : CLEAR_LINE); }
static void audio_cpu_irq(const device_config *device, int assert) { cputag_set_input_line(device->machine, "audiocpu", 0, assert ? ASSERT_LINE : CLEAR_LINE); }
static WRITE8_HANDLER( sspeedr_int_ack_w ) { cputag_set_input_line(space->machine, "maincpu", 0, CLEAR_LINE); }
static WRITE8_HANDLER( xyonix_irqack_w ) { cputag_set_input_line(space->machine, "maincpu", 0, CLEAR_LINE); }
static TIMER_CALLBACK( irq_off ) { cputag_set_input_line(machine, "maincpu", M6809_IRQ_LINE, CLEAR_LINE); }
static void update_interrupts(running_machine &machine) { klax_state *state = machine.driver_data<klax_state>(); cputag_set_input_line(machine, "maincpu", 4, state->m_video_int_state || state->m_scanline_int_state ? ASSERT_LINE : CLEAR_LINE); }
static INTERRUPT_GEN( vtech2_interrupt ) { cputag_set_input_line(device->machine(), "maincpu", 0, HOLD_LINE); }
static TIMER_CALLBACK( thunderx_firq_callback ) { cputag_set_input_line(machine, "maincpu", KONAMI_FIRQ_LINE, HOLD_LINE); }
static void audio_cpu_assert_nmi(running_machine *machine) { cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); }
static WRITE_LINE_DEVICE_HANDLER( zaccaria_irq0b ) { cputag_set_input_line(device->machine(), "audiocpu", 0, state ? ASSERT_LINE : CLEAR_LINE); }
static WRITE8_HANDLER( audio_cpu_clear_nmi_w ) { cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); }
static WRITE16_HANDLER( deniam_irq_ack_w ) { cputag_set_input_line(space->machine, "maincpu", 4, CLEAR_LINE); }
static WRITE8_HANDLER( cloak_irq_reset_1_w ) { cputag_set_input_line(space->machine, "slave", 0, CLEAR_LINE); }
static WRITE_LINE_DEVICE_HANDLER( calchase_pic8259_1_set_int_line ) { cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); }
static WRITE_LINE_DEVICE_HANDLER( ipu_ctc_interrupt ) { cputag_set_input_line(device->machine(), "ipu", 0, state); }
static WRITE8_HANDLER( gyruss_irq_clear_w ) { cputag_set_input_line(space->machine, "audio2", 0, CLEAR_LINE); }
static void update_interrupt_state(running_machine &machine) { compis_state *state = machine.driver_data<compis_state>(); int i, j, new_vector = 0; if (LOG_INTERRUPTS) logerror("update_interrupt_status: req=%02X stat=%02X serv=%02X\n", state->m_i186.intr.request, state->m_i186.intr.status, state->m_i186.intr.in_service); /* loop over priorities */ for (i = 0; i <= state->m_i186.intr.priority_mask; i++) { /* note: by checking 4 bits, we also verify that the mask is off */ if ((state->m_i186.intr.timer & 15) == i) { /* if we're already servicing something at this level, don't generate anything new */ if (state->m_i186.intr.in_service & 0x01) return; /* if there's something pending, generate an interrupt */ if (state->m_i186.intr.status & 0x07) { if (state->m_i186.intr.status & 1) new_vector = 0x08; else if (state->m_i186.intr.status & 2) new_vector = 0x12; else if (state->m_i186.intr.status & 4) new_vector = 0x13; else popmessage("Invalid timer interrupt!"); /* set the clear mask and generate the int */ state->m_i186.intr.ack_mask = 0x0001; goto generate_int; } } /* check DMA interrupts */ for (j = 0; j < 2; j++) if ((state->m_i186.intr.dma[j] & 15) == i) { /* if we're already servicing something at this level, don't generate anything new */ if (state->m_i186.intr.in_service & (0x04 << j)) return; /* if there's something pending, generate an interrupt */ if (state->m_i186.intr.request & (0x04 << j)) { new_vector = 0x0a + j; /* set the clear mask and generate the int */ state->m_i186.intr.ack_mask = 0x0004 << j; goto generate_int; } } /* check external interrupts */ for (j = 0; j < 4; j++) if ((state->m_i186.intr.ext[j] & 15) == i) { /* if we're already servicing something at this level, don't generate anything new */ if (state->m_i186.intr.in_service & (0x10 << j)) return; /* if there's something pending, generate an interrupt */ if (state->m_i186.intr.request & (0x10 << j)) { /* otherwise, generate an interrupt for this request */ new_vector = 0x0c + j; /* set the clear mask and generate the int */ state->m_i186.intr.ack_mask = 0x0010 << j; goto generate_int; } } } return; generate_int: /* generate the appropriate interrupt */ state->m_i186.intr.poll_status = 0x8000 | new_vector; if (!state->m_i186.intr.pending) cputag_set_input_line(machine, "maincpu", 0, ASSERT_LINE); state->m_i186.intr.pending = 1; machine.scheduler().trigger(CPU_RESUME_TRIGGER); if (LOG_OPTIMIZATION) logerror(" - trigger due to interrupt pending\n"); if (LOG_INTERRUPTS) logerror("(%f) **** Requesting interrupt vector %02X\n", machine.time().as_double(), new_vector); }
static WRITE8_DEVICE_HANDLER(via_irq) { cputag_set_input_line(device->machine(), "maincpu", 4, data ? ASSERT_LINE : CLEAR_LINE); }
void compis_irq_set(UINT8 irq) { cputag_set_input_line_vector(machine, "maincpu", 0, irq); cputag_set_input_line(machine, "maincpu", 0, HOLD_LINE); }
static void ym2151_irq_gen(device_t *device, int state) { rpunch_state *drvstate = device->machine().driver_data<rpunch_state>(); drvstate->m_ym2151_irq = state; cputag_set_input_line(device->machine(), "audiocpu", 0, (drvstate->m_ym2151_irq | drvstate->m_sound_busy) ? ASSERT_LINE : CLEAR_LINE); }
static void irqhandler(running_device *device, int irq) { cputag_set_input_line(device->machine, "soundcpu", 0, irq ? ASSERT_LINE : CLEAR_LINE); }
static WRITE16_HANDLER( main_sound_latch_w ) { soundlatch_w(space,0,data&0xff); cputag_set_input_line(space->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE); }
static MACHINE_RESET( ccastles ) { ccastles_state *state = machine.driver_data<ccastles_state>(); cputag_set_input_line(machine, "maincpu", 0, CLEAR_LINE); state->m_irq_state = 0; }