Replace driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line (nw)

This commit is contained in:
AJR 2017-11-14 23:34:11 -05:00
parent eff0a95e89
commit 50637d602b
31 changed files with 79 additions and 87 deletions

View File

@ -695,6 +695,48 @@ TIMER_CALLBACK_MEMBER(device_execute_interface::trigger_periodic_interrupt)
}
//-------------------------------------------------
// irq_pulse_clear - clear a "pulsed" input line
//-------------------------------------------------
TIMER_CALLBACK_MEMBER(device_execute_interface::irq_pulse_clear)
{
int irqline = param;
set_input_line(irqline, CLEAR_LINE);
}
//-------------------------------------------------
// pulse_input_line - "pulse" an input line by
// asserting it and then clearing it later
//-------------------------------------------------
void device_execute_interface::pulse_input_line(int irqline, const attotime &duration)
{
assert(duration > attotime::zero);
set_input_line(irqline, ASSERT_LINE);
attotime target_time = local_time() + duration;
m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline);
}
//-------------------------------------------------
// pulse_input_line_and_vector - "pulse" an
// input line by asserting it and then clearing it
// later, specifying a vector
//-------------------------------------------------
void device_execute_interface::pulse_input_line_and_vector(int irqline, int vector, const attotime &duration)
{
assert(duration > attotime::zero);
set_input_line_and_vector(irqline, ASSERT_LINE, vector);
attotime target_time = local_time() + duration;
m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline);
}
//**************************************************************************
// DEVICE INPUT

View File

@ -162,6 +162,10 @@ public:
void set_input_line_vector(int linenum, int vector) { m_input[linenum].set_vector(vector); }
void set_input_line_and_vector(int linenum, int state, int vector) { m_input[linenum].set_state_synced(state, vector); }
int input_state(int linenum) const { return m_input[linenum].m_curstate; }
void pulse_input_line(int irqline, const attotime &duration);
void pulse_input_line_and_vector(int irqline, int vector, const attotime &duration);
void pulse_input_line(int irqline, int cycles) { pulse_input_line(irqline, cycles_to_attotime(cycles * min_cycles())); }
void pulse_input_line_and_vector(int irqline, int vector, int cycles) { pulse_input_line_and_vector(irqline, vector, cycles_to_attotime(cycles * min_cycles())); }
// suspend/resume
void suspend(u32 reason, bool eatcycles);
@ -292,6 +296,7 @@ private:
void on_vblank(screen_device &screen, bool vblank_state);
TIMER_CALLBACK_MEMBER(trigger_periodic_interrupt);
TIMER_CALLBACK_MEMBER(irq_pulse_clear);
void suspend_resume_changed();
attoseconds_t minimum_quantum() const;

View File

@ -259,55 +259,6 @@ void driver_device::device_reset_after_children()
//**************************************************************************
// INTERRUPT ENABLE AND VECTOR HELPERS
//**************************************************************************
//-------------------------------------------------
// irq_pulse_clear - clear a "pulsed" IRQ line
//-------------------------------------------------
void driver_device::irq_pulse_clear(void *ptr, s32 param)
{
device_execute_interface *exec = reinterpret_cast<device_execute_interface *>(ptr);
int irqline = param;
exec->set_input_line(irqline, CLEAR_LINE);
}
//-------------------------------------------------
// generic_pulse_irq_line - "pulse" an IRQ line by
// asserting it and then clearing it x cycle(s)
// later
//-------------------------------------------------
void driver_device::generic_pulse_irq_line(device_execute_interface &exec, int irqline, int cycles)
{
assert(irqline != INPUT_LINE_NMI && irqline != INPUT_LINE_RESET && cycles > 0);
exec.set_input_line(irqline, ASSERT_LINE);
attotime target_time = exec.local_time() + exec.cycles_to_attotime(cycles * exec.min_cycles());
machine().scheduler().timer_set(target_time - machine().time(), timer_expired_delegate(FUNC(driver_device::irq_pulse_clear), this), irqline, (void *)&exec);
}
//-------------------------------------------------
// generic_pulse_irq_line_and_vector - "pulse" an
// IRQ line by asserting it and then clearing it
// x cycle(s) later, specifying a vector
//-------------------------------------------------
void driver_device::generic_pulse_irq_line_and_vector(device_execute_interface &exec, int irqline, int vector, int cycles)
{
assert(irqline != INPUT_LINE_NMI && irqline != INPUT_LINE_RESET && cycles > 0);
exec.set_input_line_and_vector(irqline, ASSERT_LINE, vector);
attotime target_time = exec.local_time() + exec.cycles_to_attotime(cycles * exec.min_cycles());
machine().scheduler().timer_set(target_time - machine().time(), timer_expired_delegate(FUNC(driver_device::irq_pulse_clear), this), irqline, (void *)&exec);
}
//**************************************************************************
// INTERRUPT GENERATION CALLBACK HELPERS
//**************************************************************************

