diexec: Interrupt API changes (nw)

- PULSE_LINE is no longer a value. Existing uses have been changed to pulse_input_line with attotime::zero as the second argument.
- Formerly only INPUT_LINE_NMI and INPUT_LINE_RESET were allowed with PULSE_LINE. INPUT_LINE_NMI no longer receives special handling; instead, CPU devices must specify which of their input lines are edge-triggered and thus may be used with zero-width pulses by overriding the execute_input_edge_triggered predicate. INPUT_LINE_RESET is still special-cased, however.
- execute_default_irq_vector now allows a different default vector to be specified for each input line. This added flexibility may or may not prove useful.
This commit is contained in:
AJR 2018-05-18 13:32:56 -04:00
parent e5dc17a488
commit 0ba652e723
340 changed files with 484 additions and 459 deletions

View File

@ -144,7 +144,7 @@ uint8_t a2bus_applicard_device::read_c0nx(uint8_t offset)
fatalerror("Applicard: Z80 IRQ not supported yet\n");
case 7: // NMI on Z80 (direct)
m_z80->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_z80->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
break;
}

View File

@ -526,7 +526,7 @@ WRITE8_MEMBER( epson_lx810l_device::cr_stepper )
WRITE_LINE_MEMBER( epson_lx810l_device::e05a30_ready )
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -103,7 +103,7 @@ INPUT_CHANGED_MEMBER(cpc_transtape_device::button_red_w)
{
m_output |= 0x1f;
map_enable();
m_cpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}

View File

@ -376,7 +376,7 @@ void isa8_device::nmi()
{
if (m_nmi_enabled)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE );
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}
else

View File

@ -602,7 +602,7 @@ WRITE8_MEMBER( sb16_lle_device::dsp_reset_w )
if(data & 1)
{
device_reset();
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
}

View File

@ -168,7 +168,7 @@ void stereo_fx_device::dack_w(int line, uint8_t data)
WRITE8_MEMBER( stereo_fx_device::dsp_reset_w )
{
device_reset();
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
READ8_MEMBER( stereo_fx_device::dsp_wbuf_status_r )

View File

@ -3369,7 +3369,7 @@ void cp1610_cpu_device::device_start()
void cp1610_cpu_device::device_reset()
{
/* This is how we set the reset vector */
set_input_line(CP1610_RESET, PULSE_LINE);
pulse_input_line(CP1610_RESET, attotime::zero);
}
void cp1610_cpu_device::execute_set_input(int irqline, int state)

View File

@ -50,6 +50,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 7; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == CP1610_RESET || inputnum == CP1610_INT_INTR; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -226,7 +226,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 8; }
virtual uint32_t execute_input_lines() const override { return 4; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == DSP56K_IRQ_RESET; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -2264,6 +2264,17 @@ uint32_t h6280_device::execute_input_lines() const
}
//-------------------------------------------------
// execute_input_edge_triggered - return true if
// the input line has an asynchronous edge trigger
//-------------------------------------------------
bool h6280_device::execute_input_edge_triggered(int inputnum) const
{
return inputnum == H6280_NMI_STATE;
}
//-------------------------------------------------
// execute_set_input - act on a changed input/
// interrupt line

View File

