e01: reinstated irq trampolines (nw)

This commit is contained in:
Nigel Barnes 2016-07-21 19:11:09 +01:00
parent 32dbd2e277
commit 85f66cc559
2 changed files with 33 additions and 4 deletions

View File

@ -126,6 +126,18 @@ const rom_entry *e01_device::device_rom_region() const
}
//-------------------------------------------------
// MC146818_INTERFACE( rtc_intf )
//-------------------------------------------------
WRITE_LINE_MEMBER(e01_device::rtc_irq_w)
{
m_rtc_irq = state;
update_interrupts();
}
//-------------------------------------------------
// mc6854_interface adlc_intf
//-------------------------------------------------
@ -142,6 +154,13 @@ WRITE_LINE_MEMBER( e01_device::econet_data_w )
m_econet->data_w(this, state);
}
WRITE_LINE_MEMBER(e01_device::via_irq_w)
{
m_via_irq = state;
update_interrupts();
}
WRITE_LINE_MEMBER( e01_device::clk_en_w )
{
m_clk_en = state;
@ -225,12 +244,12 @@ static MACHINE_CONFIG_FRAGMENT( e01 )
MCFG_CPU_PROGRAM_MAP(e01_mem)
MCFG_MC146818_ADD(HD146818_TAG, XTAL_32_768kHz)
MCFG_MC146818_IRQ_HANDLER(INPUTLINE(R65C102_TAG, M6502_IRQ_LINE))
MCFG_MC146818_IRQ_HANDLER(WRITELINE(e01_device, rtc_irq_w))
// devices
MCFG_DEVICE_ADD(R6522_TAG, VIA6522, XTAL_8MHz/4)
MCFG_DEVICE_ADD(R6522_TAG, VIA6522, XTAL_8MHz / 4)
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE(R65C102_TAG, M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(e01_device, via_irq_w))
MCFG_DEVICE_ADD(MC6854_TAG, MC6854, 0)
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(e01_device, adlc_irq_w))
@ -317,7 +336,7 @@ ioport_constructor e01_device::device_input_ports() const
inline void e01_device::update_interrupts()
{
int irq = (m_hdc_ie & m_hdc_irq) ? ASSERT_LINE : CLEAR_LINE;
int irq = (m_via_irq || (m_hdc_ie & m_hdc_irq) || m_rtc_irq) ? ASSERT_LINE : CLEAR_LINE;
int nmi = (m_fdc_irq || m_fdc_drq || (m_adlc_ie & m_adlc_irq)) ? ASSERT_LINE : CLEAR_LINE;
m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
@ -376,6 +395,8 @@ e01_device::e01_device(const machine_config &mconfig, const char *tag, device_t
m_centronics(*this, CENTRONICS_TAG),
m_adlc_ie(0),
m_hdc_ie(0),
m_rtc_irq(CLEAR_LINE),
m_via_irq(CLEAR_LINE),
m_hdc_irq(CLEAR_LINE),
m_fdc_irq(CLEAR_LINE),
m_fdc_drq(CLEAR_LINE),
@ -404,6 +425,8 @@ e01_device::e01_device(const machine_config &mconfig, device_type type, const ch
m_centronics(*this, CENTRONICS_TAG),
m_adlc_ie(0),
m_hdc_ie(0),
m_rtc_irq(CLEAR_LINE),
m_via_irq(CLEAR_LINE),
m_hdc_irq(CLEAR_LINE),
m_fdc_irq(CLEAR_LINE),
m_fdc_drq(CLEAR_LINE),
@ -425,6 +448,8 @@ void e01_device::device_start()
// register for state saving
save_item(NAME(m_adlc_ie));
save_item(NAME(m_hdc_ie));
save_item(NAME(m_rtc_irq));
save_item(NAME(m_via_irq));
save_item(NAME(m_hdc_irq));
save_item(NAME(m_fdc_drq));
save_item(NAME(m_adlc_irq));

View File

@ -56,8 +56,10 @@ public:
DECLARE_WRITE8_MEMBER( rtc_address_w );
DECLARE_READ8_MEMBER( rtc_data_r );
DECLARE_WRITE8_MEMBER( rtc_data_w );
DECLARE_WRITE_LINE_MEMBER( rtc_irq_w );
DECLARE_WRITE_LINE_MEMBER( adlc_irq_w );
DECLARE_WRITE_LINE_MEMBER( econet_data_w );
DECLARE_WRITE_LINE_MEMBER( via_irq_w );
DECLARE_WRITE_LINE_MEMBER( clk_en_w );
DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
@ -100,6 +102,8 @@ protected:
// interrupt state
int m_adlc_ie;
int m_hdc_ie;
int m_rtc_irq;
int m_via_irq;
int m_hdc_irq;
int m_fdc_irq;
bool m_fdc_drq;