View File

@ -130,10 +130,6 @@ public:
// output heler
output_manager &output() const { return machine().output(); }
// generic interrupt generators
void generic_pulse_irq_line(device_execute_interface &exec, int irqline, int cycles);
void generic_pulse_irq_line_and_vector(device_execute_interface &exec, int irqline, int vector, int cycles);
INTERRUPT_GEN_MEMBER( nmi_line_pulse );
INTERRUPT_GEN_MEMBER( nmi_line_assert );
@ -196,7 +192,6 @@ protected:
private:
// helpers
void irq_pulse_clear(void *ptr, s32 param);
void updateflip();
// internal state

View File

@ -1962,7 +1962,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::dcs_irq )
/* generate the (internal, thats why the pulse) irq */
if (LOG_DCS_IO)
logerror("dcs_irq: Genrating interrupt\n");
m_cpu->machine().driver_data()->generic_pulse_irq_line(*m_cpu, ADSP2105_IRQ1, 1);
m_cpu->pulse_input_line(ADSP2105_IRQ1, 1);
}
/* store it */

View File

@ -227,7 +227,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback )
if (m_control_regs[BDMA_CONTROL_REG] & 8)
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
else
m_cpu->machine().driver_data()->generic_pulse_irq_line(*m_cpu, ADSP2181_BDMA, 1);
m_cpu->pulse_input_line(ADSP2181_BDMA, 1);
timer.adjust(attotime::never);
}

View File

@ -114,7 +114,7 @@ TIMER_CALLBACK_MEMBER(cball_state::interrupt_callback)
{
int scanline = param;
generic_pulse_irq_line(*m_maincpu, 0, 1);
m_maincpu->pulse_input_line(0, 1);
scanline = scanline + 32;

View File

@ -352,7 +352,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(changela_state::changela_scanline)
INTERRUPT_GEN_MEMBER(changela_state::chl_mcu_irq)
{
generic_pulse_irq_line(*m_mcu, 0, 1);
m_mcu->pulse_input_line(0, 1);
}
void changela_state::machine_start()

View File

@ -227,8 +227,7 @@ WRITE8_MEMBER(cvs_state::cvs_s2636_2_or_character_ram_w)
INTERRUPT_GEN_MEMBER(cvs_state::cvs_main_cpu_interrupt)
{
device.execute().set_input_line_vector(0, 0x03);
generic_pulse_irq_line(device.execute(), 0, 1);
device.execute().pulse_input_line_and_vector(0, 0x03, 1);
cvs_scroll_stars();
}

View File

@ -68,7 +68,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(dotrikun_state::interrupt)
{
generic_pulse_irq_line(*m_maincpu, 0, 1);
m_maincpu->pulse_input_line(0, 1);
}
TIMER_DEVICE_CALLBACK_MEMBER(dotrikun_state::scanline_off)

View File

@ -416,7 +416,7 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w)
case 1: // c0f9: RST75 trigger (written by NMI handler)
// Note: solder pad CP3 on the pcb would allow to disable this
generic_pulse_irq_line(*m_audiocpu, I8085_RST75_LINE, 1);
m_audiocpu->pulse_input_line(I8085_RST75_LINE, 1);
break;
case 2: // c0fa: INTR trigger (written by NMI handler)

View File

@ -58,7 +58,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(firetrk_state::firetrk_scanline)
// periodic IRQs are generated by inverse 16V signal
if ((scanline & 0x1f) == 0)
generic_pulse_irq_line(*m_maincpu, 0, 1);
m_maincpu->pulse_input_line(0, 1);
// vblank interrupt
// NMIs are disabled during service mode

View File