@ -81,6 +81,7 @@ protected:
virtual uint32_t execute_min_cycles() const override;
virtual uint32_t execute_max_cycles() const override;
virtual uint32_t execute_input_lines() const override;
virtual bool execute_input_edge_triggered(int inputnum) const override;
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -177,6 +177,11 @@ uint32_t h8_device::execute_input_lines() const
return 0;
}
bool h8_device::execute_input_edge_triggered(int inputnum) const
{
return inputnum == INPUT_LINE_NMI;
}
void h8_device::recompute_bcount(uint64_t event_time)
{
if(!event_time || event_time >= total_cycles() + icount) {

View File

@ -97,6 +97,7 @@ protected:
virtual uint32_t execute_min_cycles() const override;
virtual uint32_t execute_max_cycles() const override;
virtual uint32_t execute_input_lines() const override;
virtual bool execute_input_edge_triggered(int inputnum) const override;
virtual void execute_run() override;
// device_memory_interface overrides

View File

@ -69,7 +69,7 @@ protected:
// device_execute_interface overrides
virtual uint32_t execute_min_cycles() const override { return 6; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0xffff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -773,7 +773,7 @@ void i386_device::i386_trap(int irq, int irq_gate, int trap_level)
if(trap_level >= 3)
{
logerror("IRQ: Triple fault. CPU reset.\n");
set_input_line(INPUT_LINE_RESET, PULSE_LINE);
pulse_input_line(INPUT_LINE_RESET, attotime::zero);
return;
}

View File

@ -60,6 +60,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 40; }
virtual uint32_t execute_input_lines() const override { return 32; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
@ -1475,6 +1476,7 @@ public:
protected:
pentium_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI || inputnum == INPUT_LINE_SMI; }
virtual void execute_set_input(int inputnum, int state) override;
virtual void device_start() override;
virtual void device_reset() override;

View File

@ -85,7 +85,8 @@ protected:
virtual u32 execute_min_cycles() const override { return 4; }
virtual u32 execute_max_cycles() const override { return 16; }
virtual u32 execute_input_lines() const override { return 4; }
virtual u32 execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == I8085_RST75_LINE; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual u64 execute_clocks_to_cycles(u64 clocks) const override { return (clocks + 2 - 1) / 2; }

View File

@ -138,6 +138,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 50; }
virtual void execute_set_input(int inputnum, int state) override;
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
// device_disasm_interface overrides
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;

View File

@ -90,7 +90,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; } /* ???? TODO: Exact timing unknown */
virtual uint32_t execute_max_cycles() const override { return 1; } /* ???? TODO: Exact timing unknown */
virtual uint32_t execute_input_lines() const override { return 4; }
virtual uint32_t execute_default_irq_vector() const override { return 0xffffffff; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -82,7 +82,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 19; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == LH5801_LINE_MI || inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -2523,7 +2523,6 @@ TABLE_FUNCTION(void, set_line, (int line, int state))
break;
case ASSERT_LINE:
case PULSE_LINE:
case HOLD_LINE:
LINE_IRQ |= (1 << line);
if (m37710_irq_levels[line])

View File

@ -140,6 +140,11 @@ uint32_t m6502_device::execute_input_lines() const
return NMI_LINE+1;
}
bool m6502_device::execute_input_edge_triggered(int inputnum) const
{
return inputnum == NMI_LINE;
}
void m6502_device::do_adc_d(uint8_t val)
{
uint8_t c = P & F_C ? 1 : 0;

View File

@ -96,6 +96,7 @@ protected:
virtual uint32_t execute_input_lines() const override;
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual bool execute_input_edge_triggered(int inputnum) const override;
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;

View File

@ -55,7 +55,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 12; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -16,7 +16,6 @@ enum
/* Active eddge is selecrable by internal reg. */
/* raise eddge : CLEAR_LINE -> ASSERT_LINE */
/* fall eddge : ASSERT_LINE -> CLEAR_LINE */
/* it is usuali to use PULSE_LINE state */
M6801_SC1_LINE
};

View File

@ -117,6 +117,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_input_lines() const override { return 8; }; // number of input lines
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return M68K_INT_ACK_AUTOVECTOR; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == M68K_IRQ_7; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
@ -352,8 +354,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
@ -375,8 +375,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -395,8 +393,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -412,8 +408,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -429,8 +423,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -446,8 +438,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -463,8 +453,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -480,8 +468,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -497,8 +483,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -514,8 +498,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
virtual bool memory_translate(int space, int intention, offs_t &address) override;
// device-level overrides
@ -533,8 +515,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -550,8 +530,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -567,8 +545,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -584,8 +560,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -601,8 +575,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -618,8 +590,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 4; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
};
@ -638,8 +608,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;
@ -661,8 +629,6 @@ public:
virtual uint32_t execute_min_cycles() const override { return 2; };
virtual uint32_t execute_max_cycles() const override { return 158; };
virtual uint32_t execute_default_irq_vector() const override { return -1; };
// device-level overrides
virtual void device_start() override;

