summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-17 17:07:04 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-17 17:07:07 -0400
commit185bbcad46828409c2216ac6f34fe00c86b8f7c2 (patch)
treecac9feb1827cd232d7d1743e9d5d1510192988dd
parentae8aa359556b766d924a67040bc8b65e5f287cfa (diff)
cdi: CDIC vectors its own interrupt (nw)
-rw-r--r--src/mame/drivers/cdi.cpp4
-rw-r--r--src/mame/machine/cdicdic.cpp27
-rw-r--r--src/mame/machine/cdicdic.h5
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<dmadac_sound_device, 2> m_dmadac;