@ -258,7 +258,7 @@ WRITE8_MEMBER(fitfight_state::snd_portc_w)
INTERRUPT_GEN_MEMBER(fitfight_state::snd_irq)
{
generic_pulse_irq_line(device.execute(), UPD7810_INTF2, 1);
device.execute().pulse_input_line(UPD7810_INTF2, 1);
}

View File

@ -561,7 +561,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(gaelco3d_state::adsp_autobuffer_irq)
reg = m_adsp_ireg_base;
/* generate the (internal, thats why the pulse) irq */
generic_pulse_irq_line(*m_adsp, ADSP2105_IRQ1, 1);
m_adsp->pulse_input_line(ADSP2105_IRQ1, 1);
}
/* store it */

View File

@ -253,7 +253,7 @@ INTERRUPT_GEN_MEMBER(homedata_state::homedata_irq)
INTERRUPT_GEN_MEMBER(homedata_state::upd7807_irq)
{
generic_pulse_irq_line(device.execute(), UPD7810_INTF1, 1);
device.execute().pulse_input_line(UPD7810_INTF1, 1);
}

View File

@ -329,7 +329,7 @@ INPUT_PORTS_END
INTERRUPT_GEN_MEMBER(igs_m027_state::igs_majhong_interrupt)
{
generic_pulse_irq_line(device.execute(), ARM7_FIRQ_LINE, 1);
device.execute().pulse_input_line(ARM7_FIRQ_LINE, 1);
}

View File

@ -699,7 +699,7 @@ INTERRUPT_GEN_MEMBER(m90_state::bomblord_fake_nmi)
INTERRUPT_GEN_MEMBER(m90_state::m90_interrupt)
{
generic_pulse_irq_line(device.execute(), NEC_INPUT_LINE_INTP0, 1);
device.execute().pulse_input_line(NEC_INPUT_LINE_INTP0, 1);
}
INTERRUPT_GEN_MEMBER(m90_state::dynablsb_interrupt)

View File

@ -164,7 +164,7 @@ uint32_t meyc8088_state::screen_update_meyc8088(screen_device &screen, bitmap_in
WRITE_LINE_MEMBER(meyc8088_state::screen_vblank_meyc8088)
{
// INTR on LC255 (pulses at start and end of vblank), INTA hardwired to $20
generic_pulse_irq_line_and_vector(*m_maincpu, 0, 0x20, 1);
m_maincpu->pulse_input_line_and_vector(0, 0x20, 1);
}

View File

@ -159,7 +159,7 @@ TIMER_CALLBACK_MEMBER(mgolf_state::interrupt_callback)
update_plunger();
generic_pulse_irq_line(*m_maincpu, 0, 1);
m_maincpu->pulse_input_line(0, 1);
scanline = scanline + 32;

View File

@ -322,7 +322,7 @@ INTERRUPT_GEN_MEMBER(namcond1_state::mcu_interrupt)
{
if( m_h8_irq5_enabled )
{
generic_pulse_irq_line(device.execute(), 5, 1);
device.execute().pulse_input_line(5, 1);
}
}

View File

@ -2978,7 +2978,7 @@ ADDRESS_MAP_END
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_interrupt)
{
generic_pulse_irq_line(*m_mcu, M37710_LINE_TIMERA3TICK, 1);
m_mcu->pulse_input_line(M37710_LINE_TIMERA3TICK, 1);
}
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update)
@ -3013,7 +3013,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update)
TIMER_CALLBACK_MEMBER(namcos22_state::adillor_trackball_interrupt)
{
generic_pulse_irq_line(*m_mcu, param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1);
m_mcu->pulse_input_line(param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1);
}
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::adillor_trackball_update)

View File

@ -284,7 +284,7 @@ INPUT_CHANGED_MEMBER(pntnpuzl_state::coin_inserted)
{
/* TODO: change this! */
if(newval)
generic_pulse_irq_line(*m_maincpu, (uint8_t)(uintptr_t)param, 1);
m_maincpu->pulse_input_line((uint8_t)(uintptr_t)param, 1);
}
static INPUT_PORTS_START( pntnpuzl )

View File

@ -589,7 +589,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer0_callback)
m_IRQ_status_A|=0x20;
if(m_IRQ_mask_A&0x20)
{
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
}
}
@ -598,7 +598,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer1_callback)
m_IRQ_status_A|=0x40;
if(m_IRQ_mask_A&0x40)
{
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
}
}
@ -607,7 +607,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::flyback_timer_callback)
m_IRQ_status_A|=0x08;
if(m_IRQ_mask_A&0x08)
{
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
}
m_flyback_timer->adjust(machine().first_screen()->time_until_pos(m_vidc20_vert_reg[VDER]));