View File

@ -114,6 +114,7 @@ protected:
virtual void execute_set_input(int inputnum, int state) override;
virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const override;
virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override;
virtual bool execute_input_edge_triggered(int inputnum) const override { return true; }
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
@ -319,6 +320,7 @@ protected:
virtual void device_reset() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void interrupt_vector() override;
virtual bool test_il() override { return m_nmi_state != CLEAR_LINE; }

View File

@ -618,7 +618,7 @@ void m68hc05_device::burn_cycles(unsigned count)
{
LOGCOP("PCOP reset\n");
m_copcr |= 0x10;
set_input_line(INPUT_LINE_RESET, PULSE_LINE);
pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
m_pcop_cnt = (m_pcop_cnt + count) & ((u32(1) << 21) - 1);
@ -626,7 +626,7 @@ void m68hc05_device::burn_cycles(unsigned count)
m_ncop_cnt += count;
if ((u32(1) << 17) <= m_ncop_cnt)
{
set_input_line(INPUT_LINE_RESET, PULSE_LINE);
pulse_input_line(INPUT_LINE_RESET, attotime::zero);
LOGCOP("NCOP reset\n");
}
m_ncop_cnt &= (u32(1) << 17) - 1;

View File

@ -65,6 +65,7 @@ protected:
virtual uint32_t execute_input_lines() const override;
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const override;
virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override;

View File

@ -59,7 +59,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 41; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -176,7 +176,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 3; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return MCS48_INPUT_IRQ; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -119,7 +119,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 20; }
virtual uint32_t execute_input_lines() const override { return 6; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -82,7 +82,7 @@ public:
// 3 cycles is for int. acknowledge + 1 instruction
virtual uint32_t execute_max_cycles() const override { return 3; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;

View File

@ -7,9 +7,6 @@
#pragma once
#define NEC_INPUT_LINE_INTP0 10
#define NEC_INPUT_LINE_INTP1 11
#define NEC_INPUT_LINE_INTP2 12
#define NEC_INPUT_LINE_POLL 20
enum
@ -35,7 +32,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 80; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -80,7 +80,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 80; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI || (inputnum >= NEC_INPUT_LINE_INTP0 && inputnum <= NEC_INPUT_LINE_INTP2); }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -122,7 +122,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 2; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == PIC16C5x_RTCC; }
virtual void execute_run() override;
virtual void execute_set_input(int line, int state) override;

View File

@ -67,7 +67,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 2; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual void execute_run() override;
// device_memory_interface overrides

View File

@ -72,7 +72,6 @@ protected:
virtual u32 execute_min_cycles() const override { return 1; }
virtual u32 execute_max_cycles() const override { return 3; }
virtual u32 execute_input_lines() const override { return 0; }
virtual u32 execute_default_irq_vector() const override { return 0; }
virtual void execute_run() override;
// device_memory_interface overrides

View File

@ -145,7 +145,6 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 1; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override { }

View File

