diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index 0263b529e29..ab6e95fd6a7 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -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)); diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h index 9a2adba8ce2..02a432c936d 100644 --- a/src/devices/bus/econet/e01.h +++ b/src/devices/bus/econet/e01.h @@ -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;