View File

@ -339,7 +339,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer0_callback)
m_PS7500_IO[IRQSTA]|=0x20;
if(m_PS7500_IO[IRQMSKA]&0x20)
{
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE, 1);
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
}
}
@ -358,7 +358,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer1_callback)
m_PS7500_IO[IRQSTA]|=0x40;
if(m_PS7500_IO[IRQMSKA]&0x40)
{
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE, 1);
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
}
}
@ -376,7 +376,7 @@ INTERRUPT_GEN_MEMBER(ssfindo_state::interrupt)
m_PS7500_IO[IRQSTA]|=0x08;
if(m_PS7500_IO[IRQMSKA]&0x08)
{
generic_pulse_irq_line(device.execute(), ARM7_IRQ_LINE, 1);
device.execute().pulse_input_line(ARM7_IRQ_LINE, 1);
}
}

View File

@ -21,7 +21,7 @@ Atari Starship 1 driver
INTERRUPT_GEN_MEMBER(starshp1_state::starshp1_interrupt)
{
if ((ioport("SYSTEM")->read() & 0x90) != 0x90)
generic_pulse_irq_line(device.execute(), 0, 1);
device.execute().pulse_input_line(0, 1);
}

View File

@ -185,7 +185,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_2_state::zac_2_inttimer)
{
// a pulse is sent via a capacitor (similar to what one finds at a reset pin)
if (m_t_c > 0x80)
generic_pulse_irq_line_and_vector(*m_maincpu, INPUT_LINE_IRQ0, 0xbf, 2);
m_maincpu->pulse_input_line_and_vector(INPUT_LINE_IRQ0, 0xbf, 2);
else
m_t_c++;
}

View File

@ -121,7 +121,7 @@ void _3do_state::m_3do_request_fiq(uint32_t irq_req, uint8_t type)
if((m_clio.irq0 & m_clio.irq0_enable) || (m_clio.irq1 & m_clio.irq1_enable))
{
//printf("Go irq %08x & %08x %08x & %08x\n",m_clio.irq0, m_clio.irq0_enable, m_clio.irq1, m_clio.irq1_enable);
generic_pulse_irq_line(*m_maincpu, ARM7_FIRQ_LINE, 1);
m_maincpu->pulse_input_line(ARM7_FIRQ_LINE, 1);
}
}

View File

@ -67,7 +67,7 @@ void archimedes_state::archimedes_request_fiq(int mask)
if (m_ioc_regs[FIQ_STATUS] & m_ioc_regs[FIQ_MASK])
{
generic_pulse_irq_line(*m_maincpu, ARM_FIRQ_LINE, 1);
m_maincpu->pulse_input_line(ARM_FIRQ_LINE, 1);
//m_maincpu->set_input_line(ARM_FIRQ_LINE, CLEAR_LINE);
//m_maincpu->set_input_line(ARM_FIRQ_LINE, ASSERT_LINE);

View File

@ -171,7 +171,7 @@ DRIVER_INIT_MEMBER(galaxold_state,4in1)
INTERRUPT_GEN_MEMBER(galaxold_state::hunchbks_vh_interrupt)
{
generic_pulse_irq_line_and_vector(device.execute(),0,0x03,1);
device.execute().pulse_input_line_and_vector(0, 0x03, 1);
}
DRIVER_INIT_MEMBER(galaxold_state,bullsdrtg)

View File

@ -504,7 +504,7 @@ WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_ctrl_w )
/* If the interrupt enable bit is set trigger an A/D IRQ */
if(data & 0x20)
{
generic_pulse_irq_line(*m_mcu, HD63705_INT_ADCONV, 1);
m_mcu->pulse_input_line(HD63705_INT_ADCONV, 1);
}
}
}

View File

@ -90,7 +90,7 @@ READ16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_r )
WRITE16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_w )
{
generic_pulse_irq_line(*m_prot, ARM7_FIRQ_LINE, 1);
m_prot->pulse_input_line(ARM7_FIRQ_LINE, 1);
}
WRITE16_MEMBER(pgm_arm_type3_state::svg_latch_68k_w )