@ -56,7 +56,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 5; }
virtual uint32_t execute_max_cycles() const override { return 13; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -29,6 +29,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 1; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -99,7 +99,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 4; }
virtual uint32_t execute_input_lines() const override { return 16; }
virtual uint32_t execute_default_irq_vector() const override { return 0; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -309,6 +309,7 @@ protected:
virtual uint32_t execute_input_lines() const override { return 5; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;

View File

@ -21,6 +21,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 8; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -57,7 +57,7 @@ protected:
virtual uint32_t execute_input_lines() const override { return 4; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual uint32_t execute_default_irq_vector() const override { return -1; };
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return -1; }
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;

View File

@ -93,7 +93,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 26; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -112,7 +112,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 26; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual void execute_burn(int32_t cycles) override;

View File

@ -63,6 +63,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; } /* FIXME */
virtual uint32_t execute_max_cycles() const override { return 1; } /* FIXME */
virtual uint32_t execute_input_lines() const override { return 6; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
// device_memory_interface overrides

View File

@ -220,6 +220,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 40; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return true; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -37,6 +37,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 80; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -99,6 +99,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 1; }
virtual uint32_t execute_input_lines() const override { return 1; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -143,7 +143,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 1; }
virtual uint32_t execute_max_cycles() const override { return 16; }
virtual uint32_t execute_input_lines() const override { return 5; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_burn(int32_t cycles) override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -75,6 +75,7 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 6; }
virtual uint32_t execute_max_cycles() const override { return 27; }
virtual uint32_t execute_input_lines() const override { return 4; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return true; }
virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const override { return (clocks + 2 - 1) / 2; }
virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override { return (cycles * 2); }
virtual void execute_run() override;

View File

@ -57,7 +57,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 16; }
virtual uint32_t execute_input_lines() const override { return 4; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -53,7 +53,8 @@ protected:
virtual uint32_t execute_min_cycles() const override { return 2; }
virtual uint32_t execute_max_cycles() const override { return 744; }
virtual uint32_t execute_input_lines() const override { return 2; }
virtual uint32_t execute_default_irq_vector() const override { return 0xff; }
virtual uint32_t execute_default_irq_vector(int inputnum) const override { return 0xff; }
virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }
virtual void execute_run() override;
virtual void execute_set_input(int inputnum, int state) override;

View File

@ -436,7 +436,7 @@ WRITE8_MEMBER( s2636_device::write_data )
WRITE_LINE_MEMBER( s2636_device::write_intack )
{
assert((ASSERT_LINE == state) || (HOLD_LINE == state) || (CLEAR_LINE == state) || (PULSE_LINE == state));
assert((ASSERT_LINE == state) || (HOLD_LINE == state) || (CLEAR_LINE == state));
// pretend interrupt acknowledge is handled instantaneously
m_intack = state;

View File

@ -635,7 +635,7 @@ int z80scc_device::z80daisy_irq_ack()
if (ret == -1 && m_cputag != nullptr)
{
// default irq vector is -1 for 68000 but 0 for z80 for example...
ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector();
ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector(INPUT_LINE_IRQ0);
LOGINT(" - failed to find an interrupt to ack, returning default IRQ vector: %02x\n", ret );
logerror("z80sio_irq_ack: failed to find an interrupt to ack!\n");
}

View File

@ -491,7 +491,7 @@ int z80sio_device::z80daisy_irq_ack()
{
// default irq vector is -1 for 68000 but 0 for z80 for example...
// FIXME: use an optional_device or something
int const ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector();
int const ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector(INPUT_LINE_IRQ0);
LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_cputag, ret);
return ret;
}
@ -560,7 +560,7 @@ int i8274_new_device::z80daisy_irq_ack()
{
// default irq vector is -1 for 68000 but 0 for z80 for example...
// FIXME: use an optional_device or something
int const ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector();
int const ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector(INPUT_LINE_IRQ0);
LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_cputag, ret);
return ret;
}

View File

