summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ti99/peb/tn_ide.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/ti99/peb/tn_ide.cpp')
-rw-r--r--src/devices/bus/ti99/peb/tn_ide.cpp57
1 files changed, 26 insertions, 31 deletions
diff --git a/src/devices/bus/ti99/peb/tn_ide.cpp b/src/devices/bus/ti99/peb/tn_ide.cpp
index 2a31a86dd6a..52c30daa262 100644
--- a/src/devices/bus/ti99/peb/tn_ide.cpp
+++ b/src/devices/bus/ti99/peb/tn_ide.cpp
@@ -122,15 +122,15 @@
#include "emu.h"
#include "tn_ide.h"
-#define LOG_WARN (1U<<1)
-#define LOG_CRU (1U<<2)
-#define LOG_RTC (1U<<3)
-#define LOG_XRAM (1U<<4)
-#define LOG_SRAM (1U<<5)
-#define LOG_ATA (1U<<6)
-#define LOG_SRAMH (1U<<7)
+#define LOG_WARN (1U << 1)
+#define LOG_CRU (1U << 2)
+#define LOG_RTC (1U << 3)
+#define LOG_XRAM (1U << 4)
+#define LOG_SRAM (1U << 5)
+#define LOG_ATA (1U << 6)
+#define LOG_SRAMH (1U << 7)
-#define VERBOSE ( LOG_GENERAL | LOG_WARN )
+#define VERBOSE (LOG_GENERAL | LOG_WARN)
#include "logmacro.h"
@@ -529,20 +529,7 @@ void nouspikel_ide_card_device::crureadz(offs_t offset, uint8_t *value)
bit = m_srammap? 1:0;
break;
case 2:
- if (m_rtctype==RTC65)
- bit = (m_rtc65->intrq_r()==ASSERT_LINE)? 0:1;
- else
- {
- if (m_rtctype==RTC47)
- bit = (m_rtc47->intrq_r()==ASSERT_LINE)? 0:1;
- else
- {
- if (m_rtctype==RTC42)
- bit = (m_rtc42->intrq_r()==ASSERT_LINE)? 0:1;
- else
- bit = (m_rtc52->intrq_r()==ASSERT_LINE)? 0:1;
- }
- }
+ bit = BIT(m_rtc_int, m_rtctype);
break;
case 3:
bit = 1;
@@ -606,18 +593,25 @@ void nouspikel_ide_card_device::cruwrite(offs_t offset, uint8_t data)
}
}
-WRITE_LINE_MEMBER(nouspikel_ide_card_device::clock_interrupt_callback)
+template<int rtctype>
+void nouspikel_ide_card_device::rtc_int_callback(int state)
{
- m_slot->set_inta(state);
+ if (state)
+ m_rtc_int |= 1 << rtctype;
+ else
+ m_rtc_int &= ~(1 << rtctype);
+
+ if (rtctype == m_rtctype)
+ m_slot->set_inta(state ? CLEAR_LINE : ASSERT_LINE);
}
-WRITE_LINE_MEMBER(nouspikel_ide_card_device::ide_interrupt_callback)
+void nouspikel_ide_card_device::ide_interrupt_callback(int state)
{
m_ideint = (state==ASSERT_LINE);
if (m_crulatch->q6_r()==1) m_slot->set_inta(state);
}
-WRITE_LINE_MEMBER(nouspikel_ide_card_device::resetdr_callback)
+void nouspikel_ide_card_device::resetdr_callback(int state)
{
if (m_crulatch->q6_r()==1 && (state==0))
// not implemented
@@ -632,10 +626,10 @@ void nouspikel_ide_card_device::device_add_mconfig(machine_config &config)
BQ4842(config, m_rtc42, 0);
BQ4852(config, m_rtc52, 0);
- m_rtc65->interrupt_cb().set(FUNC(nouspikel_ide_card_device::clock_interrupt_callback));
- m_rtc47->interrupt_cb().set(FUNC(nouspikel_ide_card_device::clock_interrupt_callback));
- m_rtc42->interrupt_cb().set(FUNC(nouspikel_ide_card_device::clock_interrupt_callback));
- m_rtc52->interrupt_cb().set(FUNC(nouspikel_ide_card_device::clock_interrupt_callback));
+ m_rtc65->interrupt_cb().set(FUNC(nouspikel_ide_card_device::rtc_int_callback<RTC65>)).invert();
+ m_rtc47->int_handler().set(FUNC(nouspikel_ide_card_device::rtc_int_callback<RTC47>));
+ m_rtc42->interrupt_cb().set(FUNC(nouspikel_ide_card_device::rtc_int_callback<RTC42>)).invert();
+ m_rtc52->interrupt_cb().set(FUNC(nouspikel_ide_card_device::rtc_int_callback<RTC52>)).invert();
ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, false);
m_ata->irq_handler().set(FUNC(nouspikel_ide_card_device::ide_interrupt_callback));
@@ -658,6 +652,7 @@ void nouspikel_ide_card_device::device_start()
{
save_item(NAME(m_ideint));
save_item(NAME(m_page));
+ save_item(NAME(m_rtc_int));
}
void nouspikel_ide_card_device::device_reset()
@@ -677,7 +672,7 @@ void nouspikel_ide_card_device::device_reset()
m_sram->set_buffered(m_rtctype == RTC47);
// Only activate the selected RTC
- m_rtc47->connect_osc(ioport("RTC")->read()==1);
+ m_rtc47->set_unscaled_clock((ioport("RTC")->read()==1) ? 32768 : 0);
m_rtc42->connect_osc(ioport("RTC")->read()==2);
m_rtc52->connect_osc(ioport("RTC")->read()==3);
}