summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/apple/macpwrbk030.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/apple/macpwrbk030.cpp')
-rw-r--r--src/mame/apple/macpwrbk030.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/mame/apple/macpwrbk030.cpp b/src/mame/apple/macpwrbk030.cpp
index b7ad9236206..17b813b50f4 100644
--- a/src/mame/apple/macpwrbk030.cpp
+++ b/src/mame/apple/macpwrbk030.cpp
@@ -145,6 +145,7 @@ public:
m_ram(*this, RAM_TAG),
m_swim(*this, "fdc"),
m_floppy(*this, "fdc:%d", 0U),
+ m_rtc(*this, "rtc"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_asc(*this, "asc"),
@@ -179,6 +180,7 @@ private:
required_device<ram_device> m_ram;
required_device<applefdintf_device> m_swim;
required_device_array<floppy_connector, 2> m_floppy;
+ required_device<rtc3430042_device> m_rtc;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<asc_device> m_asc;
@@ -219,7 +221,7 @@ private:
TIMER_CALLBACK_MEMBER(mac_6015_tick);
WRITE_LINE_MEMBER(via_cb2_w) { m_macadb->adb_data_w(state); }
int m_via_interrupt = 0, m_via2_interrupt = 0, m_scc_interrupt = 0, m_asc_interrupt = 0, m_last_taken_interrupt = 0;
- int m_irq_count = 0, m_ca1_data = 0, m_ca2_data = 0, m_via2_ca1_hack = 0;
+ int m_ca1_data = 0, m_via2_ca1_hack = 0;
u32 rom_switch_r(offs_t offset);
bool m_overlay = false;
@@ -396,7 +398,7 @@ void macpb030_state::machine_start()
m_rom_size = memregion("bootrom")->bytes();
m_via_interrupt = m_via2_interrupt = m_scc_interrupt = m_asc_interrupt = 0;
m_last_taken_interrupt = -1;
- m_irq_count = m_ca1_data = m_ca2_data = 0;
+ m_ca1_data = 0;
m_6015_timer = timer_alloc(FUNC(macpb030_state::mac_6015_tick), this);
m_6015_timer->adjust(attotime::never);
@@ -407,7 +409,7 @@ void macpb030_state::machine_reset()
m_overlay = true;
m_via_interrupt = m_via2_interrupt = m_scc_interrupt = m_asc_interrupt = 0;
m_last_taken_interrupt = -1;
- m_irq_count = m_ca1_data = m_ca2_data = 0;
+ m_ca1_data = 0;
m_via2_ca1_hack = 0;
m_cur_floppy = nullptr;
@@ -602,15 +604,6 @@ TIMER_CALLBACK_MEMBER(macpb030_state::mac_6015_tick)
m_pmu->set_input_line(m50753_device::M50753_INT1_LINE, ASSERT_LINE);
m_macadb->adb_vblank();
-
- if (++m_irq_count == 60)
- {
- m_irq_count = 0;
-
- m_ca2_data ^= 1;
- /* signal 1 Hz irq on CA2 input on the VIA */
- m_via1->write_ca2(m_ca2_data);
- }
}
u16 macpb030_state::scsi_r(offs_t offset, u16 mem_mask)
@@ -845,7 +838,7 @@ u8 macpb030_state::mac_via_in_a()
u8 macpb030_state::mac_via_in_b()
{
- return 0x08; // flag indicating no Target Disk Mode
+ return 0x08 | m_rtc->data_r(); // flag indicating no Target Disk Mode
}
void macpb030_state::mac_via_out_a(u8 data)
@@ -863,6 +856,9 @@ void macpb030_state::mac_via_out_a(u8 data)
void macpb030_state::mac_via_out_b(u8 data)
{
+ m_rtc->ce_w(BIT(data, 2));
+ m_rtc->data_w(BIT(data, 0));
+ m_rtc->clk_w(BIT(data, 1));
}
u8 macpb030_state::mac_via2_in_a()
@@ -923,6 +919,9 @@ void macpb030_state::macpb140(machine_config &config)
m_macadb->set_mcu_mode(true);
m_macadb->adb_data_callback().set(FUNC(macpb030_state::set_adb_line));
+ RTC3430042(config, m_rtc, 32.768_kHz_XTAL);
+ m_rtc->cko_cb().set(m_via1, FUNC(via6522_device::write_ca2));
+
SWIM1(config, m_swim, C15M);
m_swim->phases_cb().set(FUNC(macpb030_state::phases_w));
m_swim->devsel_cb().set(FUNC(macpb030_state::devsel_w));
@@ -954,7 +953,7 @@ void macpb030_state::macpb140(machine_config &config)
SCC85C30(config, m_scc, C7M);
// m_scc->intrq_callback().set(FUNC(macpb030_state::set_scc_interrupt));
- R65NC22(config, m_via1, C7M/10);
+ R65C22(config, m_via1, C7M/10);
m_via1->readpa_handler().set(FUNC(macpb030_state::mac_via_in_a));
m_via1->readpb_handler().set(FUNC(macpb030_state::mac_via_in_b));
m_via1->writepa_handler().set(FUNC(macpb030_state::mac_via_out_a));
@@ -1035,6 +1034,9 @@ void macpb030_state::macpb160(machine_config &config)
m_macadb->set_mcu_mode(true);
m_macadb->adb_data_callback().set(FUNC(macpb030_state::set_adb_line));
+ RTC3430042(config, m_rtc, 32.768_kHz_XTAL);
+ m_rtc->cko_cb().set(m_via1, FUNC(via6522_device::write_ca2));
+
SWIM1(config, m_swim, C15M);
m_swim->phases_cb().set(FUNC(macpb030_state::phases_w));
m_swim->devsel_cb().set(FUNC(macpb030_state::devsel_w));
@@ -1066,7 +1068,7 @@ void macpb030_state::macpb160(machine_config &config)
SCC85C30(config, m_scc, C7M);
// m_scc->intrq_callback().set(FUNC(macpb030_state::set_scc_interrupt));
- R65NC22(config, m_via1, C7M / 10);
+ R65C22(config, m_via1, C7M / 10);
m_via1->readpa_handler().set(FUNC(macpb030_state::mac_via_in_a));
m_via1->readpb_handler().set(FUNC(macpb030_state::mac_via_in_b));
m_via1->writepa_handler().set(FUNC(macpb030_state::mac_via_out_a));