@ -296,12 +296,23 @@ u32 device_execute_interface::execute_input_lines() const
// IRQ vector when an acknowledge is processed
//-------------------------------------------------
u32 device_execute_interface::execute_default_irq_vector() const
u32 device_execute_interface::execute_default_irq_vector(int linenum) const
{
return 0;
}
//-------------------------------------------------
// execute_input_edge_triggered - return true if
// the input line has an asynchronous edge trigger
//-------------------------------------------------
bool device_execute_interface::execute_input_edge_triggered(int linenum) const
{
return false;
}
//-------------------------------------------------
// execute_burn - called after we consume a bunch
// of cycles for artifical reasons (such as
@ -580,11 +591,22 @@ TIMER_CALLBACK_MEMBER(device_execute_interface::trigger_periodic_interrupt)
void device_execute_interface::pulse_input_line(int irqline, const attotime &duration)
{
assert(duration > attotime::zero);
set_input_line(irqline, ASSERT_LINE);
// treat instantaneous pulses as ASSERT+CLEAR
if (duration == attotime::zero)
{
if (irqline != INPUT_LINE_RESET && !input_edge_triggered(irqline))
throw emu_fatalerror("device '%s': zero-width pulse is not allowed for input line %d\n", device().tag(), irqline);
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);
set_input_line(irqline, ASSERT_LINE);
set_input_line(irqline, CLEAR_LINE);
}
else
{
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);
}
}
@ -596,11 +618,22 @@ void device_execute_interface::pulse_input_line(int irqline, const attotime &dur
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);
// treat instantaneous pulses as ASSERT+CLEAR
if (duration == attotime::zero)
{
if (irqline != INPUT_LINE_RESET && !input_edge_triggered(irqline))
throw emu_fatalerror("device '%s': zero-width pulse is not allowed for input line %d\n", device().tag(), irqline);
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);
set_input_line_and_vector(irqline, ASSERT_LINE, vector);
set_input_line_and_vector(irqline, CLEAR_LINE, vector);
}
else
{
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);
}
}
@ -650,7 +683,7 @@ void device_execute_interface::device_input::start(device_execute_interface *exe
void device_execute_interface::device_input::reset()
{
m_curvector = m_stored_vector = m_execute->default_irq_vector();
m_curvector = m_stored_vector = m_execute->default_irq_vector(m_linenum);
m_qindex = 0;
}
@ -665,19 +698,7 @@ void device_execute_interface::device_input::set_state_synced(int state, int vec
LOG(("set_state_synced('%s',%d,%d,%02x)\n", m_execute->device().tag(), m_linenum, state, vector));
if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linenum, state, (vector == USE_STORED_VECTOR) ? 0 : vector);
assert(state == ASSERT_LINE || state == HOLD_LINE || state == CLEAR_LINE || state == PULSE_LINE);
// treat PULSE_LINE as ASSERT+CLEAR
if (state == PULSE_LINE)
{
// catch errors where people use PULSE_LINE for devices that don't support it
if (m_linenum != INPUT_LINE_NMI && m_linenum != INPUT_LINE_RESET)
throw emu_fatalerror("device '%s': PULSE_LINE can only be used for NMI and RESET lines\n", m_execute->device().tag());
set_state_synced(ASSERT_LINE, vector);
set_state_synced(CLEAR_LINE, vector);
return;
}
assert(state == ASSERT_LINE || state == HOLD_LINE || state == CLEAR_LINE);
// if we're full of events, flush the queue and log a message
int event_index = m_qindex++;

View File

@ -35,8 +35,7 @@ enum line_state
{
CLEAR_LINE = 0, // clear (a fired or held) line
ASSERT_LINE, // assert an interrupt immediately
HOLD_LINE, // hold interrupt line until acknowledged
PULSE_LINE // pulse interrupt line instantaneously (only for NMI, RESET)
HOLD_LINE // hold interrupt line until acknowledged
};
@ -136,7 +135,8 @@ public:
attotime cycles_to_attotime(u64 cycles) const { return device().clocks_to_attotime(cycles_to_clocks(cycles)); }
u64 attotime_to_cycles(const attotime &duration) const { return clocks_to_cycles(device().attotime_to_clocks(duration)); }
u32 input_lines() const { return execute_input_lines(); }
u32 default_irq_vector() const { return execute_default_irq_vector(); }
u32 default_irq_vector(int linenum) const { return execute_default_irq_vector(linenum); }
bool input_edge_triggered(int linenum) const { return execute_input_edge_triggered(linenum); }
// inline configuration helpers
void set_disable() { m_disabled = true; }
@ -203,7 +203,8 @@ protected:
// input line information getters
virtual u32 execute_input_lines() const;
virtual u32 execute_default_irq_vector() const;
virtual u32 execute_default_irq_vector(int linenum) const;
virtual bool execute_input_edge_triggered(int linenum) const;
// optional operation overrides
virtual void execute_run() = 0;

View File

@ -288,7 +288,7 @@ void driver_device::device_reset_after_children()
// NMI callbacks
//-------------------------------------------------
INTERRUPT_GEN_MEMBER( driver_device::nmi_line_pulse ) { device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); }
INTERRUPT_GEN_MEMBER( driver_device::nmi_line_pulse ) { device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); }
INTERRUPT_GEN_MEMBER( driver_device::nmi_line_assert ) { device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); }

