static INTERRUPT_GEN( firetrap ) { firetrap_state *state = (firetrap_state *)device->machine->driver_data; /* Check for coin IRQ */ if (cpu_getiloops(device)) { if ((input_port_read(device->machine, "COIN") & 0x7) != 0x7 && !state->int_latch) { state->coin_command_pending = ~input_port_read(device->machine, "COIN"); state->int_latch = 1; } if ((input_port_read(device->machine, "COIN") & 0x7) == 0x7) state->int_latch = 0; /* Make sure coin IRQ's aren't generated when another command is pending, the main cpu definitely doesn't expect them as it locks out the coin routine */ if (state->coin_command_pending && !state->i8751_current_command) { state->i8751_return = state->coin_command_pending; cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xff); state->coin_command_pending = 0; } } if (state->nmi_enable && !cpu_getiloops(device)) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); }
static INTERRUPT_GEN( shaolins_interrupt ) { if (cpu_getiloops(device) == 0) cpu_set_input_line(device, 0, HOLD_LINE); else if (cpu_getiloops(device) % 2) { if (shaolins_nmi_enable & 0x02) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } }
static int thunderx_interrupt( void ) { if (K052109_is_IRQ_enabled()) { if (cpu_getiloops() == 0) return KONAMI_INT_IRQ; else if (cpu_getiloops() & 1) return KONAMI_INT_FIRQ; /* ??? */ } return ignore_interrupt(); }
int shaolins_interrupt(void) { if (cpu_getiloops() == 0) return interrupt(); else if (cpu_getiloops() % 2) { if (*shaolins_nmi_enable & 0x02) return nmi_interrupt(); } return ignore_interrupt(); }
static INTERRUPT_GEN( xorworld_interrupt ) { if (cpu_getiloops() == 0) { cpunum_set_input_line(0, 2, HOLD_LINE); } else if (cpu_getiloops() % 2) { cpunum_set_input_line(0, 6, HOLD_LINE); } }
static INTERRUPT_GEN( pingpong_interrupt ) { if (cpu_getiloops(device) == 0) { if (intenable & 0x04) cpu_set_input_line(device, 0, HOLD_LINE); } else if (cpu_getiloops(device) % 2) { if (intenable & 0x08) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } }
static int ironhors_interrupt(void) { if (cpu_getiloops() == 0) { if (*ironhors_interrupt_enable & 4) return M6809_INT_FIRQ; } else if (cpu_getiloops() % 2) { if (*ironhors_interrupt_enable & 1) return nmi_interrupt(); } return ignore_interrupt(); }
static int finalizr_interrupt(void) { if (cpu_getiloops() == 0) { if (*finalizr_interrupt_enable & 2) return M6809_INT_IRQ; } else if (cpu_getiloops() % 2) { if (*finalizr_interrupt_enable & 1) return nmi_interrupt(); } return ignore_interrupt(); }
static int labyrunr_interrupt(void) { if (cpu_getiloops() == 0) { if (K007121_ctrlram[0][0x07] & 0x02) return HD6309_INT_IRQ; } else if (cpu_getiloops() % 2) { if (K007121_ctrlram[0][0x07] & 0x01) return nmi_interrupt(); } return ignore_interrupt(); }
static INTERRUPT_GEN( ironhors_interrupt ) { if (cpu_getiloops(device) == 0) { if (*ironhors_interrupt_enable & 4) cpu_set_input_line(device, M6809_FIRQ_LINE, HOLD_LINE); } else if (cpu_getiloops(device) % 2) { if (*ironhors_interrupt_enable & 1) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } }
static INTERRUPT_GEN( finalizr_interrupt ) { if (cpu_getiloops() == 0) { if (*finalizr_interrupt_enable & 2) cpunum_set_input_line(0, M6809_IRQ_LINE, HOLD_LINE); } else if (cpu_getiloops() % 2) { if (*finalizr_interrupt_enable & 1) cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE); } }
static int pingpong_interrupt(void) { if (cpu_getiloops() == 0) { if (*intenable & 0x04) return interrupt(); } else if (cpu_getiloops() % 2) { if (*intenable & 0x08) return nmi_interrupt(); } return ignore_interrupt(); }
static INTERRUPT_GEN( labyrunr_interrupt ) { if (cpu_getiloops() == 0) { if (K007121_ctrlram[0][0x07] & 0x02) cpunum_set_input_line(0, HD6309_IRQ_LINE, HOLD_LINE); } else if (cpu_getiloops() % 2) { if (K007121_ctrlram[0][0x07] & 0x01) cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE); } }
static INTERRUPT_GEN( ironhors_interrupt ) { if (cpu_getiloops() == 0) { if (*ironhors_interrupt_enable & 4) cpu_set_irq_line(0, M6809_FIRQ_LINE, HOLD_LINE); } else if (cpu_getiloops() % 2) { if (*ironhors_interrupt_enable & 1) cpu_set_irq_line(0, IRQ_LINE_NMI, PULSE_LINE); } }
GFXDECODE_END static INTERRUPT_GEN( xorworld_interrupt ) { if (cpu_getiloops(device) == 0) { cpu_set_input_line(device, 2, HOLD_LINE); } else if (cpu_getiloops(device) % 2) { cpu_set_input_line(device, 6, HOLD_LINE); } }
static INTERRUPT_GEN( yamyam_interrupt ) { if (cpu_getiloops() == 0) { if (input_ports_hack) { rambase[0x004] = readinputport(4); /* COIN */ rambase[0x005] = readinputport(3); /* IN1 */ rambase[0x006] = readinputport(2); /* IN0 */ } cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0xd7); /* RST 10h vblank */ } else if ((cpu_getiloops() & 1) == 1) cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0xcf); /* RST 08h sound (hand tuned) */ }
static INTERRUPT_GEN( labyrunr_interrupt ) { labyrunr_state *state = (labyrunr_state *)device->machine->driver_data; if (cpu_getiloops(device) == 0) { if (k007121_ctrlram_r(state->k007121, 7) & 0x02) cpu_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE); } else if (cpu_getiloops(device) % 2) { if (k007121_ctrlram_r(state->k007121, 7) & 0x01) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } }
static INTERRUPT_GEN( espial_master_interrupt ) { if (cpu_getiloops(device) == 0) nmi_line_pulse(device); else irq0_line_hold(device); }
GFXDECODE_END /*************************************************************************** Machine drivers ***************************************************************************/ /*************************************************************************** Back Street Soccer ***************************************************************************/ static INTERRUPT_GEN( bssoccer_interrupt ) { switch (cpu_getiloops(device)) { case 0: cpu_set_input_line(device, 1, HOLD_LINE); break; case 1: cpu_set_input_line(device, 2, HOLD_LINE); break; } }
static INTERRUPT_GEN(polygonet_interrupt) { if (cpu_getiloops()) cpu_set_irq_line(0, MC68000_IRQ_5, HOLD_LINE); else cpu_set_irq_line(0, MC68000_IRQ_3, HOLD_LINE); }
static INTERRUPT_GEN( olibochu_interrupt ) { if (cpu_getiloops() == 0) cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0xcf); /* RST 08h */ else cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0xd7); /* RST 10h */ }
static INTERRUPT_GEN( mystston_interrupt ) { int scanline = 271 - cpu_getiloops(); static int coin; /* Inserting a coin triggers an NMI */ if ((readinputport(0) & 0xc0) != 0xc0) { if (coin == 0) { coin = 1; nmi_line_pulse(); return; } } else coin = 0; /* VBLK is lowered on scanline 8 */ if (scanline == 8) VBLK = 0; /* VBLK is raised on scanline 248 */ if (scanline == 248) VBLK = 0x80; /* IMS is triggered every time VLOC line 3 is raised, as VLOC counter starts at 16, effectively every 16 scanlines */ if ((scanline % 16) == 0) cpunum_set_input_line(0, 0, ASSERT_LINE); }
INPUT_PORTS_END static INTERRUPT_GEN( sliver_int ) { //valid interrupts are 2,3,4 device_set_input_line(device, 2+cpu_getiloops(device), HOLD_LINE); }
static int yamyam_interrupt(void) { if (cpu_getiloops() == 0) { if (input_ports_hack) { unsigned char *RAM = memory_region(REGION_CPU1); RAM[0xe004] = readinputport(4); /* COIN */ RAM[0xe005] = readinputport(3); /* IN1 */ RAM[0xe006] = readinputport(2); /* IN0 */ } return 0xd7; /* RST 10h vblank */ } if ((cpu_getiloops() & 1) == 1) return 0xcf; /* RST 08h sound (hand tuned) */ else return ignore_interrupt(); }
GFXDECODE_END static INTERRUPT_GEN( parentj_interrupt ) { cpu_set_input_line(device, cpu_getiloops(device) ? 4 : 5, HOLD_LINE); }
static INTERRUPT_GEN( vulgus_interrupt ) { if (cpu_getiloops(device) != 0) cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xcf); /* RST 08h */ else cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xd7); /* RST 10h - vblank */ }
static INTERRUPT_GEN( blockout_interrupt ) { /* interrupt 6 is vblank */ /* interrupt 5 reads coin inputs - might have to be triggered only */ /* when a coin is inserted */ cpunum_set_input_line(0, 6 - cpu_getiloops(), HOLD_LINE); }
static INTERRUPT_GEN( lastduel_interrupt ) { if (cpu_getiloops(device) == 0) cpu_set_input_line(device, 2, HOLD_LINE); /* VBL */ else cpu_set_input_line(device, 4, HOLD_LINE); /* Controls */ }
static INTERRUPT_GEN( panicr_interrupt ) { if (cpu_getiloops(device)) cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xc8/4); else cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xc4/4); }
static INTERRUPT_GEN( madgear_interrupt ) { if (cpu_getiloops(device) == 0) cpu_set_input_line(device, 5, HOLD_LINE); /* VBL */ else cpu_set_input_line(device, 6, HOLD_LINE); /* Controls */ }