summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2011-06-15 13:10:37 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2011-06-15 13:10:37 +0000
commit2cc07055e43cc90813e8d5742b34928c488731a4 (patch)
tree13da9c90571c355f44227502d32e910113a28e0a
parent079e1fa5faf98fbf25bbfe4ada0050821866bdbe (diff)
CDROM image device modernized and drivers updated (no whatsnew)
-rw-r--r--src/emu/imagedev/cassette.h2
-rw-r--r--src/emu/imagedev/chd_cd.c196
-rw-r--r--src/emu/imagedev/chd_cd.h61
-rw-r--r--src/emu/machine/matsucd.c4
-rw-r--r--src/emu/machine/matsucd.h2
-rw-r--r--src/emu/machine/scsicd.c3
-rw-r--r--src/mame/drivers/3do.c9
-rw-r--r--src/mame/drivers/cd32.c9
-rw-r--r--src/mame/drivers/cdi.c10
-rw-r--r--src/mame/drivers/saturn.c7
-rw-r--r--src/mame/machine/cd32.c5
-rw-r--r--src/mame/machine/cdicdic.c4
-rw-r--r--src/mame/machine/gdrom.c3
-rw-r--r--src/mame/machine/megadriv.c24
-rw-r--r--src/mame/machine/stvcd.c2
15 files changed, 171 insertions, 170 deletions
diff --git a/src/emu/imagedev/cassette.h b/src/emu/imagedev/cassette.h
index 6f3f702171e..922c7c9bcbb 100644
--- a/src/emu/imagedev/cassette.h
+++ b/src/emu/imagedev/cassette.h
@@ -66,7 +66,7 @@ public:
virtual bool call_load();
virtual void call_unload();
virtual void call_display();
- virtual void call_display_info() { m_device_displayinfo(*this); }
+ virtual void call_display_info() { if (m_device_displayinfo) m_device_displayinfo(*this); }
virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
virtual iodevice_t image_type() const { return IO_CASSETTE; }
diff --git a/src/emu/imagedev/chd_cd.c b/src/emu/imagedev/chd_cd.c
index cfdaf9e47d3..28971f5d2a0 100644
--- a/src/emu/imagedev/chd_cd.c
+++ b/src/emu/imagedev/chd_cd.c
@@ -37,13 +37,6 @@ static const char *const error_strings[] =
"unsupported CHD version"
};
-INLINE const cdrom_config *get_config_dev(const device_t *device)
-{
- assert(device != NULL);
- assert(device->type() == CDROM);
- return (const cdrom_config *)downcast<const legacy_device_base *>(device)->inline_config();
-}
-
static const char *chd_get_error_string(int chderr)
{
if ((chderr < 0 ) || (chderr >= ARRAY_LENGTH(error_strings)))
@@ -56,43 +49,96 @@ static OPTION_GUIDE_START(cd_option_guide)
OPTION_INT('K', "hunksize", "Hunk Bytes")
OPTION_GUIDE_END
-static const char cd_option_spec[] =
- "K512/1024/2048/[4096]";
+static const char cd_option_spec[] = "K512/1024/2048/[4096]";
+// device type definition
+const device_type CDROM = &device_creator<cdrom_image_device>;
-typedef struct _dev_cdrom_t dev_cdrom_t;
-struct _dev_cdrom_t
+//-------------------------------------------------
+// cdrom_image_device - constructor
+//-------------------------------------------------
+
+cdrom_image_device::cdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, CDROM, "Cdrom", tag, owner, clock),
+ device_image_interface(mconfig, *this)
{
- cdrom_file *cdrom_handle;
-};
+}
+
+//-------------------------------------------------
+// cdrom_image_device - destructor
+//-------------------------------------------------
+
+cdrom_image_device::~cdrom_image_device()
+{
+}
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void cdrom_image_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const cdrom_interface *intf = reinterpret_cast<const cdrom_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<cdrom_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_interface, 0, sizeof(m_interface));
+ memset(&m_device_displayinfo, 0, sizeof(m_device_displayinfo));
+ }
+
+ image_device_format *format = global_alloc_clear(image_device_format);;
+ format->m_index = 0;
+ format->m_name = "chdcd";
+ format->m_description = "CHD CD-ROM drive";
+ format->m_extensions = "chd";
+ format->m_optspec = cd_option_spec;
+ format->m_next = NULL;
+
+ m_formatlist = format;
+
+ // set brief and instance name
+ update_names();
+}
-INLINE dev_cdrom_t *get_safe_token(device_t *device) {
- assert( device != NULL );
- assert( ( device->type() == CDROM ) );
- return (dev_cdrom_t *) downcast<legacy_device_base *>(device)->token();
+const option_guide *cdrom_image_device::create_option_guide() const
+{
+ return cd_option_guide;
}
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void cdrom_image_device::device_start()
+{
+ m_cdrom_handle = NULL;
+}
-static DEVICE_IMAGE_LOAD(cdrom)
+bool cdrom_image_device::call_load()
{
- dev_cdrom_t *cdrom = get_safe_token(&image.device());
chd_error err = (chd_error)0;
chd_file *chd = NULL;
astring tempstring;
- if (image.software_entry() == NULL)
+ if (software_entry() == NULL)
{
- err = chd_open_file( image.image_core_file(), CHD_OPEN_READ, NULL, &chd ); /* CDs are never writeable */
+ err = chd_open_file( image_core_file(), CHD_OPEN_READ, NULL, &chd ); /* CDs are never writeable */
if ( err )
goto error;
} else {
- chd = get_disk_handle(image.device().machine(), image.device().subtag(tempstring,"cdrom"));
+ chd = get_disk_handle(device().machine(), device().subtag(tempstring,"cdrom"));
}
/* open the CHD file */
- cdrom->cdrom_handle = cdrom_open( chd );
- if ( ! cdrom->cdrom_handle )
+ m_cdrom_handle = cdrom_open( chd );
+ if ( ! m_cdrom_handle )
goto error;
return IMAGE_INIT_PASS;
@@ -101,105 +147,13 @@ error:
if ( chd )
chd_close( chd );
if ( err )
- image.seterror( IMAGE_ERROR_UNSPECIFIED, chd_get_error_string( err ) );
+ seterror( IMAGE_ERROR_UNSPECIFIED, chd_get_error_string( err ) );
return IMAGE_INIT_FAIL;
}
-
-static DEVICE_IMAGE_UNLOAD(cdrom)
+void cdrom_image_device::call_unload()
{
- dev_cdrom_t *cdrom = get_safe_token( &image.device() );
-
- assert( cdrom->cdrom_handle );
- cdrom_close( cdrom->cdrom_handle );
- cdrom->cdrom_handle = NULL;
+ assert(m_cdrom_handle);
+ cdrom_close(m_cdrom_handle);
+ m_cdrom_handle = NULL;
}
-
-
-/*************************************
- *
- * Get the cdrom handle (from the src/cdrom.c core)
- * after an image has been opened with the cd core
- *
- *************************************/
-
-cdrom_file *cd_get_cdrom_file(device_t *image)
-{
- dev_cdrom_t *cdrom = get_safe_token( image );
-
- return cdrom->cdrom_handle;
-}
-
-
-/*-------------------------------------------------
- DEVICE_START(cdrom)
--------------------------------------------------*/
-
-static DEVICE_START(cdrom)
-{
- dev_cdrom_t *cdrom = get_safe_token( device );
-
- cdrom->cdrom_handle = NULL;
-}
-
-/*-------------------------------------------------
- DEVICE_IMAGE_SOFTLIST_LOAD(cdrom)
--------------------------------------------------*/
-static DEVICE_IMAGE_SOFTLIST_LOAD(cdrom)
-{
- load_software_part_region( &image.device(), swlist, swname, start_entry );
- return TRUE;
-}
-
-/*-------------------------------------------------
- DEVICE_GET_INFO(cdrom)
--------------------------------------------------*/
-
-DEVICE_GET_INFO(cdrom)
-{
- switch( state )
- {
- /* --- the following bits of info are returned as 64-bit signed integers --- */
- case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(dev_cdrom_t); break;
- case DEVINFO_INT_INLINE_CONFIG_BYTES: info->i = sizeof(cdrom_config); break;
- case DEVINFO_INT_IMAGE_TYPE: info->i = IO_CDROM; break;
- case DEVINFO_INT_IMAGE_READABLE: info->i = 1; break;
- case DEVINFO_INT_IMAGE_WRITEABLE: info->i = 0; break;
- case DEVINFO_INT_IMAGE_CREATABLE: info->i = 0; break;
- case DEVINFO_INT_IMAGE_CREATE_OPTCOUNT: info->i = 1; break;
-
- /* --- the following bits of info are returned as pointers to data or functions --- */
- case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(cdrom); break;
- case DEVINFO_FCT_IMAGE_LOAD: info->f = (genf *) DEVICE_IMAGE_LOAD_NAME(cdrom); break;
- case DEVINFO_FCT_IMAGE_UNLOAD: info->f = (genf *) DEVICE_IMAGE_UNLOAD_NAME(cdrom); break;
- case DEVINFO_FCT_IMAGE_SOFTLIST_LOAD: info->f = (genf *) DEVICE_IMAGE_SOFTLIST_LOAD_NAME(cdrom); break;
- case DEVINFO_FCT_IMAGE_DISPLAY_INFO:
- if ( device && downcast<const legacy_image_device_base *>(device)->inline_config() && get_config_dev(device)->device_displayinfo) {
- info->f = (genf *) get_config_dev(device)->device_displayinfo;
- } else {
- info->f = NULL;
- }
- break;
- case DEVINFO_PTR_IMAGE_CREATE_OPTGUIDE: info->p = (void *) cd_option_guide; break;
- case DEVINFO_PTR_IMAGE_CREATE_OPTSPEC+0: info->p = (void *) cd_option_spec; break;
-
- /* --- the following bits of info are returned as NULL-terminated strings --- */
- case DEVINFO_STR_NAME: strcpy(info->s, "Cdrom"); break;
- case DEVINFO_STR_FAMILY: strcpy(info->s, "Cdrom"); break;
- case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break;
- case DEVINFO_STR_IMAGE_FILE_EXTENSIONS: strcpy(info->s, "chd"); break;
- case DEVINFO_STR_IMAGE_CREATE_OPTNAME+0: strcpy(info->s, "chdcd"); break;
- case DEVINFO_STR_IMAGE_CREATE_OPTDESC+0: strcpy(info->s, "CHD CD-ROM drive"); break;
- case DEVINFO_STR_IMAGE_CREATE_OPTEXTS+0: strcpy(info->s, "chd"); break;
-
- case DEVINFO_STR_IMAGE_INTERFACE:
- if ( device && downcast<const legacy_image_device_base *>(device)->inline_config() && get_config_dev(device)->interface )
- {
- strcpy(info->s, get_config_dev(device)->interface );
- }
- break;
-
- }
-}
-
-DEFINE_LEGACY_IMAGE_DEVICE(CDROM, cdrom);
diff --git a/src/emu/imagedev/chd_cd.h b/src/emu/imagedev/chd_cd.h
index ee752ff645b..9bd5991dfc1 100644
--- a/src/emu/imagedev/chd_cd.h
+++ b/src/emu/imagedev/chd_cd.h
@@ -14,34 +14,63 @@
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
+// ======================> cdrom_interface
-typedef struct cdrom_config_t cdrom_config;
-struct cdrom_config_t
+struct cdrom_interface
{
- const char * interface;
- device_image_display_info_func device_displayinfo;
+ const char * m_interface;
+ device_image_display_info_func m_device_displayinfo;
};
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-DECLARE_LEGACY_IMAGE_DEVICE(CDROM, cdrom);
+// ======================> printer_image_device
+class cdrom_image_device : public device_t,
+ public cdrom_interface,
+ public device_image_interface
+{
+public:
+ // construction/destruction
+ cdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual ~cdrom_image_device();
+
+ // image-level overrides
+ virtual bool call_load();
+ virtual void call_unload();
+ virtual void call_display_info() { if (m_device_displayinfo) m_device_displayinfo(*this); }
+ virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
+
+ virtual iodevice_t image_type() const { return IO_CDROM; }
+
+ virtual bool is_readable() const { return 1; }
+ virtual bool is_writeable() const { return 0; }
+ virtual bool is_creatable() const { return 0; }
+ virtual bool must_be_loaded() const { return 0; }
+ virtual bool is_reset_on_load() const { return 0; }
+ virtual const char *image_interface() const { return m_interface; }
+ virtual const char *file_extensions() const { return "chd"; }
+ virtual const option_guide *create_option_guide() const;
+
+ // specific implementation
+ cdrom_file *get_cdrom_file() { return m_cdrom_handle; }
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+
+ cdrom_file *m_cdrom_handle;
+ image_device_format m_format;
+};
-cdrom_file *cd_get_cdrom_file(device_t *device);
+// device type definition
+extern const device_type CDROM;
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
-#define MCFG_CDROM_ADD(_tag) \
+#define MCFG_CDROM_ADD(_tag, _config) \
MCFG_DEVICE_ADD(_tag, CDROM, 0) \
-
-#define MCFG_CDROM_INTERFACE(_interface) \
- MCFG_DEVICE_CONFIG_DATAPTR(cdrom_config, interface, _interface )
-
-#define MCFG_CDROM_DISPLAY_INFO(_displayinfo) \
- MCFG_DEVICE_CONFIG_DATAPTR(cdrom_config, device_displayinfo, DEVICE_IMAGE_DISPLAY_INFO_NAME(_displayinfo))
+ MCFG_DEVICE_CONFIG(_config) \
#endif /* CHD_CD_H */
diff --git a/src/emu/machine/matsucd.c b/src/emu/machine/matsucd.c
index 7692773b58e..fe7f64a48ff 100644
--- a/src/emu/machine/matsucd.c
+++ b/src/emu/machine/matsucd.c
@@ -62,11 +62,11 @@ static matsucd cd;
static TIMER_CALLBACK(matsu_subcode_proc);
-void matsucd_init( device_t *cdrom_device, const char *cdda_tag )
+void matsucd_init( cdrom_image_device *cdrom_device, const char *cdda_tag )
{
memset(&cd, 0, sizeof( matsucd ) );
- cd.cdrom = cd_get_cdrom_file( cdrom_device );
+ cd.cdrom = cdrom_device->get_cdrom_file();
cd.cdda = cdrom_device->machine().device(cdda_tag);
cd.frame_timer = cdrom_device->machine().scheduler().timer_alloc(FUNC(matsu_subcode_proc));
diff --git a/src/emu/machine/matsucd.h b/src/emu/machine/matsucd.h
index 088a4d93109..b1e40690f83 100644
--- a/src/emu/machine/matsucd.h
+++ b/src/emu/machine/matsucd.h
@@ -5,7 +5,7 @@
***************************************************************************/
/* initialization */
-void matsucd_init( device_t *cdrom_device, const char *cdda_tag );
+void matsucd_init( cdrom_image_device *cdrom_device, const char *cdda_tag );
/* signaling */
diff --git a/src/emu/machine/scsicd.c b/src/emu/machine/scsicd.c
index 3034981819f..9b1d53c37f9 100644
--- a/src/emu/machine/scsicd.c
+++ b/src/emu/machine/scsicd.c
@@ -692,7 +692,8 @@ static void scsicd_alloc_instance( SCSIInstance *scsiInstance, const char *diskr
if (machine.device( diskregion )) {
our_this->is_file = TRUE;
- our_this->cdrom = cd_get_cdrom_file( machine.device( diskregion ) );
+ cdrom_image_device *cdrom = machine.device<cdrom_image_device>(diskregion);
+ our_this->cdrom = cdrom->get_cdrom_file();
} else {
our_this->is_file = FALSE;
our_this->cdrom = cdrom_open(get_disk_handle( machine, diskregion ));
diff --git a/src/mame/drivers/3do.c b/src/mame/drivers/3do.c
index d827074b407..3a8917a6806 100644
--- a/src/mame/drivers/3do.c
+++ b/src/mame/drivers/3do.c
@@ -149,6 +149,11 @@ static MACHINE_RESET( 3do )
_3do_clio_init(machine, downcast<screen_device *>(machine.device("screen")));
}
+struct cdrom_interface _3do_cdrom =
+{
+ NULL,
+ NULL
+};
static MACHINE_CONFIG_START( 3do, _3do_state )
@@ -167,7 +172,7 @@ static MACHINE_CONFIG_START( 3do, _3do_state )
// MCFG_SCREEN_UPDATE( generic_bitmapped )
MCFG_SCREEN_UPDATE( _3do )
- MCFG_CDROM_ADD( "cdrom" )
+ MCFG_CDROM_ADD( "cdrom", _3do_cdrom)
MACHINE_CONFIG_END
@@ -188,7 +193,7 @@ static MACHINE_CONFIG_START( 3do_pal, _3do_state )
MCFG_SCREEN_REFRESH_RATE( 50 )
MCFG_SCREEN_UPDATE( generic_bitmapped )
- MCFG_CDROM_ADD( "cdrom" )
+ MCFG_CDROM_ADD( "cdrom", _3do_cdrom)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/cd32.c b/src/mame/drivers/cd32.c
index 5cc29c1b30f..6363111bfe4 100644
--- a/src/mame/drivers/cd32.c
+++ b/src/mame/drivers/cd32.c
@@ -800,11 +800,14 @@ static MACHINE_CONFIG_START( cd32base, cd32_state )
MCFG_MOS8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, cia_1_intf)
MACHINE_CONFIG_END
-
+struct cdrom_interface cd32_cdrom =
+{
+ "cd32_cdrom",
+ NULL
+};
static MACHINE_CONFIG_DERIVED( cd32, cd32base )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("cd32_cdrom")
+ MCFG_CDROM_ADD( "cdrom", cd32_cdrom )
MCFG_SOFTWARE_LIST_ADD("cd_list","cd32")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/cdi.c b/src/mame/drivers/cdi.c
index 524076592cd..fee3920df06 100644
--- a/src/mame/drivers/cdi.c
+++ b/src/mame/drivers/cdi.c
@@ -341,13 +341,17 @@ static MACHINE_CONFIG_START( cdi, cdi_state )
MCFG_MK48T08_ADD( "mk48t08" )
MACHINE_CONFIG_END
+struct cdrom_interface cdi_cdrom =
+{
+ "cdi_cdrom",
+ DEVICE_IMAGE_DISPLAY_INFO_NAME(cdi_cdinfo)
+};
+
// Standard CD-i system, with CD-ROM image device (MESS) and Software List (MESS)
static MACHINE_CONFIG_DERIVED( cdimono1, cdi )
MCFG_MACHINE_RESET( cdi )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("cdi_cdrom")
- MCFG_CDROM_DISPLAY_INFO(cdi_cdinfo)
+ MCFG_CDROM_ADD( "cdrom", cdi_cdrom )
MCFG_SOFTWARE_LIST_ADD("cd_list","cdi")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/saturn.c b/src/mame/drivers/saturn.c
index 5d99af98a4e..9f8e4f02e1e 100644
--- a/src/mame/drivers/saturn.c
+++ b/src/mame/drivers/saturn.c
@@ -2751,6 +2751,11 @@ static MACHINE_RESET( stv )
state->m_scu.start_factor[1] = -1;
state->m_scu.start_factor[2] = -1;
}
+struct cdrom_interface saturn_cdrom =
+{
+ NULL,
+ NULL
+};
static MACHINE_CONFIG_START( saturn, saturn_state )
@@ -2796,7 +2801,7 @@ static MACHINE_CONFIG_START( saturn, saturn_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
- MCFG_CDROM_ADD( "cdrom" )
+ MCFG_CDROM_ADD( "cdrom", saturn_cdrom)
MCFG_CARTSLOT_ADD("cart")
MACHINE_CONFIG_END
diff --git a/src/mame/machine/cd32.c b/src/mame/machine/cd32.c
index 9294b6938dc..b6a9b4d9cc4 100644
--- a/src/mame/machine/cd32.c
+++ b/src/mame/machine/cd32.c
@@ -103,12 +103,11 @@ static DEVICE_RESET( akiko )
running_machine &machine = device->machine();
akiko_state *state = get_safe_token(device);
- device_t *cddevice;
- cddevice = machine.device("cdrom");
+ cdrom_image_device *cddevice = machine.device<cdrom_image_device>("cdrom");
if (cddevice!=NULL)
{
// MESS case
- state->m_cdrom = cd_get_cdrom_file(cddevice);
+ state->m_cdrom = cddevice->get_cdrom_file();
state->m_cdrom_is_device = 1;
}
else
diff --git a/src/mame/machine/cdicdic.c b/src/mame/machine/cdicdic.c
index fc2ffa15323..034e2a3982d 100644
--- a/src/mame/machine/cdicdic.c
+++ b/src/mame/machine/cdicdic.c
@@ -1199,11 +1199,11 @@ void cdicdic_device::device_reset()
{
init();
- device_t *cdrom_dev = machine().device("cdrom");
+ cdrom_image_device *cdrom_dev = machine().device<cdrom_image_device>("cdrom");
if( cdrom_dev )
{
// MESS case (has CDROM device)
- m_cd = cd_get_cdrom_file(cdrom_dev);
+ m_cd = cdrom_dev->get_cdrom_file();
cdda_set_cdrom(machine().device("cdda"), m_cd);
}
else
diff --git a/src/mame/machine/gdrom.c b/src/mame/machine/gdrom.c
index 31935daa5d1..6b5bc68510f 100644
--- a/src/mame/machine/gdrom.c
+++ b/src/mame/machine/gdrom.c
@@ -792,7 +792,8 @@ static void scsicd_alloc_instance( SCSIInstance *scsiInstance, const char *diskr
if (machine.device( diskregion )) {
our_this->is_file = TRUE;
- our_this->cdrom = cd_get_cdrom_file( machine.device( diskregion ) );
+ cdrom_image_device *cdrom = machine.device<cdrom_image_device>(diskregion);
+ our_this->cdrom = cdrom->get_cdrom_file();
} else {
our_this->is_file = FALSE;
our_this->cdrom = cdrom_open(get_disk_handle( machine, diskregion ));
diff --git a/src/mame/machine/megadriv.c b/src/mame/machine/megadriv.c
index 1f93870d143..77ddff737f0 100644
--- a/src/mame/machine/megadriv.c
+++ b/src/mame/machine/megadriv.c
@@ -6103,12 +6103,10 @@ static MACHINE_RESET( segacd )
lc89510_Reset();
{
- device_t *device;
-
- device = machine.device("cdrom");
+ cdrom_image_device *device = machine.device<cdrom_image_device>("cdrom");
if ( device )
{
- segacd.cd = cd_get_cdrom_file(device);
+ segacd.cd = device->get_cdrom_file();
if ( segacd.cd )
{
segacd.toc = cdrom_get_toc( segacd.cd );
@@ -9783,22 +9781,25 @@ MACHINE_CONFIG_DERIVED( genesis_scd, megadriv )
MCFG_QUANTUM_PERFECT_CPU("segacd_68k") // perfect sync to the fastest cpu
MACHINE_CONFIG_END
+struct cdrom_interface scd_cdrom =
+{
+ "scd_cdrom",
+ NULL
+};
+
/* Different Softlists for different regions (for now at least) */
MACHINE_CONFIG_DERIVED( genesis_scd_scd, genesis_scd )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("scd_cdrom")
+ MCFG_CDROM_ADD( "cdrom",scd_cdrom )
MCFG_SOFTWARE_LIST_ADD("cd_list","segacd")
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED( genesis_scd_mcd, genesis_scd )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("scd_cdrom")
+ MCFG_CDROM_ADD( "cdrom",scd_cdrom )
MCFG_SOFTWARE_LIST_ADD("cd_list","megacd")
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED( genesis_scd_mcdj, genesis_scd )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("scd_cdrom")
+ MCFG_CDROM_ADD( "cdrom",scd_cdrom )
MCFG_SOFTWARE_LIST_ADD("cd_list","megacdj")
MACHINE_CONFIG_END
@@ -9819,8 +9820,7 @@ MACHINE_CONFIG_DERIVED( genesis_32x_scd, genesis_32x )
MCFG_SOUND_ROUTE( 0, "lspeaker", 0.25 )
MCFG_SOUND_ROUTE( 1, "rspeaker", 0.25 )
- MCFG_CDROM_ADD( "cdrom" )
- MCFG_CDROM_INTERFACE("scd_cdrom")
+ MCFG_CDROM_ADD( "cdrom", scd_cdrom)
MCFG_SOFTWARE_LIST_ADD("cd_list","segacd")
MCFG_QUANTUM_PERFECT_CPU("32x_master_sh2")
diff --git a/src/mame/machine/stvcd.c b/src/mame/machine/stvcd.c
index 9ccea724d54..908e0be15a0 100644
--- a/src/mame/machine/stvcd.c
+++ b/src/mame/machine/stvcd.c
@@ -267,7 +267,7 @@ void stvcd_reset(running_machine &machine)
}
#ifdef MESS
- cdrom = cd_get_cdrom_file(machine.device( "cdrom" ));
+ cdrom = machine.device<cdrom_image_device>("cdrom")->get_cdrom_file();
#else
cdrom = cdrom_open(get_disk_handle(machine, "cdrom"));
#endif