View File

@ -67,7 +67,7 @@ WRITE16_MEMBER(cchasm_state::io_w)
m_sound_flags |= 0x80;
m_soundlatch2->write(space, offset, data);
m_ctc->trg2(1);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
break;
case 2:
//led = data;

View File

@ -1875,7 +1875,7 @@ WRITE16_MEMBER(dcs_audio_device:: adsp_control_w )
if ((data & 0x0200) && !(m_rev == REV_DSIO || m_rev == REV_DENV))
{
logerror("%s Rebooting DCS due to SYSCONTROL write = %04X\n", machine().describe_context(), data);
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
dcs_boot();
m_control_regs[SYSCONTROL_REG] = 0;
}

View File

@ -101,7 +101,7 @@ INPUT_CHANGED_MEMBER( gottlieb_sound_r0_device::audio_nmi )
{
// Diagnostic button sends a pulse to NMI pin
if (newval==CLEAR_LINE)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -225,7 +225,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback )
m_control_regs[BDMA_CONTROL_REG] |= ((param >> 14) & 0xff) << 8;
if (m_control_regs[BDMA_CONTROL_REG] & 8)
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
else
m_cpu->pulse_input_line(ADSP2181_BDMA, m_cpu->minimum_quantum_time());

View File

@ -73,7 +73,7 @@ WRITE8_MEMBER(redalert_state::redalert_audio_command_w)
/* D7 is also connected to the NMI input of the CPU -
the NMI is actually toggled by a 74121 (R1=27K, C10=330p) */
if ((data & 0x80) == 0x00)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@ -254,7 +254,7 @@ WRITE8_MEMBER(redalert_state::demoneye_audio_command_w)
{
/* the byte is connected to port A of the AY8910 */
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -95,7 +95,7 @@ void s11c_bg_device::device_reset()
m_cpubank->configure_entries(0, 8, &ROM[0x10000], 0x8000);
m_cpubank->set_entry(0);
// reset the CPU again, so that the CPU are starting with the right vectors (otherwise sound may die on reset)
m_cpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
WRITE_LINE_MEMBER( s11c_bg_device::ym2151_irq_w)

View File

@ -75,5 +75,5 @@ WRITE8_MEMBER(starwars_state::starwars_soundrst_w)
m_mainlatch->acknowledge_w(space, 0, 0);
/* reset sound CPU here */
m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}

View File

@ -48,7 +48,7 @@ void wpcsnd_device::wpcsnd_map(address_map &map)
void wpcsnd_device::ctrl_w(uint8_t data)
{
m_cpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
void wpcsnd_device::data_w(uint8_t data)
@ -102,7 +102,7 @@ void wpcsnd_device::device_reset()
m_fixedbank->set_entry(0);
// reset the CPU again, so that the CPU is starting with the right vectors (otherwise sound may die on reset)
m_cpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
m_reply_available = false;
}

View File

