From e5fcbccff879fdc20f6532a5d13d5a259918836d Mon Sep 17 00:00:00 2001 From: arbee Date: Sun, 31 Jul 2022 14:01:29 -0400 Subject: mac: Hook up ASC IRQs in system ASICs. (GitHub #10159) [R. Belmont] --- src/mame/apple/sonora.cpp | 15 +++++++++++++++ src/mame/apple/sonora.h | 1 + src/mame/apple/v8.cpp | 17 +++++++++++++++++ src/mame/apple/v8.h | 2 ++ src/mame/apple/vasp.cpp | 15 +++++++++++++++ src/mame/apple/vasp.h | 1 + 6 files changed, 51 insertions(+) diff --git a/src/mame/apple/sonora.cpp b/src/mame/apple/sonora.cpp index a519c3b50b6..96c97269d2a 100644 --- a/src/mame/apple/sonora.cpp +++ b/src/mame/apple/sonora.cpp @@ -78,6 +78,7 @@ void sonora_device::device_add_mconfig(machine_config &config) ASC(config, m_asc, C15M, asc_device::asc_type::SONORA); m_asc->add_route(0, "lspeaker", 1.0); m_asc->add_route(1, "rspeaker", 1.0); + m_asc->irqf_callback().set(FUNC(sonora_device::asc_irq)); SWIM2(config, m_fdc, C15M); m_fdc->devsel_cb().set(FUNC(sonora_device::devsel_w)); @@ -302,6 +303,20 @@ WRITE_LINE_MEMBER(sonora_device::vbl_w) } } +WRITE_LINE_MEMBER(sonora_device::asc_irq) +{ + if (state == ASSERT_LINE) + { + m_pseudovia_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt + pseudovia_recalc_irqs(); + } + else + { + m_pseudovia_regs[3] &= ~0x10; + pseudovia_recalc_irqs(); + } +} + void sonora_device::pseudovia_recalc_irqs() { // check slot interrupts and bubble them down to IFR diff --git a/src/mame/apple/sonora.h b/src/mame/apple/sonora.h index c435e7f991b..7898dddea31 100644 --- a/src/mame/apple/sonora.h +++ b/src/mame/apple/sonora.h @@ -89,6 +89,7 @@ private: DECLARE_WRITE_LINE_MEMBER(via_out_cb2); DECLARE_WRITE_LINE_MEMBER(via1_irq); DECLARE_WRITE_LINE_MEMBER(via2_irq); + DECLARE_WRITE_LINE_MEMBER(asc_irq); TIMER_CALLBACK_MEMBER(mac_6015_tick); void phases_w(uint8_t phases); diff --git a/src/mame/apple/v8.cpp b/src/mame/apple/v8.cpp index da4c773aef3..5be6273afc6 100644 --- a/src/mame/apple/v8.cpp +++ b/src/mame/apple/v8.cpp @@ -115,6 +115,7 @@ void v8_device::device_add_mconfig(machine_config &config) ASC(config, m_asc, C15M, asc_device::asc_type::V8); m_asc->add_route(0, "lspeaker", 1.0); m_asc->add_route(1, "rspeaker", 1.0); + m_asc->irqf_callback().set(FUNC(v8_device::asc_irq)); } //------------------------------------------------- @@ -329,6 +330,20 @@ WRITE_LINE_MEMBER(v8_device::vbl_w) } } +WRITE_LINE_MEMBER(v8_device::asc_irq) +{ + if (state == ASSERT_LINE) + { + m_pseudovia_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt + pseudovia_recalc_irqs(); + } + else + { + m_pseudovia_regs[3] &= ~0x10; + pseudovia_recalc_irqs(); + } +} + void v8_device::pseudovia_recalc_irqs() { // check slot interrupts and bubble them down to IFR @@ -859,6 +874,7 @@ void eagle_device::device_add_mconfig(machine_config &config) ASC(config.replace(), m_asc, C15M, asc_device::asc_type::EAGLE); m_asc->add_route(0, "lspeaker", 1.0); m_asc->add_route(1, "rspeaker", 1.0); + m_asc->irqf_callback().set(FUNC(eagle_device::asc_irq)); } eagle_device::eagle_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) @@ -938,6 +954,7 @@ void spice_device::device_add_mconfig(machine_config &config) ASC(config.replace(), m_asc, C15M, asc_device::asc_type::SONORA); m_asc->add_route(0, "lspeaker", 1.0); m_asc->add_route(1, "rspeaker", 1.0); + m_asc->irqf_callback().set(FUNC(spice_device::asc_irq)); SWIM2(config, m_fdc, C15M); m_fdc->devsel_cb().set(FUNC(spice_device::devsel_w)); diff --git a/src/mame/apple/v8.h b/src/mame/apple/v8.h index 40b9a7f83f3..8f2b1931726 100644 --- a/src/mame/apple/v8.h +++ b/src/mame/apple/v8.h @@ -63,6 +63,8 @@ protected: virtual u8 pseudovia_r(offs_t offset); + DECLARE_WRITE_LINE_MEMBER(asc_irq); + private: devcb_write_line write_pb4, write_pb5, write_cb2, write_hdsel, write_hmmu_enable; devcb_read_line read_pb3; diff --git a/src/mame/apple/vasp.cpp b/src/mame/apple/vasp.cpp index 350eb88cbd3..6024e51bc72 100644 --- a/src/mame/apple/vasp.cpp +++ b/src/mame/apple/vasp.cpp @@ -90,6 +90,7 @@ void vasp_device::device_add_mconfig(machine_config &config) ASC(config, m_asc, C15M, asc_device::asc_type::VASP); m_asc->add_route(0, "lspeaker", 1.0); m_asc->add_route(1, "rspeaker", 1.0); + m_asc->irqf_callback().set(FUNC(vasp_device::asc_irq)); } //------------------------------------------------- @@ -346,6 +347,20 @@ WRITE_LINE_MEMBER(vasp_device::slot2_irq_w) pseudovia_recalc_irqs(); } +WRITE_LINE_MEMBER(vasp_device::asc_irq) +{ + if (state == ASSERT_LINE) + { + m_pseudovia_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt + pseudovia_recalc_irqs(); + } + else + { + m_pseudovia_regs[3] &= ~0x10; + pseudovia_recalc_irqs(); + } +} + void vasp_device::pseudovia_recalc_irqs() { // check slot interrupts and bubble them down to IFR diff --git a/src/mame/apple/vasp.h b/src/mame/apple/vasp.h index ec1cfb16714..f935208e484 100644 --- a/src/mame/apple/vasp.h +++ b/src/mame/apple/vasp.h @@ -92,6 +92,7 @@ private: DECLARE_WRITE_LINE_MEMBER(via_out_cb2); DECLARE_WRITE_LINE_MEMBER(via1_irq); DECLARE_WRITE_LINE_MEMBER(via2_irq); + DECLARE_WRITE_LINE_MEMBER(asc_irq); TIMER_CALLBACK_MEMBER(mac_6015_tick); u32 vram_r(offs_t offset); -- cgit v1.2.3