From 185bbcad46828409c2216ac6f34fe00c86b8f7c2 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 17 Apr 2019 17:07:04 -0400 Subject: cdi: CDIC vectors its own interrupt (nw) --- src/mame/drivers/cdi.cpp | 4 ++-- src/mame/machine/cdicdic.cpp | 27 ++++++++++++++++----------- src/mame/machine/cdicdic.h | 5 +++-- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/mame/drivers/cdi.cpp b/src/mame/drivers/cdi.cpp index 44e9ea99f7b..c2894c64c24 100644 --- a/src/mame/drivers/cdi.cpp +++ b/src/mame/drivers/cdi.cpp @@ -824,7 +824,7 @@ void cdi_state::cdimono1_base(machine_config &config) { SCC68070(config, m_maincpu, CLOCK_A); m_maincpu->set_addrmap(AS_PROGRAM, &cdi_state::cdimono1_mem); - m_maincpu->iack4_callback().set_constant(0x80); + m_maincpu->iack4_callback().set(m_cdic, FUNC(cdicdic_device::intack_r)); MCD212(config, m_mcd212, CLOCK_A); m_mcd212->set_screen("screen"); @@ -853,7 +853,7 @@ void cdi_state::cdimono1_base(machine_config &config) // IMS66490 CDIC input clocks are 22.5792 MHz and 19.3536 MHz (latter is generated by PLL circuit incorporating 19.3575 MHz XTAL) // DSP input clock is 7.5264 MHz CDI_CDIC(config, m_cdic, 45.1584_MHz_XTAL / 2); - m_cdic->int_callback().set(m_maincpu, FUNC(scc68070_device::in4_w)); + m_cdic->intreq_callback().set(m_maincpu, FUNC(scc68070_device::in4_w)); CDI_SLAVE(config, m_slave_hle, 0); m_slave_hle->int_callback().set(m_maincpu, FUNC(scc68070_device::in2_w)); diff --git a/src/mame/machine/cdicdic.cpp b/src/mame/machine/cdicdic.cpp index 98717ee7c29..fe5f1aad345 100644 --- a/src/mame/machine/cdicdic.cpp +++ b/src/mame/machine/cdicdic.cpp @@ -565,7 +565,7 @@ void cdicdic_device::sample_trigger() // Set the CDIC interrupt line verboselog(*this, 0, "%s", "Setting CDIC interrupt line for soundmap decode\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); } else { @@ -717,7 +717,7 @@ void cdicdic_device::process_delayed_command() //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for audio sector\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); } else if((buffer[CDIC_SECTOR_SUBMODE2] & (CDIC_SUBMODE_DATA | CDIC_SUBMODE_AUDIO | CDIC_SUBMODE_VIDEO)) == 0x00) { @@ -735,7 +735,7 @@ void cdicdic_device::process_delayed_command() { //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for message sector\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); } else { @@ -754,7 +754,7 @@ void cdicdic_device::process_delayed_command() //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for data sector\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); } if((buffer[CDIC_SECTOR_SUBMODE2] & CDIC_SUBMODE_EOF) == 0 && m_command != 0x23) @@ -848,7 +848,7 @@ void cdicdic_device::process_delayed_command() } verboselog(*this, 0, "%s", "Setting CDIC interrupt line for CDDA sector\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); break; } case 0x2c: // Seek @@ -898,7 +898,7 @@ void cdicdic_device::process_delayed_command() m_time = next_msf << 8; verboselog(*this, 0, "%s", "Setting CDIC interrupt line for Seek sector\n" ); - m_int_callback(ASSERT_LINE); + m_intreq_callback(ASSERT_LINE); break; } } @@ -944,7 +944,7 @@ READ16_MEMBER( cdicdic_device::regs_r ) m_audio_buffer &= 0x7fff; if(!((m_audio_buffer | m_x_buffer) & 0x8000)) { - m_int_callback(CLEAR_LINE); + m_intreq_callback(CLEAR_LINE); verboselog(*this, 0, "%s", "Clearing CDIC interrupt line\n" ); ////printf("Clearing CDIC interrupt line\n" ); } @@ -958,7 +958,7 @@ READ16_MEMBER( cdicdic_device::regs_r ) m_x_buffer &= 0x7fff; if(!((m_audio_buffer | m_x_buffer) & 0x8000)) { - m_int_callback(CLEAR_LINE); + m_intreq_callback(CLEAR_LINE); verboselog(*this, 0, "%s", "Clearing CDIC interrupt line\n" ); ////printf("Clearing CDIC interrupt line\n" ); } @@ -1157,7 +1157,7 @@ WRITE16_MEMBER( cdicdic_device::regs_w ) cdicdic_device::cdicdic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CDI_CDIC, tag, owner, clock) - , m_int_callback(*this) + , m_intreq_callback(*this) , m_memory_space(*this, ":maincpu", AS_PROGRAM) , m_dmadac(*this, ":dac%u", 1U) , m_scc(*this, ":maincpu") @@ -1174,7 +1174,7 @@ cdicdic_device::cdicdic_device(const machine_config &mconfig, const char *tag, d void cdicdic_device::device_resolve_objects() { - m_int_callback.resolve_safe(); + m_intreq_callback.resolve_safe(); } //------------------------------------------------- @@ -1244,7 +1244,7 @@ void cdicdic_device::device_reset() m_cdda->set_cdrom(m_cd); } - m_int_callback(CLEAR_LINE); + m_intreq_callback(CLEAR_LINE); } WRITE16_MEMBER( cdicdic_device::ram_w ) @@ -1256,3 +1256,8 @@ READ16_MEMBER( cdicdic_device::ram_r ) { return m_ram[offset]; } + +uint8_t cdicdic_device::intack_r() +{ + return 0x80; +} diff --git a/src/mame/machine/cdicdic.h b/src/mame/machine/cdicdic.h index b7832d54235..abdcb5f2049 100644 --- a/src/mame/machine/cdicdic.h +++ b/src/mame/machine/cdicdic.h @@ -45,7 +45,7 @@ public: // construction/destruction cdicdic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - auto int_callback() { return m_int_callback.bind(); } + auto intreq_callback() { return m_intreq_callback.bind(); } // non-static internal members void sample_trigger(); @@ -56,6 +56,7 @@ public: DECLARE_READ16_MEMBER( ram_r ); DECLARE_WRITE16_MEMBER( ram_w ); + uint8_t intack_r(); protected: // device-level overrides @@ -68,7 +69,7 @@ protected: TIMER_CALLBACK_MEMBER( trigger_readback_int ); private: - devcb_write_line m_int_callback; + devcb_write_line m_intreq_callback; required_address_space m_memory_space; required_device_array m_dmadac; -- cgit v1.2.3