@ -485,7 +485,7 @@ INTERRUPT_GEN_MEMBER(_4enlinea_state::_4enlinea_irq)
{
if(m_irq_count == 0)
{
//device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
//device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
else
device.execute().set_input_line(0, HOLD_LINE);

View File

@ -252,7 +252,7 @@ TIMER_CALLBACK_MEMBER(aces1_state::m_aces1_irq_timer_callback)
TIMER_CALLBACK_MEMBER(aces1_state::m_aces1_nmi_timer_callback)
{
// printf("nmi\n");
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
aces1_reset_nmi_timer();
}

View File

@ -942,7 +942,7 @@ WRITE_LINE_MEMBER( adam_state::vdc_int_w )
{
if (state && !m_vdp_nmi)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
m_vdp_nmi = state;

View File

@ -77,7 +77,7 @@ Verification still needed for the other PCBs.
WRITE8_MEMBER(aerofgt_state::karatblzbl_soundlatch_w)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
READ8_MEMBER(aerofgt_state::pending_command_r)

View File

@ -849,7 +849,7 @@ INTERRUPT_GEN_MEMBER(agat7_state::agat_vblank)
{
if (m_agat7_interrupts)
{
m_maincpu->set_input_line(M6502_NMI_LINE, PULSE_LINE);
m_maincpu->pulse_input_line(M6502_NMI_LINE, attotime::zero);
}
}

View File

@ -264,7 +264,7 @@ READ8_MEMBER(airbustr_state::devram_r)
WRITE8_MEMBER(airbustr_state::master_nmi_trigger_w)
{
m_slave->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_slave->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
WRITE8_MEMBER(airbustr_state::master_bankswitch_w)

View File

@ -293,7 +293,7 @@ WRITE8_MEMBER(alpha68k_state::paddlema_soundlatch_w)
WRITE8_MEMBER(alpha68k_state::tnextspc_soundlatch_w)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
//ZT
/******************************************************************************/
@ -2102,7 +2102,7 @@ MACHINE_CONFIG_END
INTERRUPT_GEN_MEMBER(alpha68k_state::alpha68k_sound_nmi)
{
if(m_sound_nmi_mask)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
MACHINE_CONFIG_START(alpha68k_state::alpha68k_II)

View File

@ -891,7 +891,7 @@ MACHINE_CONFIG_END
WRITE_LINE_MEMBER(amaticmg_state::amaticmg2_irq)
{
if (state && m_nmi_mask)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -416,7 +416,7 @@ void appoooh_state::machine_reset()
INTERRUPT_GEN_MEMBER(appoooh_state::vblank_irq)
{
if(m_nmi_mask)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
MACHINE_CONFIG_START(appoooh_state::appoooh_common)

View File

@ -285,7 +285,7 @@ WRITE_LINE_MEMBER(ashnojoe_state::ashnojoe_vclk_cb)
else
{
m_msm->data_w(m_adpcm_byte & 0xf);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
m_msm5205_vclk_toggle ^= 1;

View File

@ -380,7 +380,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::nmi )
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
m_bit6++;
if (m_t_c > 0x40)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
else
m_t_c++;

View File

@ -597,7 +597,7 @@ WRITE_LINE_MEMBER( atom_state::atom_8271_interrupt_callback )
{
/* I'll pulse it because if I used hold-line I'm not sure
it would clear - to be checked */
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}

View File

@ -290,7 +290,7 @@ void bankp_state::machine_reset()
INTERRUPT_GEN_MEMBER(bankp_state::vblank_irq)
{
if(m_nmi_mask)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
MACHINE_CONFIG_START(bankp_state::bankp)

View File

@ -53,8 +53,8 @@ WRITE8_MEMBER(battlane_state::battlane_cpu_command_w)
/*
if (~m_cpu_control & 0x08)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
m_subcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
*/
@ -88,8 +88,8 @@ INTERRUPT_GEN_MEMBER(battlane_state::battlane_cpu1_interrupt)
/* See note in battlane_cpu_command_w */
if (~m_cpu_control & 0x08)
{
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
m_subcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}

View File

@ -258,7 +258,7 @@ WRITE16_MEMBER(bbusters_state::sound_cpu_w)
if (ACCESSING_BITS_0_7)
{
m_soundlatch->write(space, 0, data&0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
}

View File

@ -312,7 +312,7 @@ TIMER_CALLBACK_MEMBER(berzerk_state::nmi_callback)
/* pulse the NMI line if enabled */
if (m_nmi_enabled)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
/* set up for next interrupt */
next_nmi_number = (nmi_number + 1) % NMIS_PER_FRAME;

View File

@ -109,7 +109,7 @@ READ8_MEMBER(bingoc_state::sound_test_r)
WRITE16_MEMBER(bingoc_state::main_sound_latch_w)
{
m_soundlatch->write(space,0,data&0xff);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
#endif

View File

@ -48,7 +48,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(bladestl_state::bladestl_scanline)
m_maincpu->set_input_line(HD6309_FIRQ_LINE, HOLD_LINE);
if(scanline == 0) // vblank-in or timer irq
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
/*************************************

View File

@ -326,7 +326,7 @@ INPUT_CHANGED_MEMBER( blockade_state::coin_inserted )
m_coin_inserted = newval;
if (newval)
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
CUSTOM_INPUT_MEMBER( blockade_state::coin_r )

View File

@ -86,7 +86,7 @@ READ8_MEMBER(blueprnt_state::grasspin_sh_dipsw_r)
WRITE8_MEMBER(blueprnt_state::blueprnt_sound_command_w)
{
m_soundlatch->write(space, offset, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
WRITE8_MEMBER(blueprnt_state::blueprnt_coin_counter_w)

View File

@ -137,7 +137,7 @@ WRITE8_MEMBER(bottom9_state::bottom9_sh_irqtrigger_w)
INTERRUPT_GEN_MEMBER(bottom9_state::bottom9_sound_interrupt)
{
if (m_nmienable)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
WRITE8_MEMBER(bottom9_state::nmi_enable_w)

View File

@ -370,7 +370,7 @@ void brkthru_state::machine_reset()
WRITE_LINE_MEMBER(brkthru_state::vblank_irq)
{
if (state && m_nmi_mask)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
MACHINE_CONFIG_START(brkthru_state::brkthru)

View File

@ -164,7 +164,7 @@ INPUT_PORTS_END
INPUT_CHANGED_MEMBER( by6803_state::activity_test )
{
if(newval)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( by6803_state::self_test )

View File

@ -202,19 +202,19 @@ void by133_state::sound_portmap(address_map &map)
INPUT_CHANGED_MEMBER( by133_state::video_test )
{
if(newval)
m_videocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_videocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( by133_state::sound_test )
{
if(newval)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( by133_state::activity_test )
{
if(newval)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
INPUT_CHANGED_MEMBER( by133_state::self_test )

View File

@ -252,7 +252,7 @@ void redbaron_state::machine_start()
INTERRUPT_GEN_MEMBER(bzone_state::bzone_interrupt)
{
if (ioport("IN0")->read() & 0x10)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -97,7 +97,7 @@ WRITE16_MEMBER(cabal_state::sound_irq_trigger_word_w)
WRITE16_MEMBER(cabal_state::cabalbl_sound_irq_trigger_word_w)
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE );
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

View File

@ -353,8 +353,8 @@ void cabaret_state::machine_reset()
INTERRUPT_GEN_MEMBER(cabaret_state::cabaret_interrupt)
{
if (m_nmi_enable & 0x80)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
if (m_nmi_enable & 0x80)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
MACHINE_CONFIG_START(cabaret_state::cabaret)

View File

@ -111,7 +111,7 @@
INTERRUPT_GEN_MEMBER(capbowl_state::interrupt)
{
if (ioport("SERVICE")->read() & 1) /* get status of the F2 key */
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); /* trigger self test */
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); /* trigger self test */
}

View File

@ -2745,7 +2745,7 @@ MACHINE_CONFIG_END
TIMER_DEVICE_CALLBACK_MEMBER( cave_state::sailormn_startup )
{
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
MACHINE_RESET_MEMBER(cave_state,sailormn)

View File

@ -1100,7 +1100,7 @@ GFXDECODE_END
WRITE_LINE_MEMBER(cclimber_state::vblank_irq)
{
if (state && m_nmi_mask)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
WRITE_LINE_MEMBER(cclimber_state::bagmanf_vblank_irq)

View File

@ -16,7 +16,7 @@ INPUT_CHANGED_MEMBER(cheekyms_state::coin_inserted)
{
/* this starts a 556 one-shot timer (and triggers a sound effect) */
if (newval)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}

Some files were not shown because too many files have changed in this diff Show More