mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
cdi: CDIC vectors its own interrupt (nw)
This commit is contained in:
parent
ae8aa35955
commit
185bbcad46
@ -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));
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user