From bbb1cf792a78349d9019a9170db3124038be6f8f Mon Sep 17 00:00:00 2001 From: Michael Zapf Date: Mon, 6 Apr 2020 13:53:54 +0200 Subject: Add intrq_r method to query interrupt state. (nw) --- src/devices/machine/rtc65271.cpp | 8 ++++++++ src/devices/machine/rtc65271.h | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/devices/machine/rtc65271.cpp b/src/devices/machine/rtc65271.cpp index 9ccc83997bf..0f53c1fe875 100644 --- a/src/devices/machine/rtc65271.cpp +++ b/src/devices/machine/rtc65271.cpp @@ -450,18 +450,24 @@ void rtc65271_device::field_interrupts() { if (m_regs[reg_C] & m_regs[reg_B] & (reg_C_PF | reg_C_AF | reg_C_UF)) { + m_int_pending = true; m_regs[reg_C] |= reg_C_IRQF; if (!m_interrupt_cb.isnull()) m_interrupt_cb(1); } else { + m_int_pending = false; m_regs[reg_C] &= ~reg_C_IRQF; if (!m_interrupt_cb.isnull()) m_interrupt_cb(0); } } +READ_LINE_MEMBER(rtc65271_device::intrq_r) +{ + return (m_int_pending)? ASSERT_LINE : CLEAR_LINE; +} /* Update SQW output state each half-period and assert periodic interrupt each @@ -656,6 +662,7 @@ rtc65271_device::rtc65271_device(const machine_config &mconfig, const char *tag, : device_t(mconfig, RTC65271, tag, owner, clock) , device_nvram_interface(mconfig, *this) , m_interrupt_cb(*this) + , m_int_pending(false) { } @@ -674,4 +681,5 @@ void rtc65271_device::device_start() save_item(NAME(m_xram)); save_item(NAME(m_cur_xram_page)); save_item(NAME(m_SQW_internal_state)); + save_item(NAME(m_int_pending)); } diff --git a/src/devices/machine/rtc65271.h b/src/devices/machine/rtc65271.h index 1a69b518839..cb2c5b4bcb2 100644 --- a/src/devices/machine/rtc65271.h +++ b/src/devices/machine/rtc65271.h @@ -26,6 +26,11 @@ public: void rtc_w(offs_t offset, uint8_t data); void xram_w(offs_t offset, uint8_t data); + uint8_t read(int xramsel, offs_t offset); + void write(int xramsel, offs_t offset, uint8_t data); + + DECLARE_READ_LINE_MEMBER(intrq_r); + protected: // device-level overrides virtual void device_start() override; @@ -35,8 +40,6 @@ protected: virtual void nvram_write(emu_file &file) override; private: - uint8_t read(int xramsel, offs_t offset); - void write(int xramsel, offs_t offset, uint8_t data); void field_interrupts(); TIMER_CALLBACK_MEMBER(rtc_SQW_cb); @@ -60,6 +63,8 @@ private: /* callback called when interrupt pin state changes (may be nullptr) */ devcb_write_line m_interrupt_cb; + + bool m_int_pending; }; // device type definition -- cgit v1.2.3