diff options
-rw-r--r-- | src/mame/drivers/neogeocd.cpp | 1 | ||||
-rw-r--r-- | src/mame/machine/megacd.cpp | 2 | ||||
-rw-r--r-- | src/mame/machine/megacdcd.cpp | 25 | ||||
-rw-r--r-- | src/mame/machine/megacdcd.h | 8 |
4 files changed, 21 insertions, 15 deletions
diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp index c6b0f15e337..83c9c5019b7 100644 --- a/src/mame/drivers/neogeocd.cpp +++ b/src/mame/drivers/neogeocd.cpp @@ -1054,6 +1054,7 @@ void ngcd_state::neocd(machine_config &config) // temporary until things are cleaned up LC89510_TEMP(config, m_tempcdc, 0); // cd controller + m_tempcdc->set_cdrom_tag("cdrom"); m_tempcdc->set_is_neoCD(true); m_tempcdc->set_type1_interrupt_callback(FUNC(ngcd_state::interrupt_callback_type1), this); m_tempcdc->set_type2_interrupt_callback(FUNC(ngcd_state::interrupt_callback_type2), this); diff --git a/src/mame/machine/megacd.cpp b/src/mame/machine/megacd.cpp index 8b7e9f27574..fc20389b30f 100644 --- a/src/mame/machine/megacd.cpp +++ b/src/mame/machine/megacd.cpp @@ -303,6 +303,8 @@ void sega_segacd_device::device_add_mconfig(machine_config &config) // temporary until things are cleaned up LC89510_TEMP(config, m_lc89510_temp, 0); // cd controller m_lc89510_temp->set_cdc_do_dma_callback(FUNC(sega_segacd_device::SegaCD_CDC_Do_DMA), this); // hack + m_lc89510_temp->set_cdrom_tag("^cdrom"); + m_lc89510_temp->set_68k_tag(m_scdcpu); TIMER(config, m_stopwatch_timer).configure_generic(timer_device::expired_delegate()); //stopwatch timer TIMER(config, m_stamp_timer).configure_generic(FUNC(sega_segacd_device::stamp_timer_callback)); diff --git a/src/mame/machine/megacdcd.cpp b/src/mame/machine/megacdcd.cpp index dd5739a809f..9241b906e07 100644 --- a/src/mame/machine/megacdcd.cpp +++ b/src/mame/machine/megacdcd.cpp @@ -98,17 +98,17 @@ #define CHECK_SCD_LV5_INTERRUPT \ if (segacd_irq_mask & 0x20) \ { \ - machine.device(":segacd:segacd_68k")->execute().set_input_line(5, HOLD_LINE); \ + m_68k->set_input_line(5, HOLD_LINE); \ } #define CHECK_SCD_LV4_INTERRUPT \ if (segacd_irq_mask & 0x10) \ { \ - machine.device(":segacd:segacd_68k")->execute().set_input_line(4, HOLD_LINE); \ + m_68k->set_input_line(4, HOLD_LINE); \ } #define CHECK_SCD_LV4_INTERRUPT_A \ if (segacd_irq_mask & 0x10) \ { \ - machine().device(":segacd:segacd_68k")->execute().set_input_line(4, HOLD_LINE); \ + m_68k->set_input_line(4, HOLD_LINE); \ } @@ -135,6 +135,9 @@ DEFINE_DEVICE_TYPE(LC89510_TEMP, lc89510_temp_device, "lc89510_temp", "lc89510_t lc89510_temp_device::lc89510_temp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, LC89510_TEMP, tag, owner, clock) + , m_cdrom(*this, finder_base::DUMMY_TAG) + , m_cdda(*this, "cdda") + , m_68k(*this, finder_base::DUMMY_TAG) { segacd_dma_callback = segacd_dma_delegate(FUNC(lc89510_temp_device::Fake_CDC_Do_DMA), this); type1_interrupt_callback = interrupt_delegate(FUNC(lc89510_temp_device::dummy_interrupt_callback), this); @@ -173,8 +176,6 @@ void lc89510_temp_device::device_start() type1_interrupt_callback.bind_relative_to(*owner()); type2_interrupt_callback.bind_relative_to(*owner()); type3_interrupt_callback.bind_relative_to(*owner()); - - m_cdda = (cdda_device*)subdevice("cdda"); } void lc89510_temp_device::device_reset() @@ -1105,16 +1106,12 @@ void lc89510_temp_device::reset_cd(void) lc89510_Reset(); { - cdrom_image_device *cddevice = machine().device<cdrom_image_device>("cdrom"); - if ( cddevice ) + segacd.cd = m_cdrom->get_cdrom_file(); + if ( segacd.cd ) { - segacd.cd = cddevice->get_cdrom_file(); - if ( segacd.cd ) - { - segacd.toc = cdrom_get_toc( segacd.cd ); - m_cdda->set_cdrom(segacd.cd); - m_cdda->stop_audio(); //stop any pending CD-DA - } + segacd.toc = cdrom_get_toc( segacd.cd ); + m_cdda->set_cdrom(segacd.cd); + m_cdda->stop_audio(); //stop any pending CD-DA } } diff --git a/src/mame/machine/megacdcd.h b/src/mame/machine/megacdcd.h index df14ba52e49..a8465a88384 100644 --- a/src/mame/machine/megacdcd.h +++ b/src/mame/machine/megacdcd.h @@ -23,6 +23,9 @@ public: template <typename... T> void set_cdc_do_dma_callback(T &&... args) { segacd_dma_callback = segacd_dma_delegate(std::forward<T>(args)...); } + template <typename T> void set_cdrom_tag(T &&tag) { m_cdrom.set_tag(std::forward<T>(tag)); } + template <typename T> void set_68k_tag(T &&tag) { m_68k.set_tag(std::forward<T>(tag)); } + lc89510_temp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -79,7 +82,11 @@ protected: void dummy_interrupt_callback(void); + required_device<cdrom_image_device> m_cdrom; + required_device<cdda_device> m_cdda; + // HACK for neoCD handling + optional_device<cpu_device> m_68k; bool is_neoCD; @@ -159,7 +166,6 @@ protected: bool CDD_Import(running_machine& machine); uint16_t segacd_irq_mask; - cdda_device* m_cdda; /* NeoCD */ uint16_t nff0002; |