summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2023-04-09 14:07:32 +0200
committer Olivier Galibert <galibert@pobox.com>2023-05-04 20:29:58 +0200
commit28104cdbdfc39b0ced6411381ffb074772dce345 (patch)
tree42ac4aa65769e67e5879dc786234e852f321a830 /src
parent472f441a1b395c6a9c3b44b3f8cc70ffad2b66f4 (diff)
chd: Add dvd support. better abstraction in general, multi-image support in arcade-type drivers
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/ata/atapicdr.cpp39
-rw-r--r--src/devices/bus/ata/atapicdr.h27
-rw-r--r--src/devices/bus/ata/gdrom.cpp33
-rw-r--r--src/devices/bus/ata/gdrom.h4
-rw-r--r--src/devices/bus/ata/idehd.cpp8
-rw-r--r--src/devices/bus/ata/idehd.h8
-rw-r--r--src/devices/bus/isa/hdc.cpp14
-rw-r--r--src/devices/bus/isa/hdc.h2
-rw-r--r--src/devices/bus/isa/mcd.cpp2
-rw-r--r--src/devices/bus/isa/mcd.h2
-rw-r--r--src/devices/bus/nscsi/cd.cpp77
-rw-r--r--src/devices/bus/nscsi/cd.h11
-rw-r--r--src/devices/bus/nscsi/hd.cpp25
-rw-r--r--src/devices/bus/nscsi/hd.h1
-rw-r--r--src/devices/bus/nscsi/s1410.cpp6
-rw-r--r--src/devices/bus/scsi/omti5100.cpp12
-rw-r--r--src/devices/bus/scsi/s1410.cpp9
-rw-r--r--src/devices/bus/scsi/s1410.h2
-rw-r--r--src/devices/bus/scsi/scsicd.cpp7
-rw-r--r--src/devices/bus/scsi/scsicd.h2
-rw-r--r--src/devices/bus/scsi/scsihd.cpp5
-rw-r--r--src/devices/bus/scsi/scsihd.h2
-rw-r--r--src/devices/bus/scsi/scsihle.cpp6
-rw-r--r--src/devices/bus/scsi/scsihle.h2
-rw-r--r--src/devices/bus/ti99x/990_hd.cpp51
-rw-r--r--src/devices/bus/ti99x/990_hd.h3
-rw-r--r--src/devices/imagedev/cdromimg.cpp227
-rw-r--r--src/devices/imagedev/cdromimg.h (renamed from src/devices/imagedev/chd_cd.h)51
-rw-r--r--src/devices/imagedev/chd_cd.cpp123
-rw-r--r--src/devices/imagedev/harddriv.cpp59
-rw-r--r--src/devices/imagedev/harddriv.h12
-rw-r--r--src/devices/machine/akiko.cpp31
-rw-r--r--src/devices/machine/akiko.h5
-rw-r--r--src/devices/machine/ataflash.cpp10
-rw-r--r--src/devices/machine/corvushd.cpp15
-rw-r--r--src/devices/machine/corvushd.h2
-rw-r--r--src/devices/machine/cr511b.h2
-rw-r--r--src/devices/machine/legscsi.cpp8
-rw-r--r--src/devices/machine/spg290_cdservo.cpp32
-rw-r--r--src/devices/machine/spg290_cdservo.h4
-rw-r--r--src/devices/machine/spi_sdcard.cpp16
-rw-r--r--src/devices/machine/spi_sdcard.h3
-rw-r--r--src/devices/machine/stvcd.cpp100
-rw-r--r--src/devices/machine/stvcd.h6
-rw-r--r--src/devices/machine/t10mmc.cpp96
-rw-r--r--src/devices/machine/t10mmc.h7
-rw-r--r--src/devices/machine/t10sbc.cpp33
-rw-r--r--src/devices/machine/t10sbc.h5
-rw-r--r--src/devices/machine/t10spc.h2
-rw-r--r--src/devices/machine/wd1000.cpp8
-rw-r--r--src/devices/machine/wd1010.cpp6
-rw-r--r--src/devices/sound/cdda.cpp4
-rw-r--r--src/devices/sound/cdda.h6
-rw-r--r--src/emu/diimage.cpp154
-rw-r--r--src/emu/diimage.h18
-rw-r--r--src/frontend/mame/ui/filemngr.cpp25
-rw-r--r--src/frontend/mame/ui/info.cpp3
-rw-r--r--src/frontend/mame/ui/prscntrl.cpp69
-rw-r--r--src/frontend/mame/ui/prscntrl.h45
-rw-r--r--src/lib/util/chd.cpp42
-rw-r--r--src/lib/util/chd.h18
-rw-r--r--src/lib/util/dvdrom.cpp105
-rw-r--r--src/lib/util/dvdrom.h41
-rw-r--r--src/mame/altos/altos8600.cpp12
-rw-r--r--src/mame/amiga/cubo.cpp2
-rw-r--r--src/mame/apple/pippin.cpp2
-rw-r--r--src/mame/atari/jaguar.cpp15
-rw-r--r--src/mame/atari/jaguar.h5
-rw-r--r--src/mame/ceres/ceres.cpp6
-rw-r--r--src/mame/dec/rainbow.cpp15
-rw-r--r--src/mame/fujitsu/fmtowns.cpp26
-rw-r--r--src/mame/fujitsu/fmtowns.h2
-rw-r--r--src/mame/konami/firebeat.cpp7
-rw-r--r--src/mame/konami/konamim2.cpp34
-rw-r--r--src/mame/konami/ksys573.cpp390
-rw-r--r--src/mame/misc/3do.cpp2
-rw-r--r--src/mame/nec/pce_cd.cpp49
-rw-r--r--src/mame/nec/pce_cd.h3
-rw-r--r--src/mame/neogeo/neogeocd.cpp2
-rw-r--r--src/mame/next/next.h2
-rw-r--r--src/mame/nichibutsu/csplayh5.cpp95
-rw-r--r--src/mame/philips/cdi.cpp4
-rw-r--r--src/mame/philips/cdicdic.cpp17
-rw-r--r--src/mame/philips/cdicdic.h6
-rw-r--r--src/mame/quantel/dpb7000.cpp25
-rw-r--r--src/mame/sega/dccons.cpp4
-rw-r--r--src/mame/sega/dccons.h2
-rw-r--r--src/mame/sega/mdconsole.cpp3
-rw-r--r--src/mame/sega/naomigd.cpp2
-rw-r--r--src/mame/shared/isbc_215g.cpp12
-rw-r--r--src/mame/shared/megacdcd.cpp56
-rw-r--r--src/mame/shared/megacdcd.h3
-rw-r--r--src/mame/skeleton/vsmilepro.cpp2
-rw-r--r--src/mame/sony/psx.cpp2
-rw-r--r--src/mame/sony/psxcd.h2
-rw-r--r--src/tools/chdman.cpp94
96 files changed, 1634 insertions, 1022 deletions
diff --git a/src/devices/bus/ata/atapicdr.cpp b/src/devices/bus/ata/atapicdr.cpp
index fd3003f58d3..c140b87d2e7 100644
--- a/src/devices/bus/ata/atapicdr.cpp
+++ b/src/devices/bus/ata/atapicdr.cpp
@@ -8,8 +8,10 @@
#define T10MMC_GET_EVENT_STATUS_NOTIFICATION 0x4a
// device type definition
-DEFINE_DEVICE_TYPE(ATAPI_CDROM, atapi_cdrom_device, "cdrom", "ATAPI CD-ROM")
-DEFINE_DEVICE_TYPE(ATAPI_FIXED_CDROM, atapi_fixed_cdrom_device, "cdrom_fixed", "ATAPI fixed CD-ROM")
+DEFINE_DEVICE_TYPE(ATAPI_CDROM, atapi_cdrom_device, "cdrom", "ATAPI CD-ROM")
+DEFINE_DEVICE_TYPE(ATAPI_FIXED_CDROM, atapi_fixed_cdrom_device, "cdrom_fixed", "ATAPI fixed CD-ROM")
+DEFINE_DEVICE_TYPE(ATAPI_DVDROM, atapi_dvdrom_device, "dvdrom", "ATAPI CD/DVD-ROM")
+DEFINE_DEVICE_TYPE(ATAPI_FIXED_DVDROM, atapi_fixed_dvdrom_device, "dvdrom_fixed", "ATAPI fixed CD/DVD-ROM")
atapi_cdrom_device::atapi_cdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
atapi_cdrom_device(mconfig, ATAPI_CDROM, tag, owner, clock)
@@ -27,6 +29,16 @@ atapi_fixed_cdrom_device::atapi_fixed_cdrom_device(const machine_config &mconfig
{
}
+atapi_dvdrom_device::atapi_dvdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ atapi_cdrom_device(mconfig, ATAPI_DVDROM, tag, owner, clock)
+{
+}
+
+atapi_fixed_dvdrom_device::atapi_fixed_dvdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ atapi_cdrom_device(mconfig, ATAPI_FIXED_DVDROM, tag, owner, clock)
+{
+}
+
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
@@ -88,21 +100,36 @@ void atapi_cdrom_device::device_reset()
{
atapi_hle_device::device_reset();
m_media_change = true;
+ m_sequence_counter = m_image->sequence_counter();
}
void atapi_fixed_cdrom_device::device_reset()
{
atapi_hle_device::device_reset();
- m_cdrom = m_image->get_cdrom_file();
m_media_change = false;
+ m_sequence_counter = m_image->sequence_counter();
+}
+
+void atapi_dvdrom_device::device_reset()
+{
+ atapi_hle_device::device_reset();
+ m_media_change = true;
+ m_sequence_counter = m_image->sequence_counter();
+}
+
+void atapi_fixed_dvdrom_device::device_reset()
+{
+ atapi_hle_device::device_reset();
+ m_media_change = false;
+ m_sequence_counter = m_image->sequence_counter();
}
void atapi_cdrom_device::process_buffer()
{
- if(m_cdrom != m_image->get_cdrom_file())
+ if( m_sequence_counter != m_image->sequence_counter() )
{
m_media_change = true;
- SetDevice(m_image->get_cdrom_file());
+ m_sequence_counter = m_image->sequence_counter();
}
atapi_hle_device::process_buffer();
}
@@ -129,7 +156,7 @@ void atapi_cdrom_device::ExecCommand()
case T10MMC_CMD_PAUSE_RESUME:
case T10MMC_CMD_PLAY_AUDIO_12:
case T10SBC_CMD_READ_12:
- if(!m_cdrom)
+ if(!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_sense_key = SCSI_SENSE_KEY_MEDIUM_ERROR;
diff --git a/src/devices/bus/ata/atapicdr.h b/src/devices/bus/ata/atapicdr.h
index c2ffbb92fee..24e94ea4d8e 100644
--- a/src/devices/bus/ata/atapicdr.h
+++ b/src/devices/bus/ata/atapicdr.h
@@ -4,7 +4,7 @@
atapicdr.h
- ATAPI CDROM
+ ATAPI CDROM/DVDROM
***************************************************************************/
@@ -37,6 +37,7 @@ protected:
virtual void identify_packet_device() override;
virtual void process_buffer() override;
virtual void ExecCommand() override;
+ u32 m_sequence_counter;
bool m_media_change;
uint16_t ultra_dma_mode;
};
@@ -50,8 +51,28 @@ protected:
virtual void device_reset() override;
};
+class atapi_dvdrom_device : public atapi_cdrom_device
+{
+public:
+ atapi_dvdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_reset() override;
+};
+
+class atapi_fixed_dvdrom_device : public atapi_cdrom_device
+{
+public:
+ atapi_fixed_dvdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_reset() override;
+};
+
// device type definition
-DECLARE_DEVICE_TYPE(ATAPI_CDROM, atapi_cdrom_device)
-DECLARE_DEVICE_TYPE(ATAPI_FIXED_CDROM, atapi_fixed_cdrom_device)
+DECLARE_DEVICE_TYPE(ATAPI_CDROM, atapi_cdrom_device)
+DECLARE_DEVICE_TYPE(ATAPI_FIXED_CDROM, atapi_fixed_cdrom_device)
+DECLARE_DEVICE_TYPE(ATAPI_DVDROM, atapi_dvdrom_device)
+DECLARE_DEVICE_TYPE(ATAPI_FIXED_DVDROM, atapi_fixed_dvdrom_device)
#endif // MAME_BUS_ATA_ATAPICDR_H
diff --git a/src/devices/bus/ata/gdrom.cpp b/src/devices/bus/ata/gdrom.cpp
index f6f6b877543..ba2020cf994 100644
--- a/src/devices/bus/ata/gdrom.cpp
+++ b/src/devices/bus/ata/gdrom.cpp
@@ -247,7 +247,7 @@ void gdrom_device::ExecCommand()
// READ TOC (GD-ROM ver.)
case 0x14:
{
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -257,7 +257,7 @@ void gdrom_device::ExecCommand()
// TODO: is this correct?
int start_trk = command[2];
- int end_trk = m_cdrom->get_last_track();
+ int end_trk = m_image->get_last_track();
int length;
int allocation_length = SCSILengthFromUINT16( &command[ 3 ] );
@@ -340,11 +340,11 @@ void gdrom_device::ReadData( uint8_t *data, int dataLength )
case 0x30: // CD_READ
LOGCMD("CD_READ read %x dataLength,\n", dataLength);
- if ((m_cdrom) && (m_blocks))
+ if (m_image->exists() && m_blocks)
{
while (dataLength > 0)
{
- if (!m_cdrom->read_data(m_lba, tmp_buffer, cdrom_file::CD_TRACK_MODE1))
+ if (!m_image->read_data(m_lba, tmp_buffer, cdrom_file::CD_TRACK_MODE1))
{
LOGWARN("CD read error!\n");
return;
@@ -397,7 +397,7 @@ void gdrom_device::ReadData( uint8_t *data, int dataLength )
start_trk = 1;
}
- end_trk = m_cdrom->get_last_track();
+ end_trk = m_image->get_last_track();
len = (end_trk * 8) + 2;
// the returned TOC DATA LENGTH must be the full amount,
@@ -429,11 +429,11 @@ void gdrom_device::ReadData( uint8_t *data, int dataLength )
}
data[dptr++] = 0;
- data[dptr++] = m_cdrom->get_adr_control(cdrom_track);
+ data[dptr++] = m_image->get_adr_control(cdrom_track);
data[dptr++] = i;
data[dptr++] = 0;
- tstart = m_cdrom->get_track_start(cdrom_track);
+ tstart = m_image->get_track_start(cdrom_track);
if ((command[1]&2)>>1)
tstart = cdrom_file::lba_to_msf(tstart);
data[dptr++] = (tstart>>24) & 0xff;
@@ -453,7 +453,7 @@ void gdrom_device::ReadData( uint8_t *data, int dataLength )
case 0x71:
LOGCMD("SYS_REQ_SECU\n");
memcpy(data, &GDROM_Cmd71_Reply[0], sizeof(GDROM_Cmd71_Reply));
- if (is_real_gdrom_disc)
+ if (m_image->is_gd())
data[10] = 0x1f; // needed by dimm board firmware
break;
@@ -498,22 +498,11 @@ void gdrom_device::WriteData( uint8_t *data, int dataLength )
}
}
-void gdrom_device::SetDevice(void *device)
-{
- t10mmc::SetDevice(device);
-
- // try to find if the mounted chd is from an actual gd-rom disc
- if (m_cdrom)
- if (m_cdrom->get_toc().flags & cdrom_file::CD_FLAG_GDROM)
- is_real_gdrom_disc = true;
-}
-
// device type definition
-DEFINE_DEVICE_TYPE(GDROM, gdrom_device, "gdrom", "GD-ROM")
+DEFINE_DEVICE_TYPE(ATAPI_GDROM, gdrom_device, "gdrom", "GD-ROM")
gdrom_device::gdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- atapi_cdrom_device(mconfig, GDROM, tag, owner, clock),
- is_real_gdrom_disc(false)
+ atapi_cdrom_device(mconfig, GDROM, tag, owner, clock)
{
}
@@ -574,6 +563,6 @@ void gdrom_device::signature()
atapi_hle_device::signature();
// naomi dimm board firmware needs the upper nibble to be 8 at the beginning
- if (is_real_gdrom_disc)
+ if (m_image->is_gd())
m_sector_number = 0x81;
}
diff --git a/src/devices/bus/ata/gdrom.h b/src/devices/bus/ata/gdrom.h
index 66565e7160b..829186dec62 100644
--- a/src/devices/bus/ata/gdrom.h
+++ b/src/devices/bus/ata/gdrom.h
@@ -27,7 +27,6 @@ public:
protected:
virtual void process_buffer() override;
virtual void signature() override;
- virtual void SetDevice(void *device) override;
// device-level overrides
virtual void device_start() override;
@@ -38,9 +37,8 @@ private:
uint32_t read_type = 0; // for command 0x30 only
uint32_t data_select = 0; // for command 0x30 only
uint32_t transferOffset = 0;
- bool is_real_gdrom_disc;
};
-DECLARE_DEVICE_TYPE(GDROM, gdrom_device)
+DECLARE_DEVICE_TYPE(ATAPI_GDROM, gdrom_device)
#endif // MAME_BUS_ATA_GDROM_H
diff --git a/src/devices/bus/ata/idehd.cpp b/src/devices/bus/ata/idehd.cpp
index 38ea6c21c6c..6734bfa82c4 100644
--- a/src/devices/bus/ata/idehd.cpp
+++ b/src/devices/bus/ata/idehd.cpp
@@ -821,11 +821,9 @@ void ide_hdd_device::device_start()
void ide_hdd_device::device_reset()
{
- m_disk = m_image->get_hard_disk_file();
-
- if (m_disk != nullptr && !m_can_identify_device)
+ if (m_image->exists() && !m_can_identify_device)
{
- const auto &hdinfo = m_disk->get_info();
+ const auto &hdinfo = m_image->get_info();
if (hdinfo.sectorbytes == IDE_DISK_SECTOR_SIZE)
{
m_num_cylinders = hdinfo.cylinders;
@@ -837,7 +835,7 @@ void ide_hdd_device::device_reset()
// build the features page
std::vector<u8> ident;
- m_disk->get_inquiry_data(ident);
+ m_image->get_inquiry_data(ident);
if (ident.size() == 512)
{
for( int w = 0; w < 256; w++ )
diff --git a/src/devices/bus/ata/idehd.h b/src/devices/bus/ata/idehd.h
index 0d7a999a412..1a6342ea6d9 100644
--- a/src/devices/bus/ata/idehd.h
+++ b/src/devices/bus/ata/idehd.h
@@ -102,20 +102,18 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual int read_sector(uint32_t lba, void *buffer) override { return !m_disk ? 0 : m_disk->read(lba, buffer); }
- virtual int write_sector(uint32_t lba, const void *buffer) override { return !m_disk ? 0 : m_disk->write(lba, buffer); }
+ virtual int read_sector(uint32_t lba, void *buffer) override { return !m_image->exists() ? 0 : m_image->read(lba, buffer); }
+ virtual int write_sector(uint32_t lba, const void *buffer) override { return !m_image->exists() ? 0 : m_image->write(lba, buffer); }
virtual uint8_t calculate_status() override;
- hard_disk_file *m_disk;
-
enum
{
TID_NULL = TID_BUSY + 1
};
-private:
required_device<harddisk_image_device> m_image;
+private:
emu_timer * m_last_status_timer;
};
diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp
index 74d2a23d11b..58e2d6452c6 100644
--- a/src/devices/bus/isa/hdc.cpp
+++ b/src/devices/bus/isa/hdc.cpp
@@ -227,7 +227,7 @@ void xt_hdc_device::device_reset()
m_error = 0;
}
-hard_disk_file *xt_hdc_device::pc_hdc_file(int id)
+harddisk_image_device *xt_hdc_device::pc_hdc_file(int id)
{
harddisk_image_device *img = nullptr;
switch (id)
@@ -245,7 +245,7 @@ hard_disk_file *xt_hdc_device::pc_hdc_file(int id)
if (!img->exists())
return nullptr;
- return img->get_hard_disk_file();
+ return img;
}
void xt_hdc_device::pc_hdc_result(bool set_error_info)
@@ -291,7 +291,7 @@ bool xt_hdc_device::no_dma()
int xt_hdc_device::get_lbasector()
{
- hard_disk_file *file = pc_hdc_file(m_drv);
+ harddisk_image_device *file = pc_hdc_file(m_drv);
const auto &info = file->get_info();
int lbasector = m_cylinder[m_drv];
@@ -314,7 +314,7 @@ int xt_hdc_device::get_lbasector()
int xt_hdc_device::dack_r()
{
- hard_disk_file *file = pc_hdc_file(m_drv);
+ harddisk_image_device *file = pc_hdc_file(m_drv);
if (!file)
return 0;
const auto &info = file->get_info();
@@ -387,7 +387,7 @@ int xt_hdc_device::dack_rs()
void xt_hdc_device::dack_w(int data)
{
- hard_disk_file *file = pc_hdc_file(m_drv);
+ harddisk_image_device *file = pc_hdc_file(m_drv);
if (!file)
return;
const auto &info = file->get_info();
@@ -455,7 +455,7 @@ void xt_hdc_device::execute_read()
if (m_sector_cnt[m_drv] == 0)
size = 256 * 512;
- hard_disk_file *disk = pc_hdc_file(m_drv);
+ harddisk_image_device *disk = pc_hdc_file(m_drv);
if (!disk)
return;
@@ -504,7 +504,7 @@ void xt_hdc_device::execute_write()
if (m_sector_cnt[m_drv] == 0)
size = 256 * 512;
- hard_disk_file *disk = pc_hdc_file(m_drv);
+ harddisk_image_device *disk = pc_hdc_file(m_drv);
if (!disk)
return;
diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h
index 0f49d2118f9..72a63836498 100644
--- a/src/devices/bus/isa/hdc.h
+++ b/src/devices/bus/isa/hdc.h
@@ -52,7 +52,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- hard_disk_file *pc_hdc_file(int id);
+ harddisk_image_device *pc_hdc_file(int id);
void pc_hdc_result(bool set_error_info);
bool no_dma();
int get_lbasector();
diff --git a/src/devices/bus/isa/mcd.cpp b/src/devices/bus/isa/mcd.cpp
index 4f37e26c8fa..b0f0b79660f 100644
--- a/src/devices/bus/isa/mcd.cpp
+++ b/src/devices/bus/isa/mcd.cpp
@@ -84,7 +84,7 @@ bool mcd_isa_device::read_sector(bool first)
if(m_cdrom_handle->get_track_type(m_cdrom_handle->get_track(lba)) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->stop_audio();
- m_cdda->set_cdrom(get_cdrom_file());
+ m_cdda->set_cdrom(this);
m_cdda->start_audio(lba, m_readcount);
return true;
}
diff --git a/src/devices/bus/isa/mcd.h b/src/devices/bus/isa/mcd.h
index 4c2b7a0e636..b6a2fce564d 100644
--- a/src/devices/bus/isa/mcd.h
+++ b/src/devices/bus/isa/mcd.h
@@ -6,7 +6,7 @@
#pragma once
#include "isa.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "sound/cdda.h"
//**************************************************************************
diff --git a/src/devices/bus/nscsi/cd.cpp b/src/devices/bus/nscsi/cd.cpp
index eb50017bb62..c160af6f0f0 100644
--- a/src/devices/bus/nscsi/cd.cpp
+++ b/src/devices/bus/nscsi/cd.cpp
@@ -76,12 +76,11 @@ nscsi_cdrom_apple_device::nscsi_cdrom_apple_device(const machine_config &mconfig
nscsi_cdrom_device::nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: nscsi_full_device(mconfig, type, tag, owner, clock)
- , cdrom(nullptr)
+ , image(*this, "image")
, cdda(*this, "cdda")
, bytes_per_block(bytes_per_sector)
, lba(0)
, cur_sector(0)
- , image(*this, "image")
{
}
@@ -99,8 +98,8 @@ void nscsi_cdrom_device::device_start()
void nscsi_cdrom_device::device_reset()
{
nscsi_full_device::device_reset();
- cdrom = image->get_cdrom_file();
- cdda->set_cdrom(cdrom);
+ sequence_counter = image->sequence_counter();
+ cdda->set_cdrom(image);
lba = 0;
cur_sector = -1;
mode_data_size = 12;
@@ -141,7 +140,7 @@ uint8_t nscsi_cdrom_device::scsi_get_data(int id, int pos)
const int extra_pos = (lba * bytes_per_block) % bytes_per_sector;
if(sector != cur_sector) {
cur_sector = sector;
- if(!cdrom->read_data(sector, sector_buffer, cdrom_file::CD_TRACK_MODE1)) {
+ if(!image->read_data(sector, sector_buffer, cdrom_file::CD_TRACK_MODE1)) {
LOG("CD READ ERROR sector %d!\n", sector);
std::fill_n(sector_buffer, sizeof(sector_buffer), 0);
}
@@ -195,11 +194,11 @@ void nscsi_cdrom_device::scsi_command()
int blocks;
// check for media change
- if((cdrom != image->get_cdrom_file()) && (scsi_cmdbuf[0] != SC_INQUIRY))
+ if( sequence_counter != image->sequence_counter() && (scsi_cmdbuf[0] != SC_INQUIRY))
{
// clear media change condition
- cdrom = image->get_cdrom_file();
cur_sector = -1;
+ sequence_counter = image->sequence_counter();
// report unit attention condition
sense(false, SK_UNIT_ATTENTION);
@@ -210,14 +209,14 @@ void nscsi_cdrom_device::scsi_command()
switch(scsi_cmdbuf[0]) {
case SC_TEST_UNIT_READY:
LOG("command TEST UNIT READY\n");
- if(cdrom)
+ if(image->exists())
scsi_status_complete(SS_GOOD);
else
return_no_cd();
break;
case SC_READ_6:
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -346,13 +345,13 @@ void nscsi_cdrom_device::scsi_command()
case SC_READ_CAPACITY: {
LOG("command READ CAPACITY\n");
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
// get the last used block on the disc
- const u32 temp = cdrom->get_track_start(0xaa) * (bytes_per_sector / bytes_per_block) - 1;
+ const u32 temp = image->get_track_start(0xaa) * (bytes_per_sector / bytes_per_block) - 1;
scsi_cmdbuf[0] = (temp>>24) & 0xff;
scsi_cmdbuf[1] = (temp>>16) & 0xff;
@@ -373,7 +372,7 @@ void nscsi_cdrom_device::scsi_command()
blocks = (scsi_cmdbuf[7] << 8) | scsi_cmdbuf[8];
LOG("command READ EXTENDED start=%08x blocks=%04x\n", lba, blocks);
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -398,7 +397,7 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[pos++] = 0x80; // WP, cache
// get the last used block on the disc
- const u32 temp = cdrom ? cdrom->get_track_start(0xaa) * (bytes_per_sector / bytes_per_block) - 1 : 0;
+ const u32 temp = image->exists() ? image->get_track_start(0xaa) * (bytes_per_sector / bytes_per_block) - 1 : 0;
scsi_cmdbuf[pos++] = 0x08; // Block descriptor length
scsi_cmdbuf[pos++] = 0x00; // density code
@@ -515,7 +514,7 @@ void nscsi_cdrom_device::scsi_command()
case SC_READ_DISC_INFORMATION:
LOG("command READ DISC INFORMATION\n");
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -526,12 +525,12 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[3] = 1; // first track
scsi_cmdbuf[4] = 1; // number of sessions (TODO: session support for CHDv6)
scsi_cmdbuf[5] = 1; // first track in last session
- scsi_cmdbuf[6] = cdrom->get_last_track(); // last track in last session
+ scsi_cmdbuf[6] = image->get_last_track(); // last track in last session
scsi_cmdbuf[8] = 0; // CD-ROM, not XA
// lead in start time in MSF
{
- u32 tstart = cdrom->get_track_start(0);
+ u32 tstart = image->get_track_start(0);
tstart = to_msf(tstart + 150);
scsi_cmdbuf[16] = (tstart >> 24) & 0xff;
@@ -540,7 +539,7 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[19] = (tstart & 0xff);
// lead-out start time in MSF
- tstart = cdrom->get_track_start(0xaa);
+ tstart = image->get_track_start(0xaa);
tstart = to_msf(tstart + 150);
scsi_cmdbuf[20] = (tstart >> 24) & 0xff;
@@ -568,7 +567,7 @@ void nscsi_cdrom_device::scsi_command()
LOG("command READ SUB CHANNEL Param = %d, Track = %d, MSF = %d, SUBQ = %d\n", param, track, msf, subq);
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -600,7 +599,7 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[4] = 0x01; // Sub-channel Data Format Code
scsi_cmdbuf[5] = (audio_active ? 0 : 4) | 0x10; // Q Sub-channel encodes current position data
- scsi_cmdbuf[6] = cdrom->get_track(m_last_lba) + 1; // Track Number
+ scsi_cmdbuf[6] = image->get_track(m_last_lba) + 1; // Track Number
scsi_cmdbuf[7] = 0x00; // Index Number
uint32_t frame = m_last_lba;
@@ -612,7 +611,7 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[10] = BIT(frame, 8, 8);
scsi_cmdbuf[11] = BIT(frame, 0, 8);
- frame = m_last_lba - cdrom->get_track_start(scsi_cmdbuf[6] - 1);
+ frame = m_last_lba - image->get_track_start(scsi_cmdbuf[6] - 1);
if(msf)
frame = to_msf(frame);
@@ -672,7 +671,7 @@ void nscsi_cdrom_device::scsi_command()
LOG("command READ TOC PMA ATIP, format %s msf=%d size=%d\n", format_names[format], msf, size);
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -681,7 +680,7 @@ void nscsi_cdrom_device::scsi_command()
switch (format) {
case 0: {
int start_track = scsi_cmdbuf[6];
- int end_track = cdrom->get_last_track();
+ int end_track = image->get_last_track();
int tracks;
if(start_track == 0)
@@ -700,7 +699,7 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[pos++] = (len>>8) & 0xff;
scsi_cmdbuf[pos++] = (len & 0xff);
scsi_cmdbuf[pos++] = 1;
- scsi_cmdbuf[pos++] = cdrom->get_last_track();
+ scsi_cmdbuf[pos++] = image->get_last_track();
if (start_track == 0)
start_track = 1;
@@ -714,11 +713,11 @@ void nscsi_cdrom_device::scsi_command()
}
scsi_cmdbuf[pos++] = 0;
- scsi_cmdbuf[pos++] = cdrom->get_adr_control(cdrom_track);
+ scsi_cmdbuf[pos++] = image->get_adr_control(cdrom_track);
scsi_cmdbuf[pos++] = track;
scsi_cmdbuf[pos++] = 0;
- u32 tstart = cdrom->get_track_start(cdrom_track);
+ u32 tstart = image->get_track_start(cdrom_track);
if(msf)
tstart = to_msf(tstart+150);
@@ -740,11 +739,11 @@ void nscsi_cdrom_device::scsi_command()
scsi_cmdbuf[pos++] = 1;
scsi_cmdbuf[pos++] = 0;
- scsi_cmdbuf[pos++] = cdrom->get_adr_control(0);
+ scsi_cmdbuf[pos++] = image->get_adr_control(0);
scsi_cmdbuf[pos++] = 1;
scsi_cmdbuf[pos++] = 0;
- u32 tstart = cdrom->get_track_start(0);
+ u32 tstart = image->get_track_start(0);
if (msf)
tstart = to_msf(tstart+150);
@@ -787,12 +786,12 @@ void nscsi_cdrom_device::scsi_command()
// TODO: Index isn't accounted for at all
const uint32_t start_track = scsi_cmdbuf[4];
- const uint32_t end_track = cdda_sotc ? start_track : std::min(cdrom->get_last_track(), (int)scsi_cmdbuf[7]);
- const uint32_t m_lba = cdrom->get_track_start(start_track - 1);
- const uint32_t m_blocks = cdrom->get_track_start(end_track) - m_lba;
- const uint32_t track = cdrom->get_track(m_lba);
+ const uint32_t end_track = cdda_sotc ? start_track : std::min(image->get_last_track(), (int)scsi_cmdbuf[7]);
+ const uint32_t m_lba = image->get_track_start(start_track - 1);
+ const uint32_t m_blocks = image->get_track_start(end_track) - m_lba;
+ const uint32_t track = image->get_track(m_lba);
- if(cdrom->get_track_type(track) == cdrom_file::CD_TRACK_AUDIO) {
+ if(image->get_track_type(track) == cdrom_file::CD_TRACK_AUDIO) {
LOG("Playing %d blocks from track %d (lba %d)\n", m_blocks, start_track, m_lba);
cdda->start_audio(m_lba, m_blocks);
@@ -808,7 +807,7 @@ void nscsi_cdrom_device::scsi_command()
}
case SC_PAUSE_RESUME:
- if (cdrom)
+ if (image->exists())
cdda->pause_audio(BIT(scsi_cmdbuf[8], 0) ^ 1);
scsi_status_complete(SS_GOOD);
@@ -899,7 +898,7 @@ void nscsi_cdrom_apple_device::scsi_command()
switch (scsi_cmdbuf[0]) {
case SC_TEST_UNIT_READY:
LOG("command TEST UNIT READY (AppleCD)\n");
- if(cdrom)
+ if(image->exists())
{
scsi_status_complete(SS_GOOD);
}
@@ -916,7 +915,7 @@ void nscsi_cdrom_apple_device::scsi_command()
LOG("command READ TOC (AppleCD), size=%d, msf=%d\n", size, msf);
- if(!cdrom) {
+ if(!image->exists()) {
return_no_cd();
break;
}
@@ -924,7 +923,7 @@ void nscsi_cdrom_apple_device::scsi_command()
int pos = 0;
int start_track = scsi_cmdbuf[5];
- int end_track = cdrom->get_last_track();
+ int end_track = image->get_last_track();
int tracks;
if(start_track == 0)
@@ -943,7 +942,7 @@ void nscsi_cdrom_apple_device::scsi_command()
scsi_cmdbuf[pos++] = (len>>8) & 0xff;
scsi_cmdbuf[pos++] = (len & 0xff);
scsi_cmdbuf[pos++] = 1;
- scsi_cmdbuf[pos++] = cdrom->get_last_track();
+ scsi_cmdbuf[pos++] = image->get_last_track();
if (start_track == 0)
start_track = 1;
@@ -957,9 +956,9 @@ void nscsi_cdrom_apple_device::scsi_command()
}
scsi_cmdbuf[pos++] = track;
- scsi_cmdbuf[pos++] = cdrom->get_adr_control(cdrom_track);
+ scsi_cmdbuf[pos++] = image->get_adr_control(cdrom_track);
- u32 tstart = cdrom->get_track_start(cdrom_track);
+ u32 tstart = image->get_track_start(cdrom_track);
if(msf)
tstart = to_msf(tstart+150);
diff --git a/src/devices/bus/nscsi/cd.h b/src/devices/bus/nscsi/cd.h
index 3819b84fa88..0443ee191c7 100644
--- a/src/devices/bus/nscsi/cd.h
+++ b/src/devices/bus/nscsi/cd.h
@@ -6,7 +6,7 @@
#pragma once
#include "machine/nscsi_bus.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "cdrom.h"
#include "sound/cdda.h"
@@ -18,6 +18,9 @@ public:
void set_block_size(u32 block_size);
protected:
+ required_device<cdrom_image_device> image;
+ required_device<cdda_device> cdda;
+
nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0);
nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, const char *mfr, const char *product, const char *rev, uint8_t inq_data, uint8_t compliance)
@@ -41,17 +44,13 @@ protected:
void return_no_cd();
static int to_msf(int frame);
- cdrom_file *cdrom;
-
- required_device<cdda_device> cdda;
-
private:
static constexpr uint32_t bytes_per_sector = 2048;
+ u32 sequence_counter;
uint8_t sector_buffer[bytes_per_sector];
uint32_t bytes_per_block;
int lba, cur_sector;
- required_device<cdrom_image_device> image;
uint8_t mode_data[256];
uint8_t mode_data_size;
diff --git a/src/devices/bus/nscsi/hd.cpp b/src/devices/bus/nscsi/hd.cpp
index 7e0f48730a8..03c386391ac 100644
--- a/src/devices/bus/nscsi/hd.cpp
+++ b/src/devices/bus/nscsi/hd.cpp
@@ -21,7 +21,7 @@ nscsi_harddisk_device::nscsi_harddisk_device(const machine_config &mconfig, cons
}
nscsi_harddisk_device::nscsi_harddisk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- nscsi_full_device(mconfig, type, tag, owner, clock), image(*this, "image"), harddisk(nullptr), lba(0), cur_lba(0), blocks(0), bytes_per_sector(0)
+ nscsi_full_device(mconfig, type, tag, owner, clock), image(*this, "image"), lba(0), cur_lba(0), blocks(0), bytes_per_sector(0)
{
}
@@ -38,14 +38,13 @@ void nscsi_harddisk_device::device_start()
void nscsi_harddisk_device::device_reset()
{
nscsi_full_device::device_reset();
- harddisk = image->get_hard_disk_file();
- if(!harddisk) {
+ if(!image->exists()) {
scsi_id = -1;
bytes_per_sector = 0;
} else {
- const auto &hdinfo = harddisk->get_info();
+ const auto &hdinfo = image->get_info();
bytes_per_sector = hdinfo.sectorbytes;
- harddisk->get_inquiry_data(m_inquiry_data);
+ image->get_inquiry_data(m_inquiry_data);
}
cur_lba = -1;
}
@@ -67,7 +66,7 @@ uint8_t nscsi_harddisk_device::scsi_get_data(int id, int pos)
int clba = lba + pos / bytes_per_sector;
if(clba != cur_lba) {
cur_lba = clba;
- if(!harddisk->read(cur_lba, block)) {
+ if(!image->read(cur_lba, block)) {
LOG("HD READ ERROR !\n");
memset(block, 0, sizeof(block));
}
@@ -90,7 +89,7 @@ void nscsi_harddisk_device::scsi_put_data(int id, int pos, uint8_t data)
block[offset] = data;
cur_lba = lba + pos / bytes_per_sector;
if(offset == bytes_per_sector-1) {
- if(!harddisk->write(cur_lba, block))
+ if(!image->write(cur_lba, block))
LOG("HD WRITE ERROR !\n");
}
}
@@ -117,7 +116,7 @@ void nscsi_harddisk_device::scsi_command()
LOG("command READ start=%08x blocks=%04x\n", lba, blocks);
- if(harddisk->read(lba, block)) {
+ if(image->read(lba, block)) {
scsi_data_in(2, blocks*bytes_per_sector);
scsi_status_complete(SS_GOOD);
}
@@ -219,7 +218,7 @@ void nscsi_harddisk_device::scsi_command()
scsi_cmdbuf[pos++] = 0x00; // medium type
scsi_cmdbuf[pos++] = 0x00; // WP, cache
- const auto &info = harddisk->get_info();
+ const auto &info = image->get_info();
uint32_t dsize = info.cylinders * info.heads * info.sectors - 1;
scsi_cmdbuf[pos++] = 0x08; // Block descriptor length
scsi_cmdbuf[pos++] = 0x00;
@@ -450,7 +449,7 @@ void nscsi_harddisk_device::scsi_command()
case SC_READ_CAPACITY: {
LOG("command READ CAPACITY\n");
- const auto &info = harddisk->get_info();
+ const auto &info = image->get_info();
uint32_t size = info.cylinders * info.heads * info.sectors - 1;
scsi_cmdbuf[0] = (size>>24) & 0xff;
@@ -473,7 +472,7 @@ void nscsi_harddisk_device::scsi_command()
LOG("command READ EXTENDED start=%08x blocks=%04x\n",lba, blocks);
- if(harddisk->read(lba, block)) {
+ if(image->read(lba, block)) {
scsi_data_in(2, blocks*bytes_per_sector);
scsi_status_complete(SS_GOOD);
}
@@ -502,12 +501,12 @@ void nscsi_harddisk_device::scsi_command()
(scsi_cmdbuf[1] & 0x10) ? " FMTDATA" : "",
(scsi_cmdbuf[1] & 0x08) ? " CMPLIST" : "");
{
- const auto &info = harddisk->get_info();
+ const auto &info = image->get_info();
auto block = std::make_unique<uint8_t[]>(info.sectorbytes);
for(int cyl = 0; cyl < info.cylinders; cyl++) {
for(int head = 0; head < info.heads; head++) {
for(int sector = 0; sector < info.sectors; sector++) {
- harddisk->write(cyl * head * sector, block.get());
+ image->write(cyl * head * sector, block.get());
}
}
}
diff --git a/src/devices/bus/nscsi/hd.h b/src/devices/bus/nscsi/hd.h
index 7ee1f851d26..3dc2060099c 100644
--- a/src/devices/bus/nscsi/hd.h
+++ b/src/devices/bus/nscsi/hd.h
@@ -26,7 +26,6 @@ protected:
required_device<harddisk_image_device> image;
uint8_t block[512];
- hard_disk_file *harddisk;
int lba, cur_lba, blocks;
int bytes_per_sector;
diff --git a/src/devices/bus/nscsi/s1410.cpp b/src/devices/bus/nscsi/s1410.cpp
index 87949ffc765..7151fcab041 100644
--- a/src/devices/bus/nscsi/s1410.cpp
+++ b/src/devices/bus/nscsi/s1410.cpp
@@ -85,12 +85,12 @@ void nscsi_s1410_device::scsi_command()
case SC_FORMAT_UNIT:
LOG("command FORMAT UNIT\n");
{
- const auto &info = harddisk->get_info();
+ const auto &info = image->get_info();
auto block = std::make_unique<uint8_t[]>(info.sectorbytes);
memset(&block[0], 0x6c, info.sectorbytes);
lba = ((scsi_cmdbuf[1] & 0x1f)<<16) | (scsi_cmdbuf[2]<<8) | scsi_cmdbuf[3];
for(; lba < (info.cylinders * info.heads * info.sectors); lba++) {
- harddisk->write(lba, block.get());
+ image->write(lba, block.get());
}
}
scsi_status_complete(SS_GOOD);
@@ -110,7 +110,7 @@ void nscsi_s1410_device::scsi_command()
auto block = std::make_unique<uint8_t[]>(track_length);
memset(&block[0], 0x6c, track_length);
- if(!harddisk->write(lba, &block[0])) {
+ if(!image->write(lba, &block[0])) {
logerror("%s: HD WRITE ERROR !\n", tag());
scsi_status_complete(SS_FORMAT_ERROR);
scsi_sense_buffer[0] = SK_FORMAT_ERROR;
diff --git a/src/devices/bus/scsi/omti5100.cpp b/src/devices/bus/scsi/omti5100.cpp
index a76893fd12c..b4c46de8553 100644
--- a/src/devices/bus/scsi/omti5100.cpp
+++ b/src/devices/bus/scsi/omti5100.cpp
@@ -33,7 +33,7 @@ omti5100_device::omti5100_device(const machine_config &mconfig, const char *tag,
void omti5100_device::device_start()
{
- if(!m_image0->get_hard_disk_file())
+ if(!m_image0->exists())
m_image = m_image1;
m_image = m_image0;
scsihle_device::device_start();
@@ -42,8 +42,8 @@ void omti5100_device::device_start()
void omti5100_device::ExecCommand()
{
int drive = (command[1] >> 5) & 1;
- hard_disk_file *image = (drive ? m_image1 : m_image0)->get_hard_disk_file();
- if(!image)
+ harddisk_image_device *image = drive ? m_image1 : m_image0;
+ if(!image->exists())
{
if(command[0] == T10SPC_CMD_REQUEST_SENSE)
return scsihd_device::ExecCommand();
@@ -86,7 +86,6 @@ void omti5100_device::ExecCommand()
}
else
{
- SetDevice(image);
scsihd_device::ExecCommand();
}
break;
@@ -114,7 +113,6 @@ void omti5100_device::ExecCommand()
break;
}
default:
- SetDevice(image);
scsihd_device::ExecCommand();
break;
}
@@ -144,10 +142,10 @@ void omti5100_device::WriteData( uint8_t *data, int dataLength )
case OMTI_ASSIGN_DISK_PARAM:
{
int drive = ((command[1] >> 5) & 1);
- hard_disk_file *image = (drive ? m_image1 : m_image0)->get_hard_disk_file();
+ harddisk_image_device *image = drive ? m_image1 : m_image0;
m_param[drive].heads = data[3] + 1;
m_param[drive].cylinders = ((data[4] << 8) | data[5]) + 1;
- if(!data[8] && image)
+ if(!data[8] && image->exists())
{
switch(image->get_info().sectorbytes)
{
diff --git a/src/devices/bus/scsi/s1410.cpp b/src/devices/bus/scsi/s1410.cpp
index d9a67ed513d..2873a281783 100644
--- a/src/devices/bus/scsi/s1410.cpp
+++ b/src/devices/bus/scsi/s1410.cpp
@@ -173,7 +173,7 @@ void s1410_device::device_add_mconfig(machine_config &config)
z8400a.set_addrmap(AS_IO, &s1410_device::s1410_io);
z8400a.set_disable();
- HARDDISK(config, "image").set_interface("scsi_hdd");
+ HARDDISK(config, m_image).set_interface("scsi_hdd");
}
@@ -187,7 +187,8 @@ void s1410_device::device_add_mconfig(machine_config &config)
//-------------------------------------------------
s1410_device::s1410_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : scsihd_device(mconfig, S1410, tag, owner, clock)
+ : scsihd_device(mconfig, S1410, tag, owner, clock),
+ m_image(*this, "image")
{
}
@@ -248,14 +249,14 @@ void s1410_device::ExecCommand()
logerror("S1410: FORMAT TRACK at LBA %x for %x blocks\n", m_lba, m_blocks);
- if ((m_disk) && (m_blocks))
+ if (m_image->exists() && m_blocks)
{
std::vector<uint8_t> data(m_sector_bytes);
memset(&data[0], 0xc6, m_sector_bytes);
while (m_blocks > 0)
{
- if (!m_disk->write(m_lba, &data[0]))
+ if (!m_image->write(m_lba, &data[0]))
{
logerror("S1410: HD write error!\n");
}
diff --git a/src/devices/bus/scsi/s1410.h b/src/devices/bus/scsi/s1410.h
index 03ec288b76a..305b63a1141 100644
--- a/src/devices/bus/scsi/s1410.h
+++ b/src/devices/bus/scsi/s1410.h
@@ -29,6 +29,8 @@ protected:
virtual void ReadData( uint8_t *data, int dataLength ) override;
private:
+ required_device<harddisk_image_device> m_image;
+
void s1410_io(address_map &map);
void s1410_mem(address_map &map);
};
diff --git a/src/devices/bus/scsi/scsicd.cpp b/src/devices/bus/scsi/scsicd.cpp
index 0f577ea44d3..a8d238f5fe7 100644
--- a/src/devices/bus/scsi/scsicd.cpp
+++ b/src/devices/bus/scsi/scsicd.cpp
@@ -35,3 +35,10 @@ void scsicd_device::device_add_mconfig(machine_config &config)
CDROM(config, "image").set_interface("cdrom");
CDDA(config, "cdda");
}
+
+bool scsicd_device::exists() const
+{
+ // cd drive is visible even if there's no cd in it
+ return true;
+}
+
diff --git a/src/devices/bus/scsi/scsicd.h b/src/devices/bus/scsi/scsicd.h
index 9d88f6bd1a8..ffb37d8b072 100644
--- a/src/devices/bus/scsi/scsicd.h
+++ b/src/devices/bus/scsi/scsicd.h
@@ -21,8 +21,8 @@ public:
protected:
scsicd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
-
virtual void device_add_mconfig(machine_config &config) override;
+ virtual bool exists() const override;
};
// device type definition
diff --git a/src/devices/bus/scsi/scsihd.cpp b/src/devices/bus/scsi/scsihd.cpp
index 4fb01e02130..433ec26313a 100644
--- a/src/devices/bus/scsi/scsihd.cpp
+++ b/src/devices/bus/scsi/scsihd.cpp
@@ -33,3 +33,8 @@ void scsihd_device::device_add_mconfig(machine_config &config)
{
HARDDISK(config, "image", "scsi_hdd");
}
+
+bool scsihd_device::exists() const
+{
+ return m_image->exists();
+}
diff --git a/src/devices/bus/scsi/scsihd.h b/src/devices/bus/scsi/scsihd.h
index 3cc50af8ec2..734e1ef4547 100644
--- a/src/devices/bus/scsi/scsihd.h
+++ b/src/devices/bus/scsi/scsihd.h
@@ -23,8 +23,8 @@ public:
protected:
scsihd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
-
virtual void device_add_mconfig(machine_config &config) override;
+ virtual bool exists() const override;
};
// device type definition
diff --git a/src/devices/bus/scsi/scsihle.cpp b/src/devices/bus/scsi/scsihle.cpp
index 09a0fa84eca..59f2b3a0c03 100644
--- a/src/devices/bus/scsi/scsihle.cpp
+++ b/src/devices/bus/scsi/scsihle.cpp
@@ -415,11 +415,9 @@ WRITE_LINE_MEMBER( scsihle_device::input_sel )
// only one line active.
if (scsibus_driveno(m_input_data) == scsiID)
{
- void *hdfile = nullptr;
// Check to see if device had image file mounted, if not, do not set busy,
// and stay busfree.
- GetDevice(&hdfile);
- if (hdfile != nullptr)
+ if (exists())
{
if (!state)
{
@@ -494,7 +492,7 @@ WRITE_LINE_MEMBER( scsihle_device::input_ack )
if (IS_COMMAND(SCSI_CMD_FORMAT_UNIT))
{
- // If we have the first byte, then cancel the dataout timout
+ // If we have the first byte, then cancel the dataout timeout
if (data_idx == 1)
dataout_timer->adjust(attotime::never);
diff --git a/src/devices/bus/scsi/scsihle.h b/src/devices/bus/scsi/scsihle.h
index ea6f577a592..6c8312177ee 100644
--- a/src/devices/bus/scsi/scsihle.h
+++ b/src/devices/bus/scsi/scsihle.h
@@ -35,6 +35,8 @@ public:
virtual DECLARE_WRITE_LINE_MEMBER( input_data6 ) override { if (state) m_input_data |= 0x40; else m_input_data &= ~0x40; }
virtual DECLARE_WRITE_LINE_MEMBER( input_data7 ) override { if (state) m_input_data |= 0x80; else m_input_data &= ~0x80; }
+ virtual bool exists() const = 0;
+
protected:
// construction/destruction
scsihle_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
diff --git a/src/devices/bus/ti99x/990_hd.cpp b/src/devices/bus/ti99x/990_hd.cpp
index 9912d86e28c..052aa6af352 100644
--- a/src/devices/bus/ti99x/990_hd.cpp
+++ b/src/devices/bus/ti99x/990_hd.cpp
@@ -46,16 +46,6 @@ static inline uint32_t get_UINT32BE(UINT32BE word)
return (word.bytes[0] << 24) | (word.bytes[1] << 16) | (word.bytes[2] << 8) | word.bytes[3];
}
-#ifdef UNUSED_FUNCTION
-static inline void set_UINT32BE(UINT32BE *word, uint32_t data)
-{
- word->bytes[0] = (data >> 24) & 0xff;
- word->bytes[1] = (data >> 16) & 0xff;
- word->bytes[2] = (data >> 8) & 0xff;
- word->bytes[3] = data & 0xff;
-}
-#endif
-
/* disk image header */
struct disk_image_header
{
@@ -166,20 +156,16 @@ std::error_condition ti990_hdc_device::load_hd(device_image_interface &image)
{
int id = get_id_from_device( &image.device() );
hd_unit_t *d;
- hard_disk_file *hd_file;
d = &m_d[id];
- d->img = &image;
-
- hd_file = dynamic_cast<harddisk_image_device *>(&image)->get_hard_disk_file();
+ d->img = downcast<harddisk_image_device *>(&image);
- if ( hd_file )
+ if ( d->img->exists() )
{
d->format = format_mame;
- d->hd_handle = hd_file;
/* use standard hard disk image header. */
- const auto &standard_header = d->hd_handle->get_info();
+ const auto &standard_header = d->img->get_info();
d->cylinders = standard_header.cylinders;
d->heads = standard_header.heads;
@@ -194,7 +180,6 @@ std::error_condition ti990_hdc_device::load_hd(device_image_interface &image)
/* set file descriptor */
d->format = format_old;
- d->hd_handle = nullptr;
/* use custom image header. */
/* to convert old header-less images to this format, insert a 16-byte
@@ -218,7 +203,6 @@ std::error_condition ti990_hdc_device::load_hd(device_image_interface &image)
if (d->bytes_per_sector > MAX_SECTOR_SIZE)
{
d->format = format_mame;
- d->hd_handle = nullptr;
d->wp = 1;
d->unsafe = 1;
return image_error::INVALIDIMAGE;
@@ -245,7 +229,6 @@ void ti990_hdc_device::unload_hd(device_image_interface &image)
d = &m_d[id];
d->format = format_mame; /* don't care */
- d->hd_handle = nullptr;
d->wp = 1;
d->unsafe = 1;
@@ -258,20 +241,7 @@ void ti990_hdc_device::unload_hd(device_image_interface &image)
*/
int ti990_hdc_device::is_unit_loaded(int unit)
{
- int reply = 0;
-
- switch (m_d[unit].format)
- {
- case format_mame:
- reply = (m_d[unit].hd_handle != nullptr);
- break;
-
- case format_old:
- reply = (m_d[unit].img->exists() ? 1 : 0);
- break;
- }
-
- return reply;
+ return m_d[unit].img->exists();
}
/*
@@ -363,7 +333,7 @@ int ti990_hdc_device::read_sector(int unit, unsigned int lba, void *buffer, unsi
switch (m_d[unit].format)
{
case format_mame:
- bytes_read = m_d[unit].bytes_per_sector * m_d[unit].hd_handle->read(lba, buffer);
+ bytes_read = m_d[unit].bytes_per_sector * m_d[unit].img->read(lba, buffer);
if (bytes_read > bytes_to_read)
bytes_read = bytes_to_read;
break;
@@ -393,7 +363,7 @@ int ti990_hdc_device::write_sector(int unit, unsigned int lba, const void *buffe
switch (m_d[unit].format)
{
case format_mame:
- bytes_written = m_d[unit].bytes_per_sector * m_d[unit].hd_handle->write(lba, buffer);
+ bytes_written = m_d[unit].bytes_per_sector * m_d[unit].img->write(lba, buffer);
if (bytes_written > bytes_to_write)
bytes_written = bytes_to_write;
break;
@@ -979,7 +949,6 @@ void ti990_hdc_device::device_start()
for (i=0; i<MAX_DISK_UNIT; i++)
{
m_d[i].format = format_mame;
- m_d[i].hd_handle = nullptr;
m_d[i].wp = 1;
m_d[i].unsafe = 1;
}
@@ -987,10 +956,10 @@ void ti990_hdc_device::device_start()
m_w[7] = w7_idle;
/* get references to harddisk devices */
- m_d[0].img = dynamic_cast<device_image_interface *>(subdevice("harddisk1"));
- m_d[1].img = dynamic_cast<device_image_interface *>(subdevice("harddisk2"));
- m_d[2].img = dynamic_cast<device_image_interface *>(subdevice("harddisk3"));
- m_d[3].img = dynamic_cast<device_image_interface *>(subdevice("harddisk4"));
+ m_d[0].img = dynamic_cast<harddisk_image_device *>(subdevice("harddisk1"));
+ m_d[1].img = dynamic_cast<harddisk_image_device *>(subdevice("harddisk2"));
+ m_d[2].img = dynamic_cast<harddisk_image_device *>(subdevice("harddisk3"));
+ m_d[3].img = dynamic_cast<harddisk_image_device *>(subdevice("harddisk4"));
m_interrupt_callback.resolve_safe();
diff --git a/src/devices/bus/ti99x/990_hd.h b/src/devices/bus/ti99x/990_hd.h
index bb5519a9474..d5b9f60b477 100644
--- a/src/devices/bus/ti99x/990_hd.h
+++ b/src/devices/bus/ti99x/990_hd.h
@@ -59,9 +59,8 @@ private:
/* disk drive unit descriptor */
struct hd_unit_t
{
- device_image_interface *img; /* image descriptor */
+ harddisk_image_device *img; /* image descriptor */
format_t format;
- hard_disk_file *hd_handle; /* mame hard disk descriptor - only if format == format_mame */
unsigned int wp : 1; /* true if disk is write-protected */
unsigned int unsafe : 1; /* true when a disk has just been connected */
diff --git a/src/devices/imagedev/cdromimg.cpp b/src/devices/imagedev/cdromimg.cpp
new file mode 100644
index 00000000000..b0196bdf492
--- /dev/null
+++ b/src/devices/imagedev/cdromimg.cpp
@@ -0,0 +1,227 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods, R. Belmont, Miodrag Milanovic
+/*********************************************************************
+
+ CD/DVD reader
+
+*********************************************************************/
+
+#include "emu.h"
+#include "cdromimg.h"
+
+#include "romload.h"
+
+// device type definition
+DEFINE_DEVICE_TYPE(CDROM, cdrom_image_device, "cdrom_image", "CD-ROM Image")
+DEFINE_DEVICE_TYPE(GDROM, gdrom_image_device, "gdrom_image", "CD/GD-ROM Image")
+DEFINE_DEVICE_TYPE(DVDROM, dvdrom_image_device, "dvdrom_image", "CD/DVD-ROM Image")
+
+//-------------------------------------------------
+// cdrom_image_device - constructor
+//-------------------------------------------------
+
+cdrom_image_device::cdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : cdrom_image_device(mconfig, CDROM, tag, owner, clock)
+{
+}
+
+cdrom_image_device::cdrom_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool dvd_compat, bool gd_compat)
+ : device_t(mconfig, type, tag, owner, clock),
+ device_image_interface(mconfig, *this),
+ m_gd_compat(gd_compat),
+ m_dvd_compat(dvd_compat),
+ m_cdrom_handle(nullptr),
+ m_dvdrom_handle(nullptr),
+ m_extension_list(nullptr),
+ m_interface(nullptr)
+{
+}
+
+//-------------------------------------------------
+// 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()
+{
+ m_extension_list = "chd,cue,toc,nrg,gdi,iso,cdr";
+
+ add_format("chdcd", m_dvd_compat ? "CD/DVD-ROM drive" : "CD-ROM drive", m_extension_list, "");
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void cdrom_image_device::device_start()
+{
+ if (has_preset_images())
+ {
+ set_image_tag();
+ set_user_loadable(false);
+ setup_current_preset_image();
+ }
+ else
+ {
+ m_cdrom_handle.reset();
+ m_dvdrom_handle.reset();
+ }
+}
+
+void cdrom_image_device::setup_current_preset_image()
+{
+ m_cdrom_handle.reset();
+ m_dvdrom_handle.reset();
+
+ chd_file *chd = current_preset_image_chd();
+ if (chd->is_cd())
+ m_cdrom_handle = std::make_unique<cdrom_file>(chd);
+ else if(m_dvd_compat && chd->is_dvd())
+ m_dvdrom_handle = std::make_unique<dvdrom_file>(chd);
+ else
+ fatalerror("chd for region %s is not compatible with the cdrom image device\n", preset_images_list()[current_preset_image_id()]);
+}
+
+void cdrom_image_device::device_stop()
+{
+ m_cdrom_handle.reset();
+ m_dvdrom_handle.reset();
+ if (m_self_chd.opened())
+ m_self_chd.close();
+}
+
+std::pair<std::error_condition, std::string> cdrom_image_device::call_load()
+{
+ if (has_preset_images())
+ {
+ setup_current_preset_image();
+ return std::make_pair(image_error(0), std::string());;
+ }
+
+ std::error_condition err;
+ chd_file *chd = nullptr;
+
+ m_cdrom_handle.reset();
+ m_dvdrom_handle.reset();
+
+ if (!loaded_through_softlist()) {
+ if (is_filetype("chd") && is_loaded()) {
+ util::core_file::ptr proxy;
+ err = util::core_file::open_proxy(image_core_file(), proxy);
+ if (!err)
+ err = m_self_chd.open(std::move(proxy)); // CDs are never writeable
+ if (err)
+ goto error;
+ chd = &m_self_chd;
+ }
+ } else {
+ chd = device().machine().rom_load().get_disk_handle(device().subtag("cdrom").c_str());
+ }
+
+ // open the CHD file
+ if (chd)
+ m_cdrom_handle.reset(new cdrom_file(chd));
+ else
+ m_cdrom_handle.reset(new cdrom_file(filename()));
+
+ if (!m_cdrom_handle)
+ goto error;
+
+ return std::make_pair(std::error_condition(), std::string());
+
+error:
+ if (chd && chd == &m_self_chd)
+ m_self_chd.close();
+ return std::make_pair(err ? err : image_error::UNSPECIFIED, std::string());
+}
+
+void cdrom_image_device::call_unload()
+{
+ assert(m_cdrom_handle || m_dvdrom_handle);
+ m_cdrom_handle.reset();
+ m_dvdrom_handle.reset();
+ if (m_self_chd.opened())
+ m_self_chd.close();
+}
+
+int cdrom_image_device::get_last_track() const
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_last_track();
+ return 0;
+}
+
+uint32_t cdrom_image_device::get_track(uint32_t frame) const
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_track(frame);
+ return 0;
+}
+
+uint32_t cdrom_image_device::get_track_start(uint32_t track) const
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_track_start(track);
+ return 0;
+}
+
+bool cdrom_image_device::read_data(uint32_t lbasector, void *buffer, uint32_t datatype, bool phys)
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->read_data(lbasector, buffer, datatype, phys);
+ return 0;
+}
+
+bool cdrom_image_device::read_subcode(uint32_t lbasector, void *buffer, bool phys)
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->read_subcode(lbasector, buffer, phys);
+ return 0;
+}
+
+int cdrom_image_device::get_adr_control(int track) const
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_adr_control(track);
+ return 0;
+}
+
+const cdrom_file::toc &cdrom_image_device::get_toc() const
+{
+ static cdrom_file::toc notoc;
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_toc();
+ return notoc;
+}
+
+int cdrom_image_device::get_track_type(int track) const
+{
+ if (m_cdrom_handle)
+ return m_cdrom_handle->get_track_type(track);
+ return 0;
+}
+
+bool cdrom_image_device::is_cd() const
+{
+ return m_cdrom_handle != nullptr;
+}
+
+bool cdrom_image_device::is_gd() const
+{
+ return false;
+}
+
+bool cdrom_image_device::is_dvd() const
+{
+ return m_dvdrom_handle != nullptr;
+}
+
diff --git a/src/devices/imagedev/chd_cd.h b/src/devices/imagedev/cdromimg.h
index ba95dc8be61..d06ba80de51 100644
--- a/src/devices/imagedev/chd_cd.h
+++ b/src/devices/imagedev/cdromimg.h
@@ -2,9 +2,9 @@
// copyright-holders:Nathan Woods, R. Belmont, Miodrag Milanovic
/*********************************************************************
- chd_cd.h
+ cdromimg.h
- Interface to the CHD CDROM code
+ CD/DVD reader
*********************************************************************/
@@ -16,12 +16,18 @@
#include "softlist_dev.h"
#include "cdrom.h"
+#include "dvdrom.h"
#include <memory>
#include <string>
#include <system_error>
#include <utility>
+// device type definition
+DECLARE_DEVICE_TYPE(CDROM, cdrom_image_device)
+DECLARE_DEVICE_TYPE(GDROM, gdrom_image_device) // Includes CDROM compatibility (but not DVDROM)
+DECLARE_DEVICE_TYPE(DVDROM, dvdrom_image_device) // Includes CDROM compatibility (but not GDROM)
+
/***************************************************************************
TYPE DEFINITIONS
@@ -52,11 +58,21 @@ public:
virtual const char *image_type_name() const noexcept override { return "cdrom"; }
virtual const char *image_brief_type_name() const noexcept override { return "cdrm"; }
- // specific implementation
- cdrom_file *get_cdrom_file() { return m_cdrom_handle.get(); }
+ int get_last_track() const;
+ uint32_t get_track(uint32_t frame) const;
+ uint32_t get_track_start(uint32_t track) const;
+ bool read_data(uint32_t lbasector, void *buffer, uint32_t datatype, bool phys=false);
+ bool read_subcode(uint32_t lbasector, void *buffer, bool phys=false);
+ int get_adr_control(int track) const;
+ const cdrom_file::toc &get_toc() const;
+ int get_track_type(int track) const;
+
+ bool is_cd() const;
+ bool is_gd() const;
+ bool is_dvd() const;
protected:
- cdrom_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ cdrom_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool dvd_compat = false, bool gd_compat = false);
// device_t implementation
virtual void device_config_complete() override;
@@ -66,13 +82,34 @@ protected:
// device_image_interface implementation
virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+ void setup_current_preset_image();
+
+ bool m_gd_compat;
+ bool m_dvd_compat;
chd_file m_self_chd;
std::unique_ptr<cdrom_file> m_cdrom_handle;
+ std::unique_ptr<dvdrom_file> m_dvdrom_handle;
const char *m_extension_list;
const char *m_interface;
};
-// device type definition
-DECLARE_DEVICE_TYPE(CDROM, cdrom_image_device)
+class gdrom_image_device : public cdrom_image_device
+{
+public:
+ // construction/destruction
+ gdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0) :
+ cdrom_image_device(mconfig, GDROM, tag, owner, clock, false, true) {}
+ virtual ~gdrom_image_device() = default;
+};
+
+class dvdrom_image_device : public cdrom_image_device
+{
+public:
+ // construction/destruction
+ dvdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0) :
+ cdrom_image_device(mconfig, DVDROM, tag, owner, clock, true, false) {}
+ virtual ~dvdrom_image_device() = default;
+};
+
#endif // MAME_DEVICES_IMAGEDEV_CHD_CD_H
diff --git a/src/devices/imagedev/chd_cd.cpp b/src/devices/imagedev/chd_cd.cpp
deleted file mode 100644
index 6fea63b77a4..00000000000
--- a/src/devices/imagedev/chd_cd.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Nathan Woods, R. Belmont, Miodrag Milanovic
-/*********************************************************************
-
- Code to interface the image code with CHD-CD core.
-
- Based on harddriv.c by Raphael Nabet 2003
-
-*********************************************************************/
-
-#include "emu.h"
-#include "chd_cd.h"
-
-#include "cdrom.h"
-#include "romload.h"
-
-// device type definition
-DEFINE_DEVICE_TYPE(CDROM, cdrom_image_device, "cdrom_image", "CD-ROM Image")
-
-//-------------------------------------------------
-// cdrom_image_device - constructor
-//-------------------------------------------------
-
-cdrom_image_device::cdrom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : cdrom_image_device(mconfig, CDROM, tag, owner, clock)
-{
-}
-
-cdrom_image_device::cdrom_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock)
- , device_image_interface(mconfig, *this)
- , m_cdrom_handle()
- , m_extension_list(nullptr)
- , m_interface(nullptr)
-{
-}
-//-------------------------------------------------
-// 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()
-{
- m_extension_list = "chd,cue,toc,nrg,gdi,iso,cdr";
-
- add_format("chdcd", "CD-ROM drive", m_extension_list, "");
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void cdrom_image_device::device_start()
-{
- // try to locate the CHD from a DISK_REGION
- chd_file *chd = machine().rom_load().get_disk_handle(owner()->tag());
- if (chd)
- m_cdrom_handle.reset(new cdrom_file(chd));
- else
- m_cdrom_handle.reset();
-}
-
-void cdrom_image_device::device_stop()
-{
- m_cdrom_handle.reset();
- if (m_self_chd.opened())
- m_self_chd.close();
-}
-
-std::pair<std::error_condition, std::string> cdrom_image_device::call_load()
-{
- std::error_condition err;
- chd_file *chd = nullptr;
-
- m_cdrom_handle.reset();
-
- if (!loaded_through_softlist()) {
- if (is_filetype("chd") && is_loaded()) {
- util::core_file::ptr proxy;
- err = util::core_file::open_proxy(image_core_file(), proxy);
- if (!err)
- err = m_self_chd.open(std::move(proxy)); // CDs are never writeable
- if (err)
- goto error;
- chd = &m_self_chd;
- }
- } else {
- chd = device().machine().rom_load().get_disk_handle(device().subtag("cdrom").c_str());
- }
-
- // open the CHD file
- if (chd)
- m_cdrom_handle.reset(new cdrom_file(chd));
- else
- m_cdrom_handle.reset(new cdrom_file(filename()));
-
- if (!m_cdrom_handle)
- goto error;
-
- return std::make_pair(std::error_condition(), std::string());
-
-error:
- if (chd && chd == &m_self_chd)
- m_self_chd.close();
- return std::make_pair(err ? err : image_error::UNSPECIFIED, std::string());
-}
-
-void cdrom_image_device::call_unload()
-{
- assert(m_cdrom_handle);
- m_cdrom_handle.reset();
- if (m_self_chd.opened())
- m_self_chd.close();
-}
diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp
index dac1c9a5c16..e9ac553f866 100644
--- a/src/devices/imagedev/harddriv.cpp
+++ b/src/devices/imagedev/harddriv.cpp
@@ -107,11 +107,11 @@ void harddisk_image_device::device_start()
m_chd = nullptr;
- // try to locate the CHD from a DISK_REGION
- chd_file *handle = machine().rom_load().get_disk_handle(tag());
- if (handle)
- m_hard_disk_handle.reset(new hard_disk_file(handle));
- else
+ if (has_preset_images()) {
+ set_image_tag();
+ set_user_loadable(false);
+ setup_current_preset_image();
+ } else
m_hard_disk_handle.reset();
}
@@ -166,6 +166,12 @@ std::pair<std::error_condition, std::string> harddisk_image_device::call_create(
return std::make_pair(internal_load_hd(), std::string());
}
+void harddisk_image_device::setup_current_preset_image()
+{
+ chd_file *chd = current_preset_image_chd();
+ m_hard_disk_handle.reset(new hard_disk_file(chd));
+}
+
void harddisk_image_device::call_unload()
{
// Check if there is an image_unload callback defined
@@ -227,6 +233,12 @@ static std::error_condition open_disk_diff(emu_options &options, const char *nam
std::error_condition harddisk_image_device::internal_load_hd()
{
+ if (has_preset_images())
+ {
+ setup_current_preset_image();
+ return std::error_condition();
+ }
+
std::error_condition err;
m_chd = nullptr;
uint8_t header[64];
@@ -325,3 +337,40 @@ std::error_condition harddisk_image_device::internal_load_hd()
else
return image_error::UNSPECIFIED;
}
+
+const hard_disk_file::info &harddisk_image_device::get_info() const
+{
+ return m_hard_disk_handle->get_info();
+}
+
+bool harddisk_image_device::read(uint32_t lbasector, void *buffer)
+{
+ return m_hard_disk_handle->read(lbasector, buffer);
+}
+
+bool harddisk_image_device::write(uint32_t lbasector, const void *buffer)
+{
+ return m_hard_disk_handle->write(lbasector, buffer);
+}
+
+
+bool harddisk_image_device::set_block_size(uint32_t blocksize)
+{
+ return m_hard_disk_handle->set_block_size(blocksize);
+}
+
+std::error_condition harddisk_image_device::get_inquiry_data(std::vector<uint8_t> &data) const
+{
+ return m_hard_disk_handle->get_inquiry_data(data);
+}
+
+std::error_condition harddisk_image_device::get_cis_data(std::vector<uint8_t> &data) const
+{
+ return m_hard_disk_handle->get_cis_data(data);
+}
+
+std::error_condition harddisk_image_device::get_disk_key_data(std::vector<uint8_t> &data) const
+{
+ return m_hard_disk_handle->get_disk_key_data(data);
+}
+
diff --git a/src/devices/imagedev/harddriv.h b/src/devices/imagedev/harddriv.h
index f9406e3eb51..5f51f70d828 100644
--- a/src/devices/imagedev/harddriv.h
+++ b/src/devices/imagedev/harddriv.h
@@ -74,8 +74,15 @@ public:
virtual const char *file_extensions() const noexcept override { return "chd,hd,hdv,2mg,hdi"; }
virtual const util::option_guide &create_option_guide() const override;
- // specific implementation
- hard_disk_file *get_hard_disk_file() { return m_hard_disk_handle.get(); }
+ const hard_disk_file::info &get_info() const;
+ bool read(uint32_t lbasector, void *buffer);
+ bool write(uint32_t lbasector, const void *buffer);
+
+ bool set_block_size(uint32_t blocksize);
+
+ std::error_condition get_inquiry_data(std::vector<uint8_t> &data) const;
+ std::error_condition get_cis_data(std::vector<uint8_t> &data) const;
+ std::error_condition get_disk_key_data(std::vector<uint8_t> &data) const;
protected:
harddisk_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -88,6 +95,7 @@ protected:
// device_image_interface implementation
virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+ void setup_current_preset_image();
std::error_condition internal_load_hd();
chd_file *m_chd;
diff --git a/src/devices/machine/akiko.cpp b/src/devices/machine/akiko.cpp
index 13ae686a972..1fc9699b69c 100644
--- a/src/devices/machine/akiko.cpp
+++ b/src/devices/machine/akiko.cpp
@@ -84,8 +84,7 @@ akiko_device::akiko_device(const machine_config &mconfig, const char *tag, devic
, m_cdrom_cmd_end(0)
, m_cdrom_cmd_resp(0)
, m_cdda(*this, "^cdda")
- , m_cddevice(*this, "^cdrom")
- , m_cdrom(nullptr)
+ , m_cdrom(*this, "^cdrom")
, m_cdrom_toc(nullptr)
, m_dma_timer(nullptr)
, m_frame_timer(nullptr)
@@ -153,18 +152,6 @@ void akiko_device::device_start()
void akiko_device::device_reset()
{
- if (m_cddevice.found())
- {
- // CD32 case
- m_cdrom = m_cddevice->get_cdrom_file();
- }
- else
- {
- // Arcade case
- chd_file *chd = machine().rom_load().get_disk_handle(":cdrom");
- m_cdrom = chd != nullptr ? new cdrom_file(chd) : nullptr;
- }
-
/* create the TOC table */
if ( m_cdrom != nullptr && m_cdrom->get_last_track() )
{
@@ -222,14 +209,6 @@ void akiko_device::device_reset()
void akiko_device::device_stop()
{
- if (!m_cddevice.found())
- {
- if( m_cdrom )
- {
- delete m_cdrom;
- m_cdrom = nullptr;
- }
- }
}
void akiko_device::nvram_write(uint32_t data)
@@ -460,7 +439,7 @@ TIMER_CALLBACK_MEMBER(akiko_device::dma_proc)
uint8_t buf[2352];
int index;
- if ( m_cdrom == nullptr )
+ if ( !m_cdrom->exists() )
return;
if ( (m_cdrom_dmacontrol & 0x04000000) == 0 )
@@ -589,7 +568,7 @@ TIMER_CALLBACK_MEMBER( akiko_device::cd_delayed_cmd )
resp[0] = 0x06;
- if ( m_cdrom == nullptr || m_cdrom_numtracks == 0 )
+ if ( !m_cdrom->exists() || m_cdrom_numtracks == 0 )
{
resp[1] = 0x80;
setup_response( 15, resp );
@@ -665,7 +644,7 @@ void akiko_device::update_cdrom()
m_cdrom_cmd_start = (m_cdrom_cmd_start + 13) & 0xff;
- if ( m_cdrom == nullptr || m_cdrom_numtracks == 0 )
+ if ( !m_cdrom->exists() || m_cdrom_numtracks == 0 )
{
resp[1] = 0x80;
setup_response( 2, resp );
@@ -775,7 +754,7 @@ void akiko_device::update_cdrom()
m_cdrom_cmd_start = (m_cdrom_cmd_start + 2) & 0xff;
- if ( m_cdrom == nullptr || m_cdrom_numtracks == 0 )
+ if ( !m_cdrom->exists() || m_cdrom_numtracks == 0 )
resp[1] = 0x80;
setup_response( 20, resp );
diff --git a/src/devices/machine/akiko.h b/src/devices/machine/akiko.h
index 8a0ffec8e76..0ceef8e118e 100644
--- a/src/devices/machine/akiko.h
+++ b/src/devices/machine/akiko.h
@@ -18,7 +18,7 @@
#pragma once
#include "cdrom.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "sound/cdda.h"
@@ -84,8 +84,7 @@ private:
uint8_t m_cdrom_cmd_resp;
required_device<cdda_device> m_cdda;
- optional_device<cdrom_image_device> m_cddevice;
- cdrom_file *m_cdrom;
+ optional_device<cdrom_image_device> m_cdrom;
std::unique_ptr<uint8_t[]> m_cdrom_toc;
diff --git a/src/devices/machine/ataflash.cpp b/src/devices/machine/ataflash.cpp
index 892031e2052..2cf2428db31 100644
--- a/src/devices/machine/ataflash.cpp
+++ b/src/devices/machine/ataflash.cpp
@@ -20,9 +20,9 @@ void ata_flash_pccard_device::device_reset()
{
ide_hdd_device::device_reset();
- if (m_disk)
+ if (m_image->exists())
{
- m_disk->get_cis_data(m_cis);
+ m_image->get_cis_data(m_cis);
}
m_cis.resize(512, 0xff);
@@ -135,7 +135,7 @@ void taito_pccard1_device::device_reset()
{
ata_flash_pccard_device::device_reset();
- if (m_disk && !m_disk->get_disk_key_data(m_key) && m_key.size() == 5)
+ if (m_image->exists() && !m_image->get_disk_key_data(m_key) && m_key.size() == 5)
{
m_locked = 0x1ff;
}
@@ -224,7 +224,7 @@ void taito_pccard2_device::device_reset()
{
ata_flash_pccard_device::device_reset();
- if (m_disk && !m_disk->get_disk_key_data(m_key) && m_key.size() == 5)
+ if (m_image->exists() && !m_image->get_disk_key_data(m_key) && m_key.size() == 5)
{
m_locked = true;
}
@@ -321,7 +321,7 @@ void taito_compact_flash_device::device_reset()
{
ata_flash_pccard_device::device_reset();
- if (m_disk && !m_disk->get_disk_key_data(m_key) && m_key.size() == 5)
+ if (m_image->exists() && !m_image->get_disk_key_data(m_key) && m_key.size() == 5)
{
m_locked = true;
}
diff --git a/src/devices/machine/corvushd.cpp b/src/devices/machine/corvushd.cpp
index b0c819b33f8..e6cdead1c10 100644
--- a/src/devices/machine/corvushd.cpp
+++ b/src/devices/machine/corvushd.cpp
@@ -419,7 +419,7 @@ bool corvus_hdc_device::parse_hdc_command(uint8_t data) {
// status: Command status
//
uint8_t corvus_hdc_device::corvus_write_sector(uint8_t drv, uint32_t sector, uint8_t *buffer, int len) {
- hard_disk_file
+ harddisk_image_device
*disk; // Structures for interface to CHD routines
uint8_t tbuffer[512]; // Buffer to hold an entire sector
uint16_t cylinder; // Cylinder this sector resides on
@@ -527,7 +527,7 @@ uint8_t corvus_hdc_device::corvus_write_logical_sector(dadr_t *dadr, uint8_t *bu
// status: Corvus status
//
uint8_t corvus_hdc_device::corvus_read_sector(uint8_t drv, uint32_t sector, uint8_t *buffer, int len) {
- hard_disk_file
+ harddisk_image_device
*disk; // Structures for interface to CHD routines
uint8_t tbuffer[512]; // Buffer to store full sector results in
uint16_t cylinder;
@@ -1090,15 +1090,15 @@ uint8_t corvus_hdc_device::corvus_format_drive(uint8_t *pattern, uint16_t len) {
//
// Corvus_HDC_File
//
-// Returns a hard_disk_file object for a given virtual hard drive device in the concept
+// Returns a harddisk_image_device object for a given virtual hard drive device in the concept
//
// Pass:
// drv: Corvus drive id (1..15)
//
// Returns:
-// hard_disk_file object
+// harddisk_image_device object
//
-hard_disk_file *corvus_hdc_device::corvus_hdc_file(int drv) {
+harddisk_image_device *corvus_hdc_device::corvus_hdc_file(int drv) {
static const char *const tags[] = {
"harddisk1", "harddisk2", "harddisk3", "harddisk4"
};
@@ -1119,15 +1119,14 @@ hard_disk_file *corvus_hdc_device::corvus_hdc_file(int drv) {
return nullptr;
// Pick up the Head/Cylinder/Sector info
- hard_disk_file *file = img->get_hard_disk_file();
- const auto &info = file->get_info();
+ const auto &info = img->get_info();
m_sectors_per_track = info.sectors;
m_tracks_per_cylinder = info.heads;
m_cylinders_per_drive = info.cylinders;
LOG("corvus_hdc_file: Attached to drive %u image: H:%d, C:%d, S:%d\n", drv, info.heads, info.cylinders, info.sectors);
- return file;
+ return img;
}
diff --git a/src/devices/machine/corvushd.h b/src/devices/machine/corvushd.h
index 074b761eb60..9f2d4910599 100644
--- a/src/devices/machine/corvushd.h
+++ b/src/devices/machine/corvushd.h
@@ -364,7 +364,7 @@ private:
uint8_t corvus_read_firmware_block(uint8_t head, uint8_t sector);
uint8_t corvus_write_firmware_block(uint8_t head, uint8_t sector, uint8_t *buffer);
uint8_t corvus_format_drive(uint8_t *pattern, uint16_t len);
- hard_disk_file *corvus_hdc_file(int id);
+ harddisk_image_device *corvus_hdc_file(int id);
void corvus_process_command_packet(bool local_invalid_command_flag);
corvus_cmd_t corvus_cmd[0xf5][0xc1]; // Command sizes and their return sizes
diff --git a/src/devices/machine/cr511b.h b/src/devices/machine/cr511b.h
index aae738145fd..5737d805aa8 100644
--- a/src/devices/machine/cr511b.h
+++ b/src/devices/machine/cr511b.h
@@ -35,7 +35,7 @@
#pragma once
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "sound/cdda.h"
class cr511b_device : public device_t
diff --git a/src/devices/machine/legscsi.cpp b/src/devices/machine/legscsi.cpp
index c379c797f73..58853716aad 100644
--- a/src/devices/machine/legscsi.cpp
+++ b/src/devices/machine/legscsi.cpp
@@ -116,13 +116,7 @@ uint8_t legacy_scsi_host_adapter::get_status()
scsihle_device *scsidev = get_device(m_selected);
if (scsidev != nullptr)
{
- void *image;
-
- scsidev->GetDevice(&image);
- if (image != nullptr)
- return 0x00;
-
- return 0x02;
+ return scsidev->exists() ? 0x00 : 0x02;
}
else
{
diff --git a/src/devices/machine/spg290_cdservo.cpp b/src/devices/machine/spg290_cdservo.cpp
index 7d03836a486..f55cdd300be 100644
--- a/src/devices/machine/spg290_cdservo.cpp
+++ b/src/devices/machine/spg290_cdservo.cpp
@@ -91,12 +91,8 @@ void spg290_cdservo_device::device_reset()
m_irq_cb(CLEAR_LINE);
// generate Q subchannel
- if (m_cdrom.found())
- {
- auto *cdrom = m_cdrom->get_cdrom_file();
- if (cdrom != nullptr)
- generate_qsub(cdrom);
- }
+ if (m_cdrom.found() && m_cdrom->exists())
+ generate_qsub();
change_status();
}
@@ -109,7 +105,7 @@ TIMER_CALLBACK_MEMBER(spg290_cdservo_device::cd_update)
if (BIT(m_control0, 15)) // CDDA
{
- m_cdrom->get_cdrom_file()->read_data(m_cur_sector - 150 - SPG290_LEADIN_LEN, cdbuf, cdrom_file::CD_TRACK_AUDIO);
+ m_cdrom->read_data(m_cur_sector - 150 - SPG290_LEADIN_LEN, cdbuf, cdrom_file::CD_TRACK_AUDIO);
for (int i=0; i<2352; i++)
{
@@ -120,10 +116,10 @@ TIMER_CALLBACK_MEMBER(spg290_cdservo_device::cd_update)
}
else
{
- m_cdrom->get_cdrom_file()->read_data(m_cur_sector - 150 - SPG290_LEADIN_LEN, cdbuf, cdrom_file::CD_TRACK_MODE1_RAW);
+ m_cdrom->read_data(m_cur_sector - 150 - SPG290_LEADIN_LEN, cdbuf, cdrom_file::CD_TRACK_MODE1_RAW);
// FIXME: this is required for load iso images
- if (m_cdrom->get_cdrom_file()->get_track_type(m_qsub[m_cur_sector * 12 + 1] - 1) == cdrom_file::CD_TRACK_MODE1)
+ if (m_cdrom->get_track_type(m_qsub[m_cur_sector * 12 + 1] - 1) == cdrom_file::CD_TRACK_MODE1)
{
int lba = (bcd_2_dec(cdbuf[12]) * 60 + bcd_2_dec(cdbuf[13])) * 75 + bcd_2_dec(cdbuf[14]);
uint32_t msf = cdrom_file::lba_to_msf(lba + 150);
@@ -332,7 +328,7 @@ void spg290_cdservo_device::servo_cmd_w()
void spg290_cdservo_device::change_status()
{
- if (m_speed == 0 || !m_cdrom.found() || !m_cdrom->get_cdrom_file())
+ if (m_speed == 0 || !m_cdrom.found() || !m_cdrom->exists())
m_cdtimer->adjust(attotime::never);
else
m_cdtimer->adjust(attotime::from_hz(75 * m_speed), 0, attotime::from_hz(75 * m_speed));
@@ -355,11 +351,11 @@ void spg290_cdservo_device::add_qsub(int sector, uint8_t addrctrl, uint8_t track
dest[11] = crc16;
}
-void spg290_cdservo_device::generate_qsub(cdrom_file *cdrom)
+void spg290_cdservo_device::generate_qsub()
{
- const cdrom_file::toc &toc = cdrom->get_toc();
- int numtracks = cdrom->get_last_track();
- uint32_t total_sectors = cdrom->get_track_start(numtracks - 1) + toc.tracks[numtracks - 1].frames + 150;
+ const cdrom_file::toc &toc = m_cdrom->get_toc();
+ int numtracks = m_cdrom->get_last_track();
+ uint32_t total_sectors = m_cdrom->get_track_start(numtracks - 1) + toc.tracks[numtracks - 1].frames + 150;
m_tot_sectors = SPG290_LEADIN_LEN + total_sectors + SPG290_LEADOUT_LEN;
m_qsub = std::make_unique<uint8_t[]>(m_tot_sectors * 12);
@@ -375,17 +371,17 @@ void spg290_cdservo_device::generate_qsub(cdrom_file *cdrom)
for(int track = 0; track < numtracks; track++)
{
- uint32_t track_start = cdrom->get_track_start(track) + 150;
+ uint32_t track_start = m_cdrom->get_track_start(track) + 150;
if (lba < SPG290_LEADIN_LEN)
- add_qsub(lba++, cdrom->get_adr_control(track), 0, dec_2_bcd(track + 1), cdrom_file::lba_to_msf(s + 3 + track), cdrom_file::lba_to_msf(track_start));
+ add_qsub(lba++, m_cdrom->get_adr_control(track), 0, dec_2_bcd(track + 1), cdrom_file::lba_to_msf(s + 3 + track), cdrom_file::lba_to_msf(track_start));
}
}
// data tracks
for(int track = 0; track < numtracks; track++)
{
- uint32_t control = cdrom->get_adr_control(track);
- uint32_t track_start = cdrom->get_track_start(track);
+ uint32_t control = m_cdrom->get_adr_control(track);
+ uint32_t track_start = m_cdrom->get_track_start(track);
// pregap
uint32_t pregap = toc.tracks[track].pregap;
diff --git a/src/devices/machine/spg290_cdservo.h b/src/devices/machine/spg290_cdservo.h
index aa1d8077407..2f44e96b353 100644
--- a/src/devices/machine/spg290_cdservo.h
+++ b/src/devices/machine/spg290_cdservo.h
@@ -7,7 +7,7 @@
#pragma once
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
class spg290_cdservo_device : public device_t
@@ -37,7 +37,7 @@ protected:
private:
void change_status();
void add_qsub(int sector, uint8_t addrctrl, uint8_t track, uint8_t index, uint32_t rel_msf, uint32_t abs_msf, uint16_t crc16=0);
- void generate_qsub(cdrom_file *cdrom);
+ void generate_qsub();
void servo_cmd_r();
void servo_cmd_w();
diff --git a/src/devices/machine/spi_sdcard.cpp b/src/devices/machine/spi_sdcard.cpp
index 9166cf8be64..625f1d823de 100644
--- a/src/devices/machine/spi_sdcard.cpp
+++ b/src/devices/machine/spi_sdcard.cpp
@@ -49,7 +49,6 @@ spi_sdcard_device::spi_sdcard_device(const machine_config &mconfig, device_type
write_miso(*this),
m_image(*this, "image"),
m_state(SD_STATE_IDLE),
- m_harddisk(nullptr),
m_ss(0), m_in_bit(0), m_clk_state(0),
m_in_latch(0), m_out_latch(0xff), m_cur_bit(0),
m_out_count(0), m_out_ptr(0), m_write_ptr(0), m_blksize(512), m_blknext(0),
@@ -95,7 +94,6 @@ void spi_sdcard_device::device_start()
void spi_sdcard_device::device_reset()
{
- m_harddisk = m_image->get_hard_disk_file();
}
void spi_sdcard_device::device_add_mconfig(machine_config &config)
@@ -164,7 +162,7 @@ void spi_sdcard_device::latch_in()
if (m_write_ptr == (m_blksize + 2))
{
LOGMASKED(LOG_GENERAL, "writing LBA %x, data %02x %02x %02x %02x\n", m_blknext, m_data[0], m_data[1], m_data[2], m_data[3]);
- if (m_harddisk->write(m_blknext, &m_data[0]))
+ if (m_image->write(m_blknext, &m_data[0]))
{
m_data[0] = DATA_RESPONSE_OK;
}
@@ -183,7 +181,7 @@ void spi_sdcard_device::latch_in()
if (m_state == SD_STATE_DATA_MULTI && m_out_count == 0)
{
m_data[0] = 0xfe; // data token
- m_harddisk->read(m_blknext++, &m_data[1]);
+ m_image->read(m_blknext++, &m_data[1]);
util::crc16_t crc16 = util::crc16_creator::simple(&m_data[1], m_blksize);
m_data[m_blksize + 1] = (crc16 >> 8) & 0xff;
m_data[m_blksize + 2] = (crc16 & 0xff);
@@ -235,7 +233,7 @@ void spi_sdcard_device::do_command()
switch (m_cmd[0] & 0x3f)
{
case 0: // CMD0 - GO_IDLE_STATE
- if (m_harddisk)
+ if (m_image->exists())
{
m_data[0] = 0x01;
send_data(1, SD_STATE_IDLE);
@@ -309,7 +307,7 @@ void spi_sdcard_device::do_command()
case 16: // CMD16 - SET_BLOCKLEN
m_blksize = (u16(m_cmd[3]) << 8) | u16(m_cmd[4]);
- if (m_harddisk && m_harddisk->set_block_size(m_blksize))
+ if (m_image->set_block_size(m_blksize))
{
m_data[0] = 0;
}
@@ -324,7 +322,7 @@ void spi_sdcard_device::do_command()
break;
case 17: // CMD17 - READ_SINGLE_BLOCK
- if (m_harddisk)
+ if (m_image->exists())
{
m_data[0] = 0x00; // initial R1 response
// data token occurs some time after the R1 response. A2SD expects at least 1
@@ -337,7 +335,7 @@ void spi_sdcard_device::do_command()
blk /= m_blksize;
}
LOGMASKED(LOG_GENERAL, "reading LBA %x\n", blk);
- m_harddisk->read(blk, &m_data[3]);
+ m_image->read(blk, &m_data[3]);
{
util::crc16_t crc16 = util::crc16_creator::simple(&m_data[3], m_blksize);
m_data[m_blksize + 3] = (crc16 >> 8) & 0xff;
@@ -353,7 +351,7 @@ void spi_sdcard_device::do_command()
break;
case 18: // CMD18 - CMD_READ_MULTIPLE_BLOCK
- if (m_harddisk)
+ if (m_image->exists())
{
m_data[0] = 0x00; // initial R1 response
// data token occurs some time after the R1 response. A2SD
diff --git a/src/devices/machine/spi_sdcard.h b/src/devices/machine/spi_sdcard.h
index 4aa81078685..0d8a7cbdc7f 100644
--- a/src/devices/machine/spi_sdcard.h
+++ b/src/devices/machine/spi_sdcard.h
@@ -16,7 +16,7 @@ public:
void spi_ss_w(int state) { m_ss = state; }
void spi_mosi_w(int state) { m_in_bit = state; }
- bool get_card_present() { return !(m_harddisk == nullptr); }
+ bool get_card_present() { return m_image->exists(); }
devcb_write_line write_miso;
@@ -70,7 +70,6 @@ private:
void shift_out();
u8 m_data[520], m_cmd[6];
- hard_disk_file *m_harddisk;
int m_ss, m_in_bit, m_clk_state;
u8 m_in_latch, m_out_latch, m_cur_bit;
diff --git a/src/devices/machine/stvcd.cpp b/src/devices/machine/stvcd.cpp
index 23720aa1277..6460273f053 100644
--- a/src/devices/machine/stvcd.cpp
+++ b/src/devices/machine/stvcd.cpp
@@ -478,12 +478,12 @@ int stvcd_device::get_track_index(uint32_t fad)
uint32_t rel_fad;
uint8_t track;
- if(cdrom->get_track_type(cdrom->get_track(fad)) != cdrom_file::CD_TRACK_AUDIO)
+ if(m_cdrom_image->get_track_type(m_cdrom_image->get_track(fad)) != cdrom_file::CD_TRACK_AUDIO)
return 1;
- track = cdrom->get_track( fad );
+ track = m_cdrom_image->get_track( fad );
- rel_fad = fad - cdrom->get_track_start( track );
+ rel_fad = fad - m_cdrom_image->get_track_start( track );
if(rel_fad < 150)
return 0;
@@ -491,14 +491,14 @@ int stvcd_device::get_track_index(uint32_t fad)
return 1;
}
-int stvcd_device::sega_cdrom_get_adr_control(cdrom_file *file, int track)
+int stvcd_device::sega_cdrom_get_adr_control(int track)
{
- return bitswap<8>(file->get_adr_control(cur_track),3,2,1,0,7,6,5,4);
+ return bitswap<8>(m_cdrom_image->get_adr_control(cur_track),3,2,1,0,7,6,5,4);
}
void stvcd_device::cr_standard_return(uint16_t cur_status)
{
- if (!cdrom)
+ if (!m_cdrom_image->exists())
{
cr1 = cur_status;
cr2 = 0;
@@ -508,17 +508,17 @@ void stvcd_device::cr_standard_return(uint16_t cur_status)
else if ((cd_stat & 0x0f00) == CD_STAT_SEEK)
{
/* During seek state, values returned are from the target position */
- uint8_t seek_track = cdrom->get_track(cd_fad_seek-150);
+ uint8_t seek_track = m_cdrom_image->get_track(cd_fad_seek-150);
cr1 = cur_status | (playtype << 7) | 0x00 | (cdda_repeat_count & 0xf);
- cr2 = (seek_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(cdrom, seek_track)<<8) | seek_track);
+ cr2 = (seek_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(seek_track)<<8) | seek_track);
cr3 = (get_track_index(cd_fad_seek)<<8) | (cd_fad_seek>>16); //index & 0xff00
cr4 = cd_fad_seek;
}
else
{
cr1 = cur_status | (playtype << 7) | 0x00 | (cdda_repeat_count & 0xf); //options << 4 | repeat & 0xf
- cr2 = (cur_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(cdrom, cur_track)<<8) | (cdrom->get_track(cd_curfad-150)+1));
+ cr2 = (cur_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(cur_track)<<8) | (m_cdrom_image->get_track(cd_curfad-150)+1));
cr3 = (get_track_index(cd_curfad)<<8) | (cd_curfad>>16); //index & 0xff00
cr4 = cd_curfad;
}
@@ -768,7 +768,7 @@ void stvcd_device::cmd_play_disc()
cd_curfad = start_pos & 0xfffff;
logerror("fad mode\n");
- cur_track = cdrom->get_track(cd_curfad-150);
+ cur_track = m_cdrom_image->get_track(cd_curfad-150);
}
else
{
@@ -776,7 +776,7 @@ void stvcd_device::cmd_play_disc()
if(((start_pos)>>8) != 0)
{
cur_track = (start_pos)>>8;
- cd_fad_seek = cdrom->get_track_start(cur_track-1);
+ cd_fad_seek = m_cdrom_image->get_track_start(cur_track-1);
cd_stat = CD_STAT_SEEK;
m_cdda->pause_audio(0);
}
@@ -802,7 +802,7 @@ void stvcd_device::cmd_play_disc()
uint8_t end_track;
end_track = (end_pos)>>8;
- fadstoplay = cdrom->get_track_start(end_track) - cd_fad_seek;
+ fadstoplay = m_cdrom_image->get_track_start(end_track) - cd_fad_seek;
}
}
else // play until the end of the disc
@@ -818,9 +818,9 @@ void stvcd_device::cmd_play_disc()
else
{
if(end_pos == 0)
- fadstoplay = (cdrom->get_track_start(0xaa)) - cd_curfad;
+ fadstoplay = (m_cdrom_image->get_track_start(0xaa)) - cd_curfad;
else
- fadstoplay = (cdrom->get_track_start((end_pos & 0xff00) >> 8)) - cd_curfad;
+ fadstoplay = (m_cdrom_image->get_track_start((end_pos & 0xff00) >> 8)) - cd_curfad;
}
logerror("track mode %08x %08x\n",cd_curfad,fadstoplay);
}
@@ -835,8 +835,8 @@ void stvcd_device::cmd_play_disc()
// be countless possible combinations ...
if(fadstoplay == 0)
{
- cd_curfad = cdrom->get_track_start(cur_track-1);
- fadstoplay = cdrom->get_track_start(cur_track) - cd_curfad;
+ cd_curfad = m_cdrom_image->get_track_start(cur_track-1);
+ fadstoplay = m_cdrom_image->get_track_start(cur_track) - cd_curfad;
}
logerror("track resume %08x %08x\n",cd_curfad,fadstoplay);
}
@@ -852,7 +852,7 @@ void stvcd_device::cmd_play_disc()
playtype = 0;
// cdda
- if(cdrom->get_track_type(cdrom->get_track(cd_curfad)) == cdrom_file::CD_TRACK_AUDIO)
+ if(m_cdrom_image->get_track_type(m_cdrom_image->get_track(cd_curfad)) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->pause_audio(0);
//m_cdda->start_audio(cd_curfad, fadstoplay);
@@ -899,7 +899,7 @@ void stvcd_device::cmd_seek_disc()
{
cd_stat = CD_STAT_PAUSE;
cur_track = cr2>>8;
- cd_curfad = cdrom->get_track_start(cur_track-1);
+ cd_curfad = m_cdrom_image->get_track_start(cur_track-1);
m_cdda->pause_audio(1);
// (index is cr2 low byte)
}
@@ -960,12 +960,12 @@ void stvcd_device::cmd_get_subcode_q_rw_channel()
*/
msf_abs = cdrom_file::lba_to_msf_alt( cd_curfad - 150 );
- track = cdrom->get_track( cd_curfad );
- msf_rel = cdrom_file::lba_to_msf_alt( cd_curfad - 150 - cdrom->get_track_start( track ) );
+ track = m_cdrom_image->get_track( cd_curfad );
+ msf_rel = cdrom_file::lba_to_msf_alt( cd_curfad - 150 - m_cdrom_image->get_track_start( track ) );
xfertype = XFERTYPE_SUBQ;
xfercount = 0;
- subqbuf[0] = 0x01 | ((cdrom->get_track_type(cdrom->get_track(track+1)) == cdrom_file::CD_TRACK_AUDIO) ? 0x00 : 0x40);
+ subqbuf[0] = 0x01 | ((m_cdrom_image->get_track_type(m_cdrom_image->get_track(track+1)) == cdrom_file::CD_TRACK_AUDIO) ? 0x00 : 0x40);
subqbuf[1] = dec_2_bcd(track+1);
subqbuf[2] = dec_2_bcd(get_track_index(cd_curfad));
subqbuf[3] = dec_2_bcd((msf_rel >> 16) & 0xff);
@@ -1919,7 +1919,7 @@ void stvcd_device::cd_exec_command()
1)
logerror("Command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat);
- if(!cdrom && ((cr1 >> 8) & 0xff) != 0x00) {
+ if(!m_cdrom_image->exists() && ((cr1 >> 8) & 0xff) != 0x00) {
hirqreg |= (CMOK);
return;
}
@@ -2012,7 +2012,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( stvcd_device::stv_sh1_sim )
TIMER_DEVICE_CALLBACK_MEMBER( stvcd_device::stv_sector_cb )
{
- if(!cdrom)
+ if(!m_cdrom_image->exists())
return;
//m_sector_timer->reset();
@@ -2021,7 +2021,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( stvcd_device::stv_sector_cb )
cd_playdata();
- if(cdrom->get_track_type(cdrom->get_track(cd_curfad)) == cdrom_file::CD_TRACK_AUDIO)
+ if(m_cdrom_image->get_track_type(m_cdrom_image->get_track(cd_curfad)) == cdrom_file::CD_TRACK_AUDIO)
m_sector_timer->adjust(attotime::from_hz(75)); // 75 sectors / second = 150kBytes/second (cdda track ignores cd_speed setting)
else
m_sector_timer->adjust(attotime::from_hz(75*cd_speed)); // 75 / 150 sectors / second = 150 / 300kBytes/second
@@ -2088,11 +2088,9 @@ void stvcd_device::device_reset()
}
// open device
- cdrom = m_cdrom_image->get_cdrom_file();
+ m_cdda->set_cdrom(m_cdrom_image);
- m_cdda->set_cdrom(cdrom);
-
- if (cdrom)
+ if (m_cdrom_image->exists())
{
LOG("Opened CD-ROM successfully, reading root directory\n");
read_new_dir(0xffffff); // read root directory
@@ -2383,11 +2381,6 @@ void stvcd_device::make_dir_current(uint32_t fad)
void stvcd_device::device_stop()
{
curdir.clear();
-
- if (cdrom)
- {
- cdrom = (cdrom_file *)nullptr;
- }
}
void stvcd_device::cd_readTOC(void)
@@ -2397,9 +2390,9 @@ void stvcd_device::cd_readTOC(void)
xfertype = XFERTYPE_TOC;
xfercount = 0;
- if (cdrom)
+ if (m_cdrom_image->exists())
{
- ntrks = cdrom->get_last_track();
+ ntrks = m_cdrom_image->get_last_track();
}
else
{
@@ -2420,20 +2413,20 @@ void stvcd_device::cd_readTOC(void)
for (i = 0; i < ntrks; i++)
{
- if (cdrom)
+ if (m_cdrom_image->exists())
{
//tocbuf[tocptr] = sega_cdrom_get_adr_control(cdrom, i);
//HACK: ddsom does not enter ingame with the line above!
- tocbuf[tocptr] = cdrom->get_adr_control(i)<<4 | 0x01;
+ tocbuf[tocptr] = m_cdrom_image->get_adr_control(i)<<4 | 0x01;
}
else
{
tocbuf[tocptr] = 0xff;
}
- if (cdrom)
+ if (m_cdrom_image->exists())
{
- fad = cdrom->get_track_start(i) + 150;
+ fad = m_cdrom_image->get_track_start(i) + 150;
tocbuf[tocptr+1] = (fad>>16)&0xff;
tocbuf[tocptr+2] = (fad>>8)&0xff;
@@ -2474,7 +2467,7 @@ void stvcd_device::cd_readTOC(void)
tocbuf[tocptr+7] = 0;
// get total disc length (start of lead-out)
- fad = cdrom->get_track_start(0xaa) + 150;
+ fad = m_cdrom_image->get_track_start(0xaa) + 150;
tocbuf[tocptr+8] = tocbuf[0];
tocbuf[tocptr+9] = (fad>>16)&0xff;
@@ -2645,20 +2638,20 @@ stvcd_device::partitionT *stvcd_device::cd_read_filtered_sector(int32_t fad, uin
if ((cddevice != nullptr) && (!buffull))
{
// find out the track's type
- trktype = cdrom->get_track_type(cdrom->get_track(fad-150));
+ trktype = m_cdrom_image->get_track_type(m_cdrom_image->get_track(fad-150));
// now get a raw 2352 byte sector - if it's mode 1, get mode1_raw
if ((trktype == cdrom_file::CD_TRACK_MODE1) || (trktype == cdrom_file::CD_TRACK_MODE1_RAW))
{
- cdrom->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_MODE1_RAW);
+ m_cdrom_image->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_MODE1_RAW);
}
else if (trktype != cdrom_file::CD_TRACK_AUDIO) // if not audio it must be mode 2 so get mode2_raw
{
- cdrom->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_MODE2_RAW);
+ m_cdrom_image->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_MODE2_RAW);
}
else
{
- cdrom->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_AUDIO);
+ m_cdrom_image->read_data(fad-150, curblock.data, cdrom_file::CD_TRACK_AUDIO);
}
curblock.size = sectlenin;
@@ -2725,11 +2718,11 @@ void stvcd_device::cd_playdata()
{
logerror("STVCD: Reading FAD %d\n", cd_curfad);
- if (cdrom)
+ if (m_cdrom_image->exists())
{
uint8_t p_ok;
- if(cdrom->get_track_type(cdrom->get_track(cd_curfad)) != cdrom_file::CD_TRACK_AUDIO)
+ if(m_cdrom_image->get_track_type(m_cdrom_image->get_track(cd_curfad)) != cdrom_file::CD_TRACK_AUDIO)
{
cd_read_filtered_sector(cd_curfad,&p_ok);
m_cdda->stop_audio(); //stop any pending CD-DA
@@ -2767,8 +2760,8 @@ void stvcd_device::cd_playdata()
if(cdda_repeat_count < 0xe)
cdda_repeat_count++;
- cd_curfad = cdrom->get_track_start(cur_track-1) + 150;
- fadstoplay = cdrom->get_track_start(cur_track) - cd_curfad;
+ cd_curfad = m_cdrom_image->get_track_start(cur_track-1) + 150;
+ fadstoplay = m_cdrom_image->get_track_start(cur_track) - cd_curfad;
}
}
}
@@ -2780,9 +2773,9 @@ void stvcd_device::cd_playdata()
// loads a single sector off the CD, anywhere from FAD 150 on up
void stvcd_device::cd_readblock(uint32_t fad, uint8_t *dat)
{
- if (cdrom)
+ if (m_cdrom_image->exists())
{
- cdrom->read_data(fad-150, dat, cdrom_file::CD_TRACK_MODE1);
+ m_cdrom_image->read_data(fad-150, dat, cdrom_file::CD_TRACK_MODE1);
}
}
@@ -2794,7 +2787,6 @@ void stvcd_device::set_tray_open()
hirqreg |= DCHG;
cd_stat = CD_STAT_OPEN;
- cdrom = (cdrom_file *)nullptr;
tray_is_closed = 0;
popmessage("Tray Open");
@@ -2807,11 +2799,9 @@ void stvcd_device::set_tray_close()
return;
hirqreg |= DCHG;
- cdrom = m_cdrom_image->get_cdrom_file();
-
- m_cdda->set_cdrom(cdrom);
+ m_cdda->set_cdrom(m_cdrom_image);
- if (cdrom)
+ if (m_cdrom_image->exists())
{
LOG("Opened CD-ROM successfully, reading root directory\n");
//read_new_dir(0xffffff); // read root directory
diff --git a/src/devices/machine/stvcd.h b/src/devices/machine/stvcd.h
index 78ad1392c24..98859d9356f 100644
--- a/src/devices/machine/stvcd.h
+++ b/src/devices/machine/stvcd.h
@@ -7,7 +7,7 @@
#pragma once
#include "cdrom.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/timer.h"
#include "sound/cdda.h"
@@ -119,7 +119,7 @@ private:
};
int get_track_index(uint32_t fad);
- int sega_cdrom_get_adr_control(cdrom_file *file, int track);
+ int sega_cdrom_get_adr_control(int track);
void cr_standard_return(uint16_t cur_status);
void mpeg_standard_return(uint16_t cur_status);
void cd_free_block(blockT *blktofree);
@@ -139,8 +139,6 @@ private:
partitionT *cd_filterdata(filterT *flt, int trktype, uint8_t *p_ok);
partitionT *cd_read_filtered_sector(int32_t fad, uint8_t *p_ok);
- cdrom_file *cdrom;// = (cdrom_file *)nullptr;
-
// local variables
partitionT partitions[MAX_FILTERS];
partitionT *transpart;
diff --git a/src/devices/machine/t10mmc.cpp b/src/devices/machine/t10mmc.cpp
index 0d2cee2d0ad..d5003a64aea 100644
--- a/src/devices/machine/t10mmc.cpp
+++ b/src/devices/machine/t10mmc.cpp
@@ -30,8 +30,7 @@ void t10mmc::t10_reset()
{
t10spc::t10_reset();
- SetDevice( m_image->get_cdrom_file() );
- if( !m_cdrom )
+ if( !m_image->exists() )
{
m_device->logerror( "T10MMC %s: no CD found!\n", m_image->tag() );
}
@@ -72,7 +71,7 @@ t10mmc::toc_format_t t10mmc::toc_format()
int t10mmc::toc_tracks()
{
int start_track = command[6];
- int end_track = m_cdrom->get_last_track();
+ int end_track = m_image->get_last_track();
if (start_track == 0)
{
@@ -157,7 +156,7 @@ void t10mmc::ExecCommand()
break;
case T10SBC_CMD_READ_10:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -188,7 +187,7 @@ void t10mmc::ExecCommand()
break;
case T10MMC_CMD_READ_SUB_CHANNEL:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -204,7 +203,7 @@ void t10mmc::ExecCommand()
case T10MMC_CMD_READ_TOC_PMA_ATIP:
{
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -245,7 +244,7 @@ void t10mmc::ExecCommand()
break;
}
case T10MMC_CMD_PLAY_AUDIO_10:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -261,8 +260,8 @@ void t10mmc::ExecCommand()
// A request for LBA 0 will return something different depending on the type of media being played.
// For data and mixed media, LBA 0 is assigned to MSF 00:02:00 (= LBA 150).
// For audio media, LBA 0 is assigned to the actual starting address of track 1.
- if (m_cdrom->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
- m_lba = m_cdrom->get_track_start(0);
+ if (m_image->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
+ m_lba = m_image->get_track_start(0);
else
m_lba = 150;
}
@@ -273,9 +272,9 @@ void t10mmc::ExecCommand()
//m_device->logerror("T10MMC: PLAY AUDIO(10) at LBA %x for %x blocks\n", m_lba, m_blocks);
- trk = m_cdrom->get_track(m_lba);
+ trk = m_image->get_track(m_lba);
- if (m_cdrom->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
+ if (m_image->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->start_audio(m_lba, m_blocks);
m_audio_sense = SCSI_SENSE_ASC_ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS;
@@ -292,7 +291,7 @@ void t10mmc::ExecCommand()
break;
case T10MMC_CMD_PLAY_AUDIO_MSF:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -305,8 +304,8 @@ void t10mmc::ExecCommand()
if (m_lba == 0)
{
- if (m_cdrom->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
- m_lba = m_cdrom->get_track_start(0);
+ if (m_image->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
+ m_lba = m_image->get_track_start(0);
else
m_lba = 150;
}
@@ -318,9 +317,9 @@ void t10mmc::ExecCommand()
//m_device->logerror("T10MMC: PLAY AUDIO MSF at LBA %x for %x blocks (MSF %i:%i:%i - %i:%i:%i)\n",
//m_lba, m_blocks, command[3], command[4], command[5], command[6], command[7], command[8]);
- trk = m_cdrom->get_track(m_lba);
+ trk = m_image->get_track(m_lba);
- if (m_cdrom->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
+ if (m_image->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->start_audio(m_lba, m_blocks);
m_audio_sense = SCSI_SENSE_ASC_ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS;
@@ -337,7 +336,7 @@ void t10mmc::ExecCommand()
break;
case T10MMC_CMD_PLAY_AUDIO_TRACK_INDEX:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -362,7 +361,7 @@ void t10mmc::ExecCommand()
// be careful: tracks here are zero-based, but the SCSI command
// uses the real CD track number which is 1-based!
//m_device->logerror("T10MMC: PLAY AUDIO T/I: strk %d idx %d etrk %d idx %d frames %d\n", command[4], command[5], command[7], command[8], m_blocks);
- int end_track = m_cdrom->get_last_track();
+ int end_track = m_image->get_last_track();
if (end_track > command[7])
end_track = command[7];
@@ -377,11 +376,11 @@ void t10mmc::ExecCommand()
end_track = command[4];
}
- m_lba = m_cdrom->get_track_start(command[4] - 1);
- m_blocks = m_cdrom->get_track_start(end_track) - m_lba;
- trk = m_cdrom->get_track(m_lba);
+ m_lba = m_image->get_track_start(command[4] - 1);
+ m_blocks = m_image->get_track_start(end_track) - m_lba;
+ trk = m_image->get_track(m_lba);
- if (m_cdrom->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
+ if (m_image->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->start_audio(m_lba, m_blocks);
m_audio_sense = SCSI_SENSE_ASC_ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS;
@@ -402,7 +401,7 @@ void t10mmc::ExecCommand()
break;
case T10MMC_CMD_PAUSE_RESUME:
- if (m_cdrom)
+ if (m_image)
{
m_cdda->pause_audio((command[8] & 0x01) ^ 0x01);
}
@@ -436,7 +435,7 @@ void t10mmc::ExecCommand()
break;
case T10MMC_CMD_PLAY_AUDIO_12:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -449,8 +448,8 @@ void t10mmc::ExecCommand()
if (m_lba == 0)
{
- if (m_cdrom->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
- m_lba = m_cdrom->get_track_start(0);
+ if (m_image->get_track_type(0) == cdrom_file::CD_TRACK_AUDIO)
+ m_lba = m_image->get_track_start(0);
else
m_lba = 150;
}
@@ -461,9 +460,9 @@ void t10mmc::ExecCommand()
//m_device->logerror("T10MMC: PLAY AUDIO(12) at LBA %x for %x blocks\n", m_lba, m_blocks);
- trk = m_cdrom->get_track(m_lba);
+ trk = m_image->get_track(m_lba);
- if (m_cdrom->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
+ if (m_image->get_track_type(trk) == cdrom_file::CD_TRACK_AUDIO)
{
m_cdda->start_audio(m_lba, m_blocks);
m_audio_sense = SCSI_SENSE_ASC_ASCQ_AUDIO_PLAY_OPERATION_IN_PROGRESS;
@@ -480,7 +479,7 @@ void t10mmc::ExecCommand()
break;
case T10SBC_CMD_READ_12:
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -519,7 +518,7 @@ void t10mmc::ExecCommand()
case T10MMC_CMD_READ_CD:
{
- if (m_cdrom == nullptr)
+ if (!m_image->exists())
{
m_phase = SCSI_PHASE_STATUS;
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
@@ -534,8 +533,8 @@ void t10mmc::ExecCommand()
// m_device->logerror("T10MMC: READ CD start_lba[%08x] block_len[%06x] %02x %02x %02x %02x\n", m_lba, m_blocks, command[1], command[9], command[10], command[11]);
auto expected_sector_type = BIT(command[1], 2, 3);
- auto trk = m_cdrom->get_track(m_lba);
- auto track_type = m_cdrom->get_track_type(trk);
+ auto trk = m_image->get_track(m_lba);
+ auto track_type = m_image->get_track_type(trk);
if (expected_sector_type != 0)
{
m_device->logerror("T10MMC: READ CD requested a sector type of %d which is unhandled\n", expected_sector_type);
@@ -616,7 +615,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
case T10SBC_CMD_READ_CAPACITY:
m_device->logerror("T10MMC: READ CAPACITY\n");
- temp = m_cdrom->get_track_start(0xaa);
+ temp = m_image->get_track_start(0xaa);
temp--; // return the last used block on the disc
data[0] = (temp>>24) & 0xff;
@@ -633,11 +632,11 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
case T10SBC_CMD_READ_12:
case T10MMC_CMD_READ_CD: // TODO: Will need its own logic once more support is implemented
//m_device->logerror("T10MMC: read %x dataLength lba=%x\n", dataLength, m_lba);
- if ((m_cdrom) && (m_blocks))
+ if ((m_image) && (m_blocks))
{
while (dataLength > 0)
{
- if (!m_cdrom->read_data(m_lba, tmp_buffer, cdrom_file::CD_TRACK_MODE1))
+ if (!m_image->read_data(m_lba, tmp_buffer, cdrom_file::CD_TRACK_MODE1))
{
m_device->logerror("T10MMC: CD read error! (%08x)\n", m_lba);
return;
@@ -668,7 +667,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
{
case 1: // return current position
{
- if (!m_cdrom)
+ if (!m_image)
{
return;
}
@@ -713,7 +712,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
data[3] = 12; // data length
data[4] = 0x01; // sub-channel format code
data[5] = 0x10 | (audio_active ? 0 : 4);
- data[6] = m_cdrom->get_track(m_last_lba) + 1; // track
+ data[6] = m_image->get_track(m_last_lba) + 1; // track
data[7] = 0; // index
uint32_t frame = m_last_lba;
@@ -728,7 +727,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
data[10] = (frame>>8)&0xff;
data[11] = frame&0xff;
- frame = m_last_lba - m_cdrom->get_track_start(data[6] - 1);
+ frame = m_last_lba - m_image->get_track_start(data[6] - 1);
if (msf)
{
@@ -776,7 +775,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
data[dptr++] = (len>>8) & 0xff;
data[dptr++] = (len & 0xff);
data[dptr++] = 1;
- data[dptr++] = m_cdrom->get_last_track();
+ data[dptr++] = m_image->get_last_track();
int first_track = command[6];
if (first_track == 0)
@@ -800,11 +799,11 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
}
data[dptr++] = 0;
- data[dptr++] = m_cdrom->get_adr_control(cdrom_track);
+ data[dptr++] = m_image->get_adr_control(cdrom_track);
data[dptr++] = track;
data[dptr++] = 0;
- uint32_t tstart = m_cdrom->get_track_start(cdrom_track);
+ uint32_t tstart = m_image->get_track_start(cdrom_track);
if (msf)
{
@@ -830,11 +829,11 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
data[dptr++] = 1;
data[dptr++] = 0;
- data[dptr++] = m_cdrom->get_adr_control(0);
+ data[dptr++] = m_image->get_adr_control(0);
data[dptr++] = 1;
data[dptr++] = 0;
- uint32_t tstart = m_cdrom->get_track_start(0);
+ uint32_t tstart = m_image->get_track_start(0);
if (msf)
{
@@ -969,14 +968,3 @@ void t10mmc::WriteData( uint8_t *data, int dataLength )
break;
}
}
-
-void t10mmc::GetDevice( void **_cdrom )
-{
- *(cdrom_file **)_cdrom = m_cdrom;
-}
-
-void t10mmc::SetDevice( void *_cdrom )
-{
- m_cdrom = (cdrom_file *)_cdrom;
- m_cdda->set_cdrom(m_cdrom);
-}
diff --git a/src/devices/machine/t10mmc.h b/src/devices/machine/t10mmc.h
index 82774b8afaa..30e572673c0 100644
--- a/src/devices/machine/t10mmc.h
+++ b/src/devices/machine/t10mmc.h
@@ -12,19 +12,17 @@ t10mmc.h
#pragma once
#include "t10spc.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "sound/cdda.h"
class t10mmc : public virtual t10spc
{
public:
t10mmc()
- : t10spc(), m_image(nullptr), m_cdda(nullptr), m_cdrom(nullptr), m_lba(0), m_blocks(0), m_last_lba(0), m_num_subblocks(0), m_cur_subblock(0), m_audio_sense(0), m_device(nullptr)
+ : t10spc(), m_image(nullptr), m_cdda(nullptr), m_lba(0), m_blocks(0), m_last_lba(0), m_num_subblocks(0), m_cur_subblock(0), m_audio_sense(0), m_device(nullptr)
{
}
- virtual void SetDevice( void *device ) override;
- virtual void GetDevice( void **device ) override;
virtual void ExecCommand() override;
virtual void WriteData( uint8_t *data, int dataLength ) override;
virtual void ReadData( uint8_t *data, int dataLength ) override;
@@ -59,7 +57,6 @@ protected:
cdrom_image_device *m_image;
cdda_device *m_cdda;
- cdrom_file *m_cdrom;
uint32_t m_lba;
uint32_t m_blocks;
diff --git a/src/devices/machine/t10sbc.cpp b/src/devices/machine/t10sbc.cpp
index 2fd42437a9a..5bfda878078 100644
--- a/src/devices/machine/t10sbc.cpp
+++ b/src/devices/machine/t10sbc.cpp
@@ -20,15 +20,14 @@ void t10sbc::t10_reset()
m_blocks = 0;
m_sector_bytes = 512;
- m_disk = m_image->get_hard_disk_file();
- if (!m_disk)
+ if (!m_image->exists())
{
m_device->logerror("T10SBC %s: no HD found!\n", m_image->owner()->tag());
}
else
{
// get hard disk sector size from CHD metadata
- m_sector_bytes = m_disk->get_info().sectorbytes;
+ m_sector_bytes = m_image->get_info().sectorbytes;
}
}
@@ -141,7 +140,7 @@ void t10sbc::ExecCommand()
void t10sbc::ReadData( uint8_t *data, int dataLength )
{
// if we're a drive without a disk, return all zeroes
- if (!m_disk)
+ if (!m_image->exists())
{
memset(data, 0, dataLength);
return;
@@ -272,12 +271,12 @@ void t10sbc::ReadData( uint8_t *data, int dataLength )
case T10SBC_CMD_READ_6:
case T10SBC_CMD_READ_10:
case T10SBC_CMD_READ_12:
- if ((m_disk) && (m_blocks))
+ if (m_image->exists() && (m_blocks))
{
m_device->logerror("T10SBC: Reading %d bytes from HD\n", dataLength);
while (dataLength > 0)
{
- if (!m_disk->read(m_lba, data))
+ if (!m_image->read(m_lba, data))
{
m_device->logerror("T10SBC: HD read error!\n");
}
@@ -302,7 +301,7 @@ void t10sbc::ReadData( uint8_t *data, int dataLength )
void t10sbc::WriteData( uint8_t *data, int dataLength )
{
- if (!m_disk)
+ if (!m_image->exists())
{
return;
}
@@ -314,12 +313,12 @@ void t10sbc::WriteData( uint8_t *data, int dataLength )
case T10SBC_CMD_WRITE_6:
case T10SBC_CMD_WRITE_10:
- if ((m_disk) && (m_blocks))
+ if (m_image->exists() && (m_blocks))
{
m_device->logerror("T10SBC: Writing %d bytes to HD\n", dataLength);
while (dataLength > 0)
{
- if (!m_disk->write(m_lba, data))
+ if (!m_image->write(m_lba, data))
{
m_device->logerror("T10SBC: HD write error!\n");
}
@@ -337,19 +336,9 @@ void t10sbc::WriteData( uint8_t *data, int dataLength )
}
}
-void t10sbc::GetDevice( void **_disk )
-{
- *(hard_disk_file **)_disk = m_disk;
-}
-
-void t10sbc::SetDevice( void *_disk )
-{
- m_disk = (hard_disk_file *)_disk;
-}
-
void t10sbc::GetFormatPage( format_page_t *page )
{
- const auto &info = m_disk->get_info();
+ const auto &info = m_image->get_info();
memset(page, 0, sizeof(format_page_t));
page->m_page_code = 0x03;
@@ -363,7 +352,7 @@ void t10sbc::GetFormatPage( format_page_t *page )
void t10sbc::GetGeometryPage( geometry_page_t *page )
{
- const auto &info = m_disk->get_info();
+ const auto &info = m_image->get_info();
memset(page, 0, sizeof(geometry_page_t));
page->m_page_code = 0x04;
@@ -378,7 +367,7 @@ void t10sbc::GetGeometryPage( geometry_page_t *page )
void t10sbc::ReadCapacity( uint8_t *data )
{
- const auto &info = m_disk->get_info();
+ const auto &info = m_image->get_info();
// get # of sectors
uint32_t temp = info.cylinders * info.heads * info.sectors - 1;
diff --git a/src/devices/machine/t10sbc.h b/src/devices/machine/t10sbc.h
index e9a3ce0cec9..b385f9664b5 100644
--- a/src/devices/machine/t10sbc.h
+++ b/src/devices/machine/t10sbc.h
@@ -18,12 +18,10 @@ class t10sbc : public virtual t10spc
{
public:
t10sbc()
- : t10spc(), m_image(nullptr), m_lba(0), m_blocks(0), m_disk(nullptr), m_device(nullptr)
+ : t10spc(), m_image(nullptr), m_lba(0), m_blocks(0), m_device(nullptr)
{
}
- virtual void SetDevice( void *device ) override;
- virtual void GetDevice( void **device ) override;
virtual void ExecCommand() override;
virtual void WriteData( uint8_t *data, int dataLength ) override;
virtual void ReadData( uint8_t *data, int dataLength ) override;
@@ -94,7 +92,6 @@ protected:
uint32_t m_lba;
uint32_t m_blocks;
- hard_disk_file *m_disk;
device_t *m_device;
};
diff --git a/src/devices/machine/t10spc.h b/src/devices/machine/t10spc.h
index 254ce87a4c0..e2073eff1b5 100644
--- a/src/devices/machine/t10spc.h
+++ b/src/devices/machine/t10spc.h
@@ -20,8 +20,6 @@ public:
}
virtual ~t10spc() { }
- virtual void SetDevice( void *device ) = 0;
- virtual void GetDevice( void **device ) = 0;
virtual void SetCommand( uint8_t *command, int commandLength );
virtual void ExecCommand();
diff --git a/src/devices/machine/wd1000.cpp b/src/devices/machine/wd1000.cpp
index ba4c6a5c1a9..3f57fef6725 100644
--- a/src/devices/machine/wd1000.cpp
+++ b/src/devices/machine/wd1000.cpp
@@ -238,7 +238,7 @@ void wd1000_device::end_command()
int wd1000_device::get_lbasector()
{
- hard_disk_file *file = m_drives[drive()]->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()];
const auto &info = file->get_info();
int lbasector;
@@ -573,7 +573,7 @@ void wd1000_device::cmd_restore()
// so it is not necessary to guard that case in these functions.
void wd1000_device::cmd_read_sector()
{
- hard_disk_file *file = m_drives[drive()]->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()];
uint8_t dma = BIT(m_command, 3);
file->read(get_lbasector(), m_buffer);
@@ -594,7 +594,7 @@ void wd1000_device::cmd_read_sector()
void wd1000_device::cmd_write_sector()
{
- hard_disk_file *file = m_drives[drive()]->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()];
if (m_buffer_index != sector_bytes())
{
@@ -608,7 +608,7 @@ void wd1000_device::cmd_write_sector()
void wd1000_device::cmd_format_sector()
{
- hard_disk_file *file = m_drives[drive()]->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()];
uint8_t buffer[512];
// The m_buffer appears to be loaded with an interleave table which is
diff --git a/src/devices/machine/wd1010.cpp b/src/devices/machine/wd1010.cpp
index cef0b5d9dd2..866d52921fe 100644
--- a/src/devices/machine/wd1010.cpp
+++ b/src/devices/machine/wd1010.cpp
@@ -305,7 +305,7 @@ void wd1010_device::end_command()
int wd1010_device::get_lbasector()
{
- hard_disk_file *file = m_drives[drive()].drive->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()].drive;
const auto &info = file->get_info();
int lbasector;
@@ -537,7 +537,7 @@ void wd1010_device::cmd_read_sector()
}
}
- hard_disk_file *file = m_drives[drive()].drive->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()].drive;
const auto &info = file->get_info();
// verify that we can read
@@ -605,7 +605,7 @@ void wd1010_device::cmd_write_sector()
return;
}
- hard_disk_file *file = m_drives[drive()].drive->get_hard_disk_file();
+ harddisk_image_device *file = m_drives[drive()].drive;
uint8_t buffer[512];
set_bdrq(0);
diff --git a/src/devices/sound/cdda.cpp b/src/devices/sound/cdda.cpp
index 92708f48321..7eeef3871e4 100644
--- a/src/devices/sound/cdda.cpp
+++ b/src/devices/sound/cdda.cpp
@@ -58,9 +58,9 @@ void cdda_device::device_start()
given CDDA stream
-------------------------------------------------*/
-void cdda_device::set_cdrom(void *file)
+void cdda_device::set_cdrom(cdrom_image_device *file)
{
- m_disc = (cdrom_file *)file;
+ m_disc = file;
}
diff --git a/src/devices/sound/cdda.h b/src/devices/sound/cdda.h
index ec9acf48605..516b0006336 100644
--- a/src/devices/sound/cdda.h
+++ b/src/devices/sound/cdda.h
@@ -5,7 +5,7 @@
#pragma once
-#include "cdrom.h"
+#include "imagedev/cdromimg.h"
class cdda_device : public device_t, public device_sound_interface
@@ -13,7 +13,7 @@ class cdda_device : public device_t, public device_sound_interface
public:
cdda_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 44'100);
- void set_cdrom(void *file);
+ void set_cdrom(cdrom_image_device *file);
void start_audio(uint32_t startlba, uint32_t numblocks);
void stop_audio();
@@ -37,7 +37,7 @@ protected:
private:
void get_audio_data(write_stream_view &bufL, write_stream_view &bufR);
- cdrom_file * m_disc;
+ cdrom_image_device * m_disc;
// internal state
sound_stream * m_stream;
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index b03b0cf564c..87dc2d8fda8 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -67,7 +67,10 @@ device_image_interface::device_image_interface(const machine_config &mconfig, de
: device_interface(device, "image")
, m_file()
, m_mame_file()
+ , m_default_region(-1)
+ , m_current_region(-1)
, m_software_part_ptr(nullptr)
+ , m_sequence_counter(0)
, m_readonly(false)
, m_created(false)
, m_create_format(0)
@@ -88,6 +91,17 @@ device_image_interface::~device_image_interface()
{
}
+//-------------------------------------------------
+// add_region - register a region that may
+// have a chd image
+//-------------------------------------------------
+void device_image_interface::add_region(std::string name, bool is_default)
+{
+ if (is_default)
+ m_default_region = m_possible_preset_regions.size();
+ m_possible_preset_regions.push_back(name);
+}
+
//-------------------------------------------------
// interface_config_complete - perform any
@@ -101,6 +115,128 @@ void device_image_interface::interface_config_complete()
update_names();
}
+//-------------------------------------------------
+// interface_pre_start - lookup the chds, if any
+//-------------------------------------------------
+
+void device_image_interface::interface_pre_start()
+{
+ if (!m_possible_preset_regions.empty())
+ {
+ for(const auto &r : m_possible_preset_regions)
+ m_preset_images.push_back(device().machine().rom_load().get_disk_handle(":" + r));
+ if (m_default_region != -1 && m_preset_images[m_default_region])
+ m_current_region = m_default_region;
+ else
+ {
+ for (m_current_region = 0; m_current_region != int(m_preset_images.size()) && !m_preset_images[m_current_region]; m_current_region++);
+ if (m_current_region == int(m_preset_images.size()))
+ fatalerror("%s: No configured region has an image\n", device().tag());
+ }
+ }
+ else
+ {
+ std::string tag = device().tag();
+ auto *chd = device().machine().rom_load().get_disk_handle(tag);
+ if (chd)
+ {
+ m_possible_preset_regions.push_back(tag);
+ m_preset_images.push_back(chd);
+ m_current_region = 0;
+ }
+ }
+}
+
+//-------------------------------------------------
+// has_preset_images - does the device have an
+// image to retrieve through current_image_*
+//-------------------------------------------------
+
+bool device_image_interface::has_preset_images() const
+{
+ return !m_possible_preset_regions.empty();
+}
+
+//-------------------------------------------------
+// has_preset_images - does the device have
+// multiple preset images with user selection
+//-------------------------------------------------
+
+bool device_image_interface::has_preset_images_selection() const
+{
+ int icount = 0;
+ for (const auto *f : m_preset_images)
+ if (f)
+ icount ++;
+ return icount > 1;
+}
+
+
+//-------------------------------------------------
+// preset_images_list -- generate the list of
+// available image names
+//-------------------------------------------------
+
+std::vector<std::string> device_image_interface::preset_images_list() const
+{
+ std::vector<std::string> result;
+ for (unsigned int i = 0; i != m_preset_images.size(); i++)
+ if (m_preset_images[i])
+ result.push_back(m_possible_preset_regions[i]);
+ return result;
+}
+
+//-------------------------------------------------
+// current_preset_image_id -- current image id,
+// recomputed to ignore non-present images.
+// returns -1 if not in preset mode
+//-------------------------------------------------
+
+int device_image_interface::current_preset_image_id() const
+{
+ if (m_current_region == -1)
+ return -1;
+ int id = 0;
+ for (int i = 0; i != m_current_region; i++)
+ if (m_preset_images[i])
+ id++;
+ return id;
+}
+
+//-------------------------------------------------
+// current_preset_image_chd -- return the chd of
+// the current active image, nullptr if non
+//-------------------------------------------------
+
+chd_file *device_image_interface::current_preset_image_chd() const
+{
+ if (m_current_region == -1)
+ return nullptr;
+ return m_preset_images[m_current_region];
+}
+
+//-------------------------------------------------
+// switch_preset_image -- change of preset image
+//-------------------------------------------------
+
+void device_image_interface::switch_preset_image(int id)
+{
+ for (unsigned int i = 0; i != m_preset_images.size(); i++)
+ if (m_preset_images[i])
+ {
+ if(!id)
+ {
+ call_unload();
+ m_current_region = i;
+ call_load();
+ break;
+ }
+ id--;
+ }
+
+ return;
+}
+
//-------------------------------------------------
// set_image_filename - specifies the filename of
@@ -130,6 +266,20 @@ void device_image_interface::set_image_filename(std::string_view filename)
m_filetype = core_filename_extract_extension(m_basename, true);
}
+//-------------------------------------------------
+// set_image_tag - specifies the filename of
+// an image as the device tag
+//-------------------------------------------------
+
+void device_image_interface::set_image_tag()
+{
+ m_image_name = device().owner()->tag();
+ m_working_directory = "";
+ m_basename = "";
+ m_basename_noext = "";
+ m_filetype = "";
+}
+
//-------------------------------------------------
// is_filetype - check if the filetype matches
@@ -665,6 +815,7 @@ std::pair<std::error_condition, std::string> device_image_interface::load_intern
// we are now loading
m_is_loading = true;
+ m_sequence_counter ++;
// record the filename
set_image_filename(path);
@@ -894,6 +1045,8 @@ void device_image_interface::clear() noexcept
m_software_list_name.clear();
m_hash.reset();
+
+ m_sequence_counter ++;
}
@@ -905,6 +1058,7 @@ void device_image_interface::unload()
{
if (is_loaded() || loaded_through_softlist())
{
+ m_sequence_counter ++;
call_unload();
}
clear();
diff --git a/src/emu/diimage.h b/src/emu/diimage.h
index 53a4e8394b7..dfd9c82cfc7 100644
--- a/src/emu/diimage.h
+++ b/src/emu/diimage.h
@@ -94,6 +94,15 @@ public:
virtual const char *image_type_name() const noexcept = 0;
virtual const char *image_brief_type_name() const noexcept = 0;
+ // Set block device image regions for arcade systems
+ void add_region(std::string name, bool is_default = false);
+ bool has_preset_images() const;
+ bool has_preset_images_selection() const;
+ std::vector<std::string> preset_images_list() const;
+ int current_preset_image_id() const;
+ void switch_preset_image(int id);
+ chd_file *current_preset_image_chd() const;
+
const image_device_format *device_get_indexed_creatable_format(int index) const noexcept { return (index < m_formatlist.size()) ? m_formatlist.at(index).get() : nullptr; }
const image_device_format *device_get_named_creatable_format(std::string_view format_name) const noexcept;
const util::option_guide &device_get_creation_option_guide() const { return create_option_guide(); }
@@ -110,6 +119,7 @@ public:
bool is_open() const noexcept { return bool(m_file); }
util::core_file &image_core_file() const noexcept { assert(is_open()); return *m_file; }
bool is_readonly() const noexcept { return m_readonly; }
+ u32 sequence_counter() const { return m_sequence_counter; } // Increments on media load/unload/etc
// image file I/O wrappers
// TODO: move away from using these and let implementations use the I/O interface directly
@@ -211,6 +221,7 @@ public:
protected:
// interface-level overrides
virtual void interface_config_complete() override;
+ virtual void interface_pre_start() override;
virtual const software_list_loader &get_software_list_loader() const;
virtual bool use_software_list_file_extension_for_filetype() const noexcept { return false; }
@@ -221,6 +232,7 @@ protected:
bool is_loaded() const noexcept { return m_file != nullptr; }
void set_image_filename(std::string_view filename);
+ void set_image_tag();
void check_for_file() const { if (!m_file) throw emu_fatalerror("%s(%s): Illegal operation on unmounted image", device().shortname(), device().tag()); }
@@ -243,6 +255,11 @@ private:
std::string m_basename_noext;
std::string m_filetype;
+ // preset images regions
+ std::vector<std::string> m_possible_preset_regions;
+ std::vector<chd_file *> m_preset_images;
+ int m_default_region, m_current_region;
+
// Software information
std::string m_full_software_name;
const software_part *m_software_part_ptr;
@@ -266,6 +283,7 @@ private:
std::string m_working_directory;
// flags
+ u32 m_sequence_counter;
bool m_readonly;
bool m_created;
diff --git a/src/frontend/mame/ui/filemngr.cpp b/src/frontend/mame/ui/filemngr.cpp
index 8487d619ecf..d30ed505e9b 100644
--- a/src/frontend/mame/ui/filemngr.cpp
+++ b/src/frontend/mame/ui/filemngr.cpp
@@ -17,6 +17,7 @@
#include "ui/filesel.h"
#include "ui/floppycntrl.h"
#include "ui/imgcntrl.h"
+#include "ui/prscntrl.h"
#include "ui/miscmenu.h"
#include "ui/ui.h"
@@ -136,6 +137,16 @@ void menu_file_manager::populate()
// if so, cycle through all its image interfaces
for (device_image_interface &scan : subiter)
{
+ if (scan.has_preset_images_selection())
+ {
+ if (devtags.insert(scan.device().tag()).second)
+ {
+ item_append(string_format(_("[root%1$s]"), scan.device().owner()->tag()), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
+ item_append(scan.image_type_name(), scan.preset_images_list()[scan.current_preset_image_id()], 0, (void *)&scan);
+ }
+ continue;
+ }
+
if (!scan.user_loadable())
continue;
@@ -198,11 +209,17 @@ bool menu_file_manager::handle(event const *ev)
if (selected_device && (IPT_UI_SELECT == ev->iptkey))
{
- floppy_image_device *floppy_device = dynamic_cast<floppy_image_device *>(selected_device);
- if (floppy_device)
- menu::stack_push<menu_control_floppy_image>(ui(), container(), *floppy_device);
+ if (selected_device->has_preset_images_selection())
+ menu::stack_push<menu_control_device_preset>(ui(), container(), *selected_device);
+
else
- menu::stack_push<menu_control_device_image>(ui(), container(), *selected_device);
+ {
+ floppy_image_device *floppy_device = dynamic_cast<floppy_image_device *>(selected_device);
+ if (floppy_device)
+ menu::stack_push<menu_control_floppy_image>(ui(), container(), *floppy_device);
+ else
+ menu::stack_push<menu_control_device_image>(ui(), container(), *selected_device);
+ }
// reset the existing menu
reset(reset_options::REMEMBER_POSITION);
diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp
index 1a19fd10c49..9515df727b6 100644
--- a/src/frontend/mame/ui/info.cpp
+++ b/src/frontend/mame/ui/info.cpp
@@ -659,6 +659,9 @@ bool menu_image_info::handle(event const *ev)
void menu_image_info::image_info(device_image_interface *image)
{
+ if (!image->user_loadable())
+ return;
+
if (image->exists())
{
// display device type and filename
diff --git a/src/frontend/mame/ui/prscntrl.cpp b/src/frontend/mame/ui/prscntrl.cpp
new file mode 100644
index 00000000000..aab071cfc0e
--- /dev/null
+++ b/src/frontend/mame/ui/prscntrl.cpp
@@ -0,0 +1,69 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
+/***************************************************************************
+
+ ui/prscntrl.cpp
+
+ MAME's clunky built-in preset selection in a fixed list
+
+***************************************************************************/
+
+#include "emu.h"
+
+#include "ui/prscntrl.h"
+#include "ui/ui.h"
+
+namespace ui {
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
+
+//-------------------------------------------------
+// ctor
+//-------------------------------------------------
+
+menu_control_device_preset::menu_control_device_preset(mame_ui_manager &mui, render_container &container, device_image_interface &image)
+ : menu(mui, container)
+ , m_image(image)
+{
+}
+
+
+//-------------------------------------------------
+// dtor
+//-------------------------------------------------
+
+menu_control_device_preset::~menu_control_device_preset()
+{
+}
+
+
+//-------------------------------------------------
+// populate
+//-------------------------------------------------
+
+void menu_control_device_preset::populate()
+{
+ auto presets = m_image.preset_images_list();
+ for(int i = 0; i != int(presets.size()); i++)
+ item_append(presets[i], 0, reinterpret_cast<void *>(i));
+ set_selection(reinterpret_cast<void *>(m_image.current_preset_image_id()));
+}
+
+
+//-------------------------------------------------
+// handle
+//-------------------------------------------------
+
+bool menu_control_device_preset::handle(event const *ev)
+{
+ if (ev && (ev->iptkey == IPT_UI_SELECT)) {
+ int id = reinterpret_cast<uintptr_t>(ev->itemref);
+ m_image.switch_preset_image(id);
+ stack_pop();
+ }
+ return false;
+}
+
+} // namespace ui
diff --git a/src/frontend/mame/ui/prscntrl.h b/src/frontend/mame/ui/prscntrl.h
new file mode 100644
index 00000000000..a89d6712efc
--- /dev/null
+++ b/src/frontend/mame/ui/prscntrl.h
@@ -0,0 +1,45 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
+/***************************************************************************
+
+ ui/prscntrl.h
+
+ MAME's clunky built-in preset selection in a fixed list
+
+***************************************************************************/
+
+#ifndef MAME_FRONTEND_UI_PRESETCNTRL_H
+#define MAME_FRONTEND_UI_PRESETCNTRL_H
+
+#pragma once
+
+#include "ui/filesel.h"
+#include "ui/menu.h"
+#include "ui/swlist.h"
+
+
+namespace ui {
+
+// ======================> menu_control_device_preset
+
+class menu_control_device_preset : public menu
+{
+public:
+ menu_control_device_preset(mame_ui_manager &mui, render_container &container, device_image_interface &image);
+ virtual ~menu_control_device_preset() override;
+
+protected:
+ // methods
+ virtual bool handle(event const *ev) override;
+
+private:
+ // instance variables
+ device_image_interface & m_image;
+
+ // methods
+ virtual void populate() override;
+};
+
+} // namespace ui
+
+#endif // MAME_FRONTEND_UI_PRESETCNTRL_H
diff --git a/src/lib/util/chd.cpp b/src/lib/util/chd.cpp
index 9ce36afcdb0..4130e4a9241 100644
--- a/src/lib/util/chd.cpp
+++ b/src/lib/util/chd.cpp
@@ -133,7 +133,7 @@ struct chd_file::metadata_hash
// a byte buffer
//-------------------------------------------------
-inline uint64_t chd_file::be_read(const uint8_t *base, int numbytes)
+inline uint64_t chd_file::be_read(const uint8_t *base, int numbytes) const
{
uint64_t result = 0;
while (numbytes--)
@@ -163,7 +163,7 @@ inline void chd_file::be_write(uint8_t *base, uint64_t value, int numbytes)
// stream in bigendian order
//-------------------------------------------------
-inline util::sha1_t chd_file::be_read_sha1(const uint8_t *base)
+inline util::sha1_t chd_file::be_read_sha1(const uint8_t *base)const
{
util::sha1_t result;
memcpy(&result.m_raw[0], base, sizeof(result.m_raw));
@@ -187,7 +187,7 @@ inline void chd_file::be_write_sha1(uint8_t *base, util::sha1_t value)
// offset; on failure throw an error
//-------------------------------------------------
-inline void chd_file::file_read(uint64_t offset, void *dest, uint32_t length)
+inline void chd_file::file_read(uint64_t offset, void *dest, uint32_t length) const
{
// no file = failure
if (!m_file)
@@ -2637,7 +2637,7 @@ void chd_file::hunk_copy_from_parent(uint32_t hunknum, uint64_t parentunit)
* @return true if it succeeds, false if it fails.
*/
-bool chd_file::metadata_find(chd_metadata_tag metatag, int32_t metaindex, metadata_entry &metaentry, bool resume)
+bool chd_file::metadata_find(chd_metadata_tag metatag, int32_t metaindex, metadata_entry &metaentry, bool resume) const
{
// start at the beginning unless we're resuming a previous search
if (!resume)
@@ -3302,3 +3302,37 @@ void chd_file_compressor::hashmap::add(uint64_t itemnum, util::crc16_t crc16, ut
entry->m_next = m_map[crc16];
m_map[crc16] = entry;
}
+
+bool chd_file::is_hd() const
+{
+ metadata_entry metaentry;
+ return metadata_find(HARD_DISK_METADATA_TAG, 0, metaentry);
+}
+
+bool chd_file::is_cd() const
+{
+ metadata_entry metaentry;
+ return metadata_find(CDROM_OLD_METADATA_TAG, 0, metaentry)
+ || metadata_find(CDROM_TRACK_METADATA_TAG, 0, metaentry)
+ || metadata_find(CDROM_TRACK_METADATA2_TAG, 0, metaentry);
+}
+
+bool chd_file::is_gd() const
+{
+ metadata_entry metaentry;
+ return metadata_find(GDROM_OLD_METADATA_TAG, 0, metaentry)
+ || metadata_find(GDROM_TRACK_METADATA_TAG, 0, metaentry);
+}
+
+bool chd_file::is_dvd() const
+{
+ metadata_entry metaentry;
+ return metadata_find(DVD_METADATA_TAG, 0, metaentry);
+}
+
+bool chd_file::is_av() const
+{
+ metadata_entry metaentry;
+ return metadata_find(AV_METADATA_TAG, 0, metaentry);
+}
+
diff --git a/src/lib/util/chd.h b/src/lib/util/chd.h
index 8d3e639438b..38f86c3f5e9 100644
--- a/src/lib/util/chd.h
+++ b/src/lib/util/chd.h
@@ -231,6 +231,9 @@ constexpr chd_metadata_tag GDROM_OLD_METADATA_TAG = CHD_MAKE_TAG('C','H','G','T'
constexpr chd_metadata_tag GDROM_TRACK_METADATA_TAG = CHD_MAKE_TAG('C', 'H', 'G', 'D');
extern const char *GDROM_TRACK_METADATA_FORMAT;
+// standard DVD metafata
+constexpr chd_metadata_tag DVD_METADATA_TAG = CHD_MAKE_TAG('D', 'V', 'D', ' ');
+
// standard A/V metadata
constexpr chd_metadata_tag AV_METADATA_TAG = CHD_MAKE_TAG('A','V','A','V');
extern const char *AV_METADATA_FORMAT;
@@ -352,16 +355,23 @@ public:
// codec interfaces
std::error_condition codec_configure(chd_codec_type codec, int param, void *config);
+ // typing
+ bool is_hd() const;
+ bool is_cd() const;
+ bool is_gd() const;
+ bool is_dvd() const;
+ bool is_av() const;
+
private:
struct metadata_entry;
struct metadata_hash;
// inline helpers
- uint64_t be_read(const uint8_t *base, int numbytes);
+ uint64_t be_read(const uint8_t *base, int numbytes) const;
void be_write(uint8_t *base, uint64_t value, int numbytes);
- util::sha1_t be_read_sha1(const uint8_t *base);
+ util::sha1_t be_read_sha1(const uint8_t *base) const;
void be_write_sha1(uint8_t *base, util::sha1_t value);
- void file_read(uint64_t offset, void *dest, uint32_t length);
+ void file_read(uint64_t offset, void *dest, uint32_t length) const;
void file_write(uint64_t offset, const void *source, uint32_t length);
uint64_t file_append(const void *source, uint32_t length, uint32_t alignment = 0);
uint8_t bits_for_value(uint64_t value);
@@ -380,7 +390,7 @@ private:
void hunk_write_compressed(uint32_t hunknum, int8_t compression, const uint8_t *compressed, uint32_t complength, util::crc16_t crc16);
void hunk_copy_from_self(uint32_t hunknum, uint32_t otherhunk);
void hunk_copy_from_parent(uint32_t hunknum, uint64_t parentunit);
- bool metadata_find(chd_metadata_tag metatag, int32_t metaindex, metadata_entry &metaentry, bool resume = false);
+ bool metadata_find(chd_metadata_tag metatag, int32_t metaindex, metadata_entry &metaentry, bool resume = false) const;
void metadata_set_previous_next(uint64_t prevoffset, uint64_t nextoffset);
void metadata_update_hash();
static int CLIB_DECL metadata_hash_compare(const void *elem1, const void *elem2);
diff --git a/src/lib/util/dvdrom.cpp b/src/lib/util/dvdrom.cpp
new file mode 100644
index 00000000000..36dc29e7215
--- /dev/null
+++ b/src/lib/util/dvdrom.cpp
@@ -0,0 +1,105 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles,R. Belmont
+/***************************************************************************
+
+ dvdrom.c
+
+ Generic MAME DVD-ROM utilties - build IDE and SCSI DVD-ROMs on top of this
+
+***************************************************************************/
+
+#include "dvdrom.h"
+
+#include "corestr.h"
+#include "osdfile.h"
+#include "strformat.h"
+
+#include <cassert>
+#include <cstdlib>
+
+
+
+/**
+ * @fn constructor
+ *
+ * @brief Open a dvdrom for a file.
+ *
+ * @param inputfile The inputfile.
+ */
+
+dvdrom_file::dvdrom_file(std::string_view inputfile)
+{
+ fhandle = nullptr;
+}
+
+/*-------------------------------------------------
+ constructor - "open" a DVD-ROM file from an
+ already-opened CHD file
+-------------------------------------------------*/
+
+/**
+ * @fn dvdrom_file *dvdrom_open(chd_file *chd)
+ *
+ * @brief Queries if a given dvdrom open.
+ *
+ * @param [in,out] chd If non-null, the chd.
+ *
+ * @return null if it fails, else a dvdrom_file*.
+ */
+
+dvdrom_file::dvdrom_file(chd_file *_chd)
+{
+ chd = _chd;
+
+ /* validate the CHD information */
+ if (chd->hunk_bytes() != 2048)
+ throw nullptr;
+ if (chd->unit_bytes() != 2048)
+ throw nullptr;
+
+ /* check it's actually a DVD-ROM */
+ if (!chd->is_dvd())
+ throw nullptr;
+
+ sector_count = chd->unit_count();
+}
+
+
+/*-------------------------------------------------
+ destructor - "close" a DVD-ROM file
+-------------------------------------------------*/
+
+dvdrom_file::~dvdrom_file()
+{
+}
+
+
+
+/***************************************************************************
+ CORE READ ACCESS
+***************************************************************************/
+
+
+/*-------------------------------------------------
+ dvdrom_read_data - read one 2048 bytes sector
+ from a DVD-ROM
+-------------------------------------------------*/
+
+/**
+ * @fn bool read_data(uint32_t lbasector, void *buffer)
+ *
+ * @brief Dvdrom read data.
+ *
+ * @param lbasector The lbasector.
+ * @param buffer The buffer.
+ *
+ * @return Success status.
+ */
+
+std::error_condition dvdrom_file::read_data(uint32_t lbasector, void *buffer)
+{
+ if (lbasector >= sector_count)
+ return std::error_condition(chd_file::error::HUNK_OUT_OF_RANGE);
+
+ return chd->read_hunk(lbasector, buffer);
+}
diff --git a/src/lib/util/dvdrom.h b/src/lib/util/dvdrom.h
new file mode 100644
index 00000000000..47bd6a26172
--- /dev/null
+++ b/src/lib/util/dvdrom.h
@@ -0,0 +1,41 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles,R. Belmont
+/***************************************************************************
+
+ dvdrom.h
+
+ Generic MAME dvd-rom implementation
+
+***************************************************************************/
+#ifndef MAME_LIB_UTIL_DVDROM_H
+#define MAME_LIB_UTIL_DVDROM_H
+
+#pragma once
+
+#include "chd.h"
+#include "ioprocs.h"
+#include "osdcore.h"
+
+class dvdrom_file {
+public:
+ dvdrom_file(chd_file *chd);
+ dvdrom_file(std::string_view inputfile);
+ ~dvdrom_file();
+
+ uint32_t get_sector_count() const { return sector_count; }
+
+ /* core read access */
+ std::error_condition read_data(uint32_t lbasector, void *buffer);
+
+private:
+ /** @brief The chd, when there's one */
+ chd_file * chd; /* CHD file */
+
+ /** @brief The raw file, when there isn't */
+ util::random_read_write * fhandle; // file if not a CHD
+
+ /** @brief Size of the dvd image in sectors */
+ uint32_t sector_count;
+};
+
+#endif // MAME_LIB_UTIL_DVDROM_H
diff --git a/src/mame/altos/altos8600.cpp b/src/mame/altos/altos8600.cpp
index 01a8ee2b0c0..47daba8ac3b 100644
--- a/src/mame/altos/altos8600.cpp
+++ b/src/mame/altos/altos8600.cpp
@@ -138,8 +138,8 @@ void altos8600_state::machine_start()
save_item(NAME(m_sechi));
save_item(NAME(m_sector));
- if(m_hdd->get_hard_disk_file())
- m_geom = &m_hdd->get_hard_disk_file()->get_info();
+ if(m_hdd->exists())
+ m_geom = &m_hdd->get_info();
else
m_geom = nullptr;
}
@@ -154,8 +154,8 @@ void altos8600_state::machine_reset()
m_nmistat = false;
m_cylhi = m_sechi = false;
m_stat = 0;
- if(m_hdd->get_hard_disk_file())
- m_geom = &m_hdd->get_hard_disk_file()->get_info();
+ if(m_hdd->exists())
+ m_geom = &m_hdd->get_info();
else
m_geom = nullptr;
}
@@ -201,7 +201,7 @@ u8 altos8600_state::read_sector()
secoff -= 3;
}
if(!secoff)
- m_hdd->get_hard_disk_file()->read(m_lba, m_sector);
+ m_hdd->read(m_lba, m_sector);
if(secoff >= 511)
{
m_dmac->drq1_w(CLEAR_LINE);
@@ -223,7 +223,7 @@ bool altos8600_state::write_sector(u8 data)
{
m_stat &= ~1;
m_stat |= 2;
- m_hdd->get_hard_disk_file()->write(m_lba, m_sector);
+ m_hdd->write(m_lba, m_sector);
m_dmac->drq1_w(CLEAR_LINE);
m_pic[1]->ir0_w(ASSERT_LINE);
return true;
diff --git a/src/mame/amiga/cubo.cpp b/src/mame/amiga/cubo.cpp
index f204393dff4..32f4fe7071c 100644
--- a/src/mame/amiga/cubo.cpp
+++ b/src/mame/amiga/cubo.cpp
@@ -318,7 +318,7 @@ routines :
#include "emu.h"
#include "amiga.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/microtch.h"
#include "speaker.h"
diff --git a/src/mame/apple/pippin.cpp b/src/mame/apple/pippin.cpp
index 558ffdfecfa..fc0e8497d49 100644
--- a/src/mame/apple/pippin.cpp
+++ b/src/mame/apple/pippin.cpp
@@ -48,7 +48,7 @@
#include "emu.h"
#include "cpu/powerpc/ppc.h"
#include "cpu/mn1880/mn1880.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/ram.h"
#include "sound/cdda.h"
diff --git a/src/mame/atari/jaguar.cpp b/src/mame/atari/jaguar.cpp
index 1ac48ee3f32..f2da69614f7 100644
--- a/src/mame/atari/jaguar.cpp
+++ b/src/mame/atari/jaguar.cpp
@@ -343,7 +343,7 @@ Notes:
#include "cpu/m68000/m68020.h"
#include "cpu/mips/mips1.h"
#include "cpu/jaguar/jaguar.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "imagedev/snapquik.h"
#include "machine/eepromser.h"
#include "machine/watchdog.h"
@@ -479,7 +479,6 @@ void jaguarcd_state::machine_reset()
m_shared_ram[0x4/4] = 0x00802000; /* hack until I understand */
- m_cd_file = m_cdrom->get_cdrom_file();
m_butch_cmd_index = 0;
m_butch_cmd_size = 1;
}
@@ -1232,7 +1231,7 @@ void jaguarcd_state::butch_regs_w(offs_t offset, uint32_t data, uint32_t mem_mas
{
case 0x03: // Read TOC
{
- if(!m_cd_file) // No disc
+ if(!m_cdrom->exists()) // No disc
{
m_butch_cmd_response[0] = 0x400;
m_butch_regs[0] |= 0x2000;
@@ -1249,12 +1248,12 @@ void jaguarcd_state::butch_regs_w(offs_t offset, uint32_t data, uint32_t mem_mas
return;
}
- uint32_t msf = m_cd_file->get_track_start(0) + 150;
+ uint32_t msf = m_cdrom->get_track_start(0) + 150;
/* first track number */
m_butch_cmd_response[0] = 0x2000 | 1;
/* last track number */
- m_butch_cmd_response[1] = 0x2100 | m_cd_file->get_last_track();
+ m_butch_cmd_response[1] = 0x2100 | m_cdrom->get_last_track();
/* start of first track minutes */
m_butch_cmd_response[2] = 0x2200 | ((msf / 60) / 60);
@@ -1270,7 +1269,7 @@ void jaguarcd_state::butch_regs_w(offs_t offset, uint32_t data, uint32_t mem_mas
case 0x14: // Read Long TOC
{
- if(!m_cd_file) // No disc
+ if(!m_cdrom->exists()) // No disc
{
m_butch_cmd_response[0] = 0x400;
m_butch_regs[0] |= 0x2000;
@@ -1279,11 +1278,11 @@ void jaguarcd_state::butch_regs_w(offs_t offset, uint32_t data, uint32_t mem_mas
return;
}
- int ntrks = m_cd_file->get_last_track();
+ int ntrks = m_cdrom->get_last_track();
for(int i=0;i<ntrks;i++)
{
- uint32_t msf = m_cd_file->get_track_start(i) + 150;
+ uint32_t msf = m_cdrom->get_track_start(i) + 150;
/* track number */
m_butch_cmd_response[i*5+0] = 0x6000 | (i+1);
diff --git a/src/mame/atari/jaguar.h b/src/mame/atari/jaguar.h
index 1c8ea25ca9a..a342b783ac7 100644
--- a/src/mame/atari/jaguar.h
+++ b/src/mame/atari/jaguar.h
@@ -15,7 +15,7 @@
#include "jag_blitter.h"
#include "cdrom.h"
#include "bus/generic/slot.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "screen.h"
#include "emupal.h"
@@ -405,7 +405,4 @@ private:
uint32_t m_butch_cmd_response[0x102]{};
uint8_t m_butch_cmd_index = 0U;
uint8_t m_butch_cmd_size = 0U;
-
- cdrom_file *m_cd_file = nullptr;
- //const cdrom_toc* m_toc = nullptr;
};
diff --git a/src/mame/ceres/ceres.cpp b/src/mame/ceres/ceres.cpp
index 0b9fba78a0b..7341e9f0b8d 100644
--- a/src/mame/ceres/ceres.cpp
+++ b/src/mame/ceres/ceres.cpp
@@ -81,7 +81,7 @@ public:
void wfc_w(offs_t offset, u8 data);
u8 wfc_r(offs_t offset);
void wfc_command(u8 command);
- int get_lbasector(hard_disk_file *hdf);
+ int get_lbasector(harddisk_image_device *hdf);
DECLARE_INPUT_CHANGED_MEMBER(mouse_x);
DECLARE_INPUT_CHANGED_MEMBER(mouse_y);
@@ -191,7 +191,7 @@ void ceres1_state::wfc_command(u8 command)
m_wfc_status &= ~WFC_S_ERR;
m_wfc_error = 0;
- hard_disk_file *hdf = m_hdd[(m_wfc_sdh >> 3) & 3]->get_hard_disk_file();
+ harddisk_image_device *hdf = m_hdd[(m_wfc_sdh >> 3) & 3];
switch (command >> 4)
{
@@ -227,7 +227,7 @@ void ceres1_state::wfc_command(u8 command)
m_icu->ireq3_w(1);
}
-int ceres1_state::get_lbasector(hard_disk_file *hdf)
+int ceres1_state::get_lbasector(harddisk_image_device *hdf)
{
const auto &info = hdf->get_info();
diff --git a/src/mame/dec/rainbow.cpp b/src/mame/dec/rainbow.cpp
index 2662c499539..50debf7ac77 100644
--- a/src/mame/dec/rainbow.cpp
+++ b/src/mame/dec/rainbow.cpp
@@ -674,7 +674,7 @@ protected:
void hdc_buffer_counter_reset();
void hdc_reset();
- hard_disk_file *rainbow_hdc_file(int ref);
+ harddisk_image_device *rainbow_hdc_file(int ref);
uint8_t m_gdc_write_buffer[16]; // 16 x 8 bits for CPU, 8 x 16 for GDC
uint8_t m_gdc_color_map[32];
@@ -1196,7 +1196,7 @@ void rainbow_base_state::machine_reset()
m_hdc_drive_ready = true;
m_hdc_write_fault = false;
- hard_disk_file *local_hard_disk;
+ harddisk_image_device *local_hard_disk;
local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
m_leds[0] = 0;
@@ -1665,7 +1665,7 @@ void rainbow_base_state::hdc_reset()
// Return 'hard_disk_file' object for harddisk 1 (fixed).
// < nullptr if geometry is insane or other errors occured >
-hard_disk_file *rainbow_base_state::rainbow_hdc_file(int drv)
+harddisk_image_device *rainbow_base_state::rainbow_hdc_file(int drv)
{
m_hdc_drive_ready = false;
@@ -1683,8 +1683,7 @@ hard_disk_file *rainbow_base_state::rainbow_hdc_file(int drv)
if (!img->exists())
return nullptr;
- hard_disk_file *file = img->get_hard_disk_file();
- const auto &info = file->get_info();
+ const auto &info = img->get_info();
// MFM ALLOWS UP TO 17 SECTORS / TRACK.
// CYLINDERS: 151 (~ 5 MB) to 1024 (max. cylinders on WD1010 controller)
@@ -1693,7 +1692,7 @@ hard_disk_file *rainbow_base_state::rainbow_hdc_file(int drv)
((info.cylinders > 150) && (info.cylinders <= RD51_MAX_CYLINDER)))
{
m_hdc_drive_ready = true;
- return file; // HAS SANE GEOMETRY
+ return img; // HAS SANE GEOMETRY
}
else
{
@@ -1744,7 +1743,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_read_sector)
uint16_t cylinder = (m_hdc->read(0x04)) | (hi << 8);
uint8_t sector_number = m_hdc->read(0x03);
- hard_disk_file *local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
+ harddisk_image_device *local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
if (local_hard_disk)
{
@@ -1842,7 +1841,7 @@ int rainbow_base_state::do_write_sector()
m_leds[0] = 0; // ON
switch_off_timer->adjust(attotime::from_msec(500));
- hard_disk_file *local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
+ harddisk_image_device *local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
if (local_hard_disk)
{
diff --git a/src/mame/fujitsu/fmtowns.cpp b/src/mame/fujitsu/fmtowns.cpp
index 83539ca0011..3d54fd492c6 100644
--- a/src/mame/fujitsu/fmtowns.cpp
+++ b/src/mame/fujitsu/fmtowns.cpp
@@ -1158,7 +1158,7 @@ uint8_t towns_state::towns_cd_get_track()
for(track=1;track<99;track++)
{
- if(cdrom->get_cdrom_file()->get_track_start(track) > lba)
+ if(cdrom->get_track_start(track) > lba)
break;
}
return track;
@@ -1206,7 +1206,7 @@ TIMER_CALLBACK_MEMBER(towns_state::towns_cdrom_read_byte)
m_towns_cd.extra_status = 0;
towns_cd_set_status(0x22,0x00,0x00,0x00);
towns_cdrom_set_irq(TOWNS_CD_IRQ_DMA,1);
- m_cdrom->get_cdrom_file()->read_data(++m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
+ m_cdrom->read_data(++m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
m_towns_cd.read_timer->adjust(attotime::from_hz(300000),1);
m_towns_cd.buffer_ptr = -1;
}
@@ -1237,7 +1237,7 @@ uint8_t towns_state::towns_cdrom_read_byte_software()
}
else
{
- m_cdrom->get_cdrom_file()->read_data(++m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
+ m_cdrom->read_data(++m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
m_towns_cd.extra_status = 0;
towns_cd_set_status(0x21,0x00,0x00,0x00);
towns_cdrom_set_irq(TOWNS_CD_IRQ_DMA,1);
@@ -1269,7 +1269,7 @@ void towns_state::towns_cdrom_read(cdrom_image_device* device)
m_towns_cd.lba_current = msf_to_lbafm(lba1);
m_towns_cd.lba_last = msf_to_lbafm(lba2);
- track = device->get_cdrom_file()->get_track(m_towns_cd.lba_current);
+ track = device->get_track(m_towns_cd.lba_current);
// parameter 7 = sector count?
// lemmings 2 sets this to 4 but hates 4 extra sectors being read
@@ -1285,7 +1285,7 @@ void towns_state::towns_cdrom_read(cdrom_image_device* device)
}
else
{
- device->get_cdrom_file()->read_data(m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
+ device->read_data(m_towns_cd.lba_current,m_towns_cd.buffer,cdrom_file::CD_TRACK_MODE1);
if(m_towns_cd.software_tx)
{
m_towns_cd.status &= ~0x10; // not a DMA transfer
@@ -1332,7 +1332,7 @@ void towns_state::towns_cdrom_play_cdda(cdrom_image_device* device)
m_towns_cd.cdda_current = msf_to_lbafm(lba1);
m_towns_cd.cdda_length = msf_to_lbafm(lba2) - m_towns_cd.cdda_current + 1;
- m_cdda->set_cdrom(device->get_cdrom_file());
+ m_cdda->set_cdrom(device);
m_cdda->start_audio(m_towns_cd.cdda_current,m_towns_cd.cdda_length);
if(LOG_CD) logerror("CD: CD-DA start from LBA:%i length:%i\n",m_towns_cd.cdda_current,m_towns_cd.cdda_length);
if(m_towns_cd.command & 0x20)
@@ -1350,7 +1350,7 @@ TIMER_CALLBACK_MEMBER(towns_state::towns_delay_cdda)
void towns_state::towns_cdrom_execute_command(cdrom_image_device* device)
{
towns_cdrom_set_irq(TOWNS_CD_IRQ_MPU,0); // TODO: this isn't sufficiently tested
- if((device->get_cdrom_file() == nullptr) && (m_towns_cd.command != 0xa0))
+ if(!device->exists() && (m_towns_cd.command != 0xa0))
{ // No CD in drive
if(m_towns_cd.command & 0x20)
{
@@ -1527,7 +1527,7 @@ uint8_t towns_state::towns_cdrom_r(offs_t offset)
break;
case 4: // st1 = last track number (BCD)
towns_cd_set_status(0x17,
- byte_to_bcd(m_cdrom->get_cdrom_file()->get_last_track()),
+ byte_to_bcd(m_cdrom->get_last_track()),
0x00,0x00);
m_towns_cd.extra_status++;
break;
@@ -1536,7 +1536,7 @@ uint8_t towns_state::towns_cdrom_r(offs_t offset)
m_towns_cd.extra_status++;
break;
case 6: // st1/2/3 = address of track 0xaa? (BCD)
- addr = m_cdrom->get_cdrom_file()->get_track_start(0xaa);
+ addr = m_cdrom->get_track_start(0xaa);
addr = cdrom_file::lba_to_msf(addr + 150);
towns_cd_set_status(0x17,
(addr & 0xff0000) >> 16,(addr & 0x00ff00) >> 8,addr & 0x0000ff);
@@ -1546,19 +1546,19 @@ uint8_t towns_state::towns_cdrom_r(offs_t offset)
if(m_towns_cd.extra_status & 0x01)
{
towns_cd_set_status(0x16,
- ((m_cdrom->get_cdrom_file()->get_adr_control((m_towns_cd.extra_status/2)-3) & 0x0f) << 4)
- | ((m_cdrom->get_cdrom_file()->get_adr_control((m_towns_cd.extra_status/2)-3) & 0xf0) >> 4),
+ ((m_cdrom->get_adr_control((m_towns_cd.extra_status/2)-3) & 0x0f) << 4)
+ | ((m_cdrom->get_adr_control((m_towns_cd.extra_status/2)-3) & 0xf0) >> 4),
byte_to_bcd((m_towns_cd.extra_status/2)-2),0x00);
m_towns_cd.extra_status++;
}
else
{
int track = (m_towns_cd.extra_status/2)-4;
- addr = m_cdrom->get_cdrom_file()->get_track_start(track);
+ addr = m_cdrom->get_track_start(track);
addr = cdrom_file::lba_to_msf(addr + 150);
towns_cd_set_status(0x17,
(addr & 0xff0000) >> 16,(addr & 0x00ff00) >> 8,addr & 0x0000ff);
- if(track >= m_cdrom->get_cdrom_file()->get_last_track())
+ if(track >= m_cdrom->get_last_track())
{
m_towns_cd.extra_status = 0;
}
diff --git a/src/mame/fujitsu/fmtowns.h b/src/mame/fujitsu/fmtowns.h
index b4989905501..f9cfb1ed2ac 100644
--- a/src/mame/fujitsu/fmtowns.h
+++ b/src/mame/fujitsu/fmtowns.h
@@ -8,7 +8,7 @@
#include "fmt_icmem.h"
#include "cpu/i386/i386.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "imagedev/floppy.h"
#include "machine/fm_scsi.h"
#include "machine/i8251.h"
diff --git a/src/mame/konami/firebeat.cpp b/src/mame/konami/firebeat.cpp
index 0bfd15aaa41..f4a1685c65b 100644
--- a/src/mame/konami/firebeat.cpp
+++ b/src/mame/konami/firebeat.cpp
@@ -375,6 +375,7 @@ struct IBUTTON
static void firebeat_ata_devices(device_slot_interface &device)
{
device.option_add("cdrom", ATAPI_FIXED_CDROM);
+ device.option_add("dvdrom", ATAPI_FIXED_DVDROM);
device.option_add("hdd", IDE_HARDDISK);
}
@@ -1540,10 +1541,10 @@ void firebeat_popn_state::firebeat_popn(machine_config &config)
{
firebeat_spu_base(config);
- ATA_INTERFACE(config, m_spuata).options(firebeat_ata_devices, "cdrom", nullptr, true);
+ ATA_INTERFACE(config, m_spuata).options(firebeat_ata_devices, "dvdrom", nullptr, true);
m_spuata->irq_handler().set(FUNC(firebeat_popn_state::spu_ata_interrupt));
m_spuata->dmarq_handler().set(FUNC(firebeat_popn_state::spu_ata_dmarq));
- m_spuata->slot(0).set_option_machine_config("cdrom", dvdrom_config);
+ m_spuata->slot(0).set_option_machine_config("dvdrom", dvdrom_config);
m_spuata->slot(0).set_fixed(true);
// 500 hz works best for pop'n music.
@@ -2375,7 +2376,7 @@ ROM_START( popn4 )
DISK_IMAGE_READONLY( "gq986jaa01", 0, SHA1(e5368ac029b0bdf29943ae66677b5521ae1176e1) )
DISK_REGION( "spu_ata:0:cdrom" ) // data DVD-ROM
- DISK_IMAGE( "gq986jaa02", 0, SHA1(53367d3d5f91422fe386c42716492a0ae4332390) )
+ DISK_IMAGE( "gq986jaa02", 0, SHA1(c34ac216b3e0bef1d1813119469364c6403feaa4) )
ROM_REGION(0x1038, "rtc", ROMREGION_ERASE00) // Default unlocked RTC
ROM_LOAD("rtc", 0x0000, 0x1038, CRC(4a5c946c) SHA1(9de6085d45c39ba91934cea3abaa37e1203888c7))
diff --git a/src/mame/konami/konamim2.cpp b/src/mame/konami/konamim2.cpp
index 9619af6f046..52e975e866c 100644
--- a/src/mame/konami/konamim2.cpp
+++ b/src/mame/konami/konamim2.cpp
@@ -286,9 +286,6 @@ public:
protected:
virtual void machine_start() override;
- virtual void machine_reset() override;
-
- void update_disc();
public:
DECLARE_WRITE_LINE_MEMBER(ppc1_int);
@@ -322,9 +319,6 @@ public:
if (!(data & 0x8000))
{
logerror("ATAPI RESET!\n");
-
- // TODO: Do we need any of this?
- update_disc();
}
}
@@ -699,34 +693,6 @@ void konamim2_state::machine_start()
}
}
-void konamim2_state::machine_reset()
-{
- update_disc();
-}
-
-void konamim2_state::update_disc()
-{
- cdrom_file *new_cdrom = m_available_cdroms;
-
- atapi_hle_device *image = subdevice<atapi_hle_device>("ata:0:cr589");
- if (image != nullptr)
- {
- void *current_cdrom = nullptr;
- image->GetDevice(&current_cdrom);
-
- if (current_cdrom != new_cdrom)
- {
- current_cdrom = new_cdrom;
-
- image->SetDevice(new_cdrom);
- }
- }
- else
- {
- abort();
- }
-}
-
/*************************************
*
* Address map
diff --git a/src/mame/konami/ksys573.cpp b/src/mame/konami/ksys573.cpp
index dc1b43a53d8..dbb6a8d9188 100644
--- a/src/mame/konami/ksys573.cpp
+++ b/src/mame/konami/ksys573.cpp
@@ -703,7 +703,6 @@ private:
void cdrom_dma_read( uint32_t *ram, uint32_t n_address, int32_t n_size );
void cdrom_dma_write( uint32_t *ram, uint32_t n_address, int32_t n_size );
- DECLARE_WRITE_LINE_MEMBER( sys573_vblank );
void stepchmp_cassette_install(device_t* device);
void animechmp_cassette_install(device_t *device);
@@ -726,7 +725,6 @@ private:
required_ioport m_analog2;
required_ioport m_analog3;
- void update_disc();
void gx700pwbf_output( int offset, uint8_t data );
required_device<psxirq_device> m_psxirq;
@@ -1142,34 +1140,6 @@ uint16_t ksys573_state::security_r(offs_t offset, uint16_t mem_mask)
return data;
}
-void ksys573_state::update_disc()
-{
- int cd = m_cd->read();
- cdrom_file *new_cdrom;
-
- if( m_available_cdroms[ 1 ] != nullptr )
- {
- new_cdrom = m_available_cdroms[ cd ];
- }
- else
- {
- new_cdrom = m_available_cdroms[ 0 ];
- }
-
- if( m_image != nullptr )
- {
- void *current_cdrom = nullptr;
- m_image->GetDevice( &current_cdrom );
-
- if( current_cdrom != new_cdrom )
- {
- current_cdrom = new_cdrom;
-
- m_image->SetDevice( new_cdrom );
- }
- }
-}
-
template<int N>
READ_LINE_MEMBER( ksys573_state::pccard_cd_r )
{
@@ -1201,8 +1171,6 @@ void ksys573_state::machine_start()
void ksys573_state::machine_reset()
{
- update_disc();
-
m_n_security_control = 0;
m_control = 0;
@@ -1216,11 +1184,6 @@ void ksys573_state::machine_reset()
std::fill_n( m_jvs_output_buffer, sizeof( m_jvs_output_buffer ), 0 );
}
-WRITE_LINE_MEMBER(ksys573_state::sys573_vblank)
-{
- update_disc();
-}
-
// H8 check at startup (JVS related)
WRITE_LINE_MEMBER( ksys573_state::h8_clk_w )
@@ -2493,9 +2456,14 @@ double ksys573_state::analogue_inputs_callback(uint8_t input)
void ksys573_state::cr589_config(device_t *device)
{
- device->subdevice<cdda_device>("cdda")->add_route(0, "^^lspeaker", 1.0);
- device->subdevice<cdda_device>("cdda")->add_route(1, "^^rspeaker", 1.0);
- device = device->subdevice("cdda");
+ auto cdda = device->subdevice<cdda_device>("cdda");
+ cdda->add_route(0, "^^lspeaker", 1.0);
+ cdda->add_route(1, "^^rspeaker", 1.0);
+
+ auto cdrom = device->subdevice<cdrom_image_device>("image");
+ cdrom->add_region("install");
+ cdrom->add_region("install2");
+ cdrom->add_region("runtime", true);
}
void ksys573_state::konami573(machine_config &config)
@@ -2538,7 +2506,7 @@ void ksys573_state::konami573(machine_config &config)
/* video hardware */
CXD8561Q(config, "gpu", XTAL(53'693'175), 0x200000, m_maincpu.target()).set_screen("screen");
- SCREEN(config, "screen", SCREEN_TYPE_RASTER).screen_vblank().set(FUNC(ksys573_state::sys573_vblank));
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
@@ -3748,7 +3716,7 @@ ROM_START( bassangl )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge765ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(98141cc7) SHA1(79ed944c556671a00af995e054b9aeafee245015) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "765jaa02", 0, SHA1(dfcf62581e0d0e994945cc2c37ef86827d511628) )
ROM_END
@@ -3758,21 +3726,21 @@ ROM_START( bassang2 )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc865ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(0a25aec3) SHA1(7b3c4da67f862d8d17e84cf5b9fbb3f7554cc409) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "865jaa02", 0, BAD_DUMP SHA1(b98d9aa54f13aa73bea580d6494cb6a7f3217be3) )
ROM_END
ROM_START( cr589fw )
SYS573_BIOS_A
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "700b04", 0, BAD_DUMP SHA1(2f65f62eb7ae202153a8544989675989ed33316f) )
ROM_END
ROM_START( cr589fwa )
SYS573_BIOS_A
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "700a04", 0, BAD_DUMP SHA1(554481f48eeb5daf8b4e7be2d66840d6c8454a52) )
ROM_END
@@ -3782,7 +3750,7 @@ ROM_START( darkhleg )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx706ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(04bb0b14) SHA1(6cdedee6b1e169e0be6e065f93263abd3285a21a) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "706jaa02", 0, SHA1(10101952fad80b7a10b1299158081bf86ce8cbe6) )
ROM_END
@@ -3795,7 +3763,7 @@ ROM_START( ddrextrm )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc36ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c36jaa02", 0, BAD_DUMP SHA1(edeb45fff0e66151b1ba2fd67542064ccddb031e) )
ROM_END
@@ -3805,7 +3773,7 @@ ROM_START( ddru )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn845ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(a248d576) SHA1(081bcc86c72314159c6560681b4d03cef9e231a7) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845uaa02", 0, BAD_DUMP SHA1(d3f9290d4dadb5e9b82ebe77abf7b99d1a89f716) )
ROM_END
@@ -3815,7 +3783,7 @@ ROM_START( ddrj )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc845jb.u1", 0x000000, 0x000224, BAD_DUMP CRC(cac06b23) SHA1(6df13364d07308c19d4d4c3c92730637989619f1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845jba02", 0, SHA1(e4be989f6a655857af8e7336c9a7acf82e51f123) )
ROM_END
@@ -3842,10 +3810,10 @@ ROM_START( ddrja )
ROM_REGION( 0x200000, "29f016a.27h", 0 ) /* onboard flash */
ROM_LOAD( "gc845jaa.27h", 0x000000, 0x200000, NO_DUMP )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845jaa02", 0, BAD_DUMP SHA1(37ca16be25bee39a5692dee2fa5f0fa0addfaaca) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "845jaa01", 0, NO_DUMP ) // if this even exists
ROM_END
@@ -3872,10 +3840,10 @@ ROM_START( ddrjb )
ROM_REGION( 0x200000, "29f016a.27h", 0 ) /* onboard flash */
ROM_LOAD( "gc845jab.27h", 0x000000, 0x200000, NO_DUMP )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845jab02", 0, SHA1(bac74acaffd9d00e4105e13f32492f5d0fc5a2e1) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "845jab01", 0, NO_DUMP ) // if this even exists
ROM_END
@@ -3885,7 +3853,7 @@ ROM_START( ddra )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn845aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(59d361ca) SHA1(7014768c660e591f63622442c842f442c0d8e0ea) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845aaa02", 0, SHA1(9b786de9b1085009c088de0d40425976c1f8df7b) )
ROM_END
@@ -3898,7 +3866,7 @@ ROM_START( ddrkara )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq921jbb.u6", 0x000000, 0x000008, BAD_DUMP CRC(af09e43c) SHA1(d8372f2d6e0ae07061b496a2242a63e5bc2e54dc) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "921jbb02", 0, SHA1(32849007fe5527245a6cc2de38e73d60ae74eff0) )
ROM_END
@@ -3911,7 +3879,7 @@ ROM_START( ddrkara2 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gc947ja.u6", 0x000000, 0x000008, CRC(6d76f4a9) SHA1(4fe5d9151ca0a0a67d64657c9a82776b928f429b) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "947jaa02", 0, SHA1(c1e9ad0386b52867bdabd550b95e1651d07d972c) )
ROM_END
@@ -3921,7 +3889,7 @@ ROM_START( ddr2m )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "895jaa02", 0, BAD_DUMP SHA1(cfe3a6f3ed62ba388b07045e29e22472d17dcfe4) )
ROM_END
@@ -3931,10 +3899,10 @@ ROM_START( ddr2mc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn896ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "896jaa01", 0, BAD_DUMP SHA1(f802a0e2ba0147eb71c54d92af409c3010a5715f) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "895jaa02", 0, BAD_DUMP SHA1(cfe3a6f3ed62ba388b07045e29e22472d17dcfe4) )
ROM_END
@@ -3944,10 +3912,10 @@ ROM_START( ddr2mc2 )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge984ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "ge984a01,ddr", 0, SHA1(badd15656f2316f81b0a45026b5ef10287d1480b) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "885jaa02", 0, SHA1(f02bb09f41533c6ec496a662d815e85b304fcc72) )
ROM_END
@@ -3957,7 +3925,7 @@ ROM_START( ddr2ml )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "885jac01", 0, SHA1(ed864096ee99aa813f40642b9467fe2cbb07d669) )
ROM_END
@@ -3967,10 +3935,10 @@ ROM_START( ddr2mla )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "885jab01", 0, SHA1(c2bbb9e2e6f34e07f57e7076726af81df39f55c9) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "885jaa02", 0, SHA1(f02bb09f41533c6ec496a662d815e85b304fcc72) )
ROM_END
@@ -3980,7 +3948,7 @@ ROM_START( ddr2mlb )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge885jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(a066ad5e) SHA1(1783c62d7396e4e7f8d723b7bc07e45285dc122d) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "885jaa02", 0, SHA1(f02bb09f41533c6ec496a662d815e85b304fcc72) )
ROM_END
@@ -3999,7 +3967,7 @@ ROM_START( ddr3ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn887aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "887aaa02", 0, SHA1(6f9a0e9dd046a1fc0c81be9eeb45c136574a4472) )
ROM_END
@@ -4018,7 +3986,7 @@ ROM_START( ddr3mj )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn887ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "887jaa02", 0, SHA1(8736818f42822f77e3484ea46a9e63faa7f8517a) )
ROM_END
@@ -4037,7 +4005,7 @@ ROM_START( ddr3mk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn887kb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "887kba02", 0, SHA1(9f2c6a4e7ad0de44295dc09b9b054afb044238a9) )
ROM_END
@@ -4056,7 +4024,7 @@ ROM_START( ddr3mka )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn887ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "887kaa02", 0, SHA1(d002f2c98c012d67ad0587553e1d0f45c0ae470e) )
ROM_END
@@ -4075,7 +4043,7 @@ ROM_START( ddr3mp )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca22ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a22jaa02", 0, SHA1(dc3c1223882716d47b4f4db45b5dd2e988cba64c) )
ROM_END
@@ -4094,7 +4062,7 @@ ROM_START( ddr4m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca33aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a33aaa02", 0, BAD_DUMP SHA1(cc7349cbee37bfb101480497e99f1f52acb4ffa1) )
ROM_END
@@ -4113,7 +4081,7 @@ ROM_START( ddr4mj )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca33ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a33jaa02", 0, BAD_DUMP SHA1(9d9fb5e65f1532f358e9c273c56d11389d11fd79) )
ROM_END
@@ -4132,7 +4100,7 @@ ROM_START( ddr4ms )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca33ab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a33aba02", 0, BAD_DUMP SHA1(cc7349cbee37bfb101480497e99f1f52acb4ffa1) )
ROM_END
@@ -4151,7 +4119,7 @@ ROM_START( ddr4msj )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca33jb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a33jba02", 0, BAD_DUMP SHA1(9d9fb5e65f1532f358e9c273c56d11389d11fd79) )
ROM_END
@@ -4173,7 +4141,7 @@ ROM_START( ddr4mp )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gca34ja.22h", 0x000000, 0x002000, CRC(80575c1f) SHA1(a0594ca0f75bc7d49b645e835e9fa48a73c3c9c7) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a34jaa02", 0, SHA1(c33e43192ce49845f8901c505f1c7867bc643a0b) )
ROM_END
@@ -4195,7 +4163,7 @@ ROM_START( ddr4mps )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gca34jb.22h", 0x000000, 0x002000, CRC(bc6c8bd7) SHA1(10ceec5c7bc5ca9fca88f3c083a7d97012982079) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a34jba02", 0, BAD_DUMP SHA1(c33e43192ce49845f8901c505f1c7867bc643a0b) ) // Check if there was a separate CD created for solo cabinets.
ROM_END
@@ -4208,7 +4176,7 @@ ROM_START( ddr5m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca27ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a27jaa02", 0, SHA1(70465669dfd48abf806cb58b2410ff4f1781f5f1) )
ROM_END
@@ -4218,10 +4186,10 @@ ROM_START( ddrbocd )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn895jaa.u1", 0x000000, 0x000224, BAD_DUMP CRC(5d906be5) SHA1(4ea9c5506aaaf1726f2a39d0a37a8df35a6aad47) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "892jaa01", 0, BAD_DUMP SHA1(46ace0feef48a2a6643c3cb4ac9164ba0beeea94) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "895jaa02", 0, BAD_DUMP SHA1(cfe3a6f3ed62ba388b07045e29e22472d17dcfe4) )
ROM_END
@@ -4240,7 +4208,7 @@ ROM_START( ddrs2k )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gc905aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "905aaa02", 0, BAD_DUMP SHA1(1fc0f3fcc7d5d23711967023ff02c1fc76479024) )
ROM_END
@@ -4253,7 +4221,7 @@ ROM_START( ddrmax )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb19ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b19jaa02", 0, SHA1(fe8a6731a2163fe7864cd3c4457034768eb98caa) )
ROM_END
@@ -4266,7 +4234,7 @@ ROM_START( ddrmax2 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb20ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b20jaa02", 0, SHA1(ef6579192b86cfea08debe82f54fc4aae5985c92) )
ROM_END
@@ -4285,7 +4253,7 @@ ROM_START( ddrs2kj )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gc905aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "905jaa02", 0, SHA1(a78cf628fb2ba823e1ca35cbd611938273ab82ac) )
ROM_END
@@ -4298,7 +4266,7 @@ ROM_START( ddrsbm )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq894ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "894jaa02", 0, SHA1(d6872078a87ee00280a627675540676fb8b10f60) )
ROM_END
@@ -4311,7 +4279,7 @@ ROM_START( ddrusa )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gka44ua.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a44uaa02", 0, BAD_DUMP SHA1(2cdbe1c62d16a2be65adb7e11331fce5c8e45504) )
ROM_END
@@ -4329,7 +4297,7 @@ ROM_START( drmn )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881ja.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "881xxb02", 0, BAD_DUMP SHA1(9252ff1841584c06506f58c9a9cefbc82b32187d) ) // drummania/percussion freaks hybrid cd
ROM_END
@@ -4347,10 +4315,10 @@ ROM_START( drmna )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881ja.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "881jad01", 0, BAD_DUMP SHA1(7d9d47bef636dbaa8d578f34ea9489e349d3d6df) ) // upgrade cd
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "881jaa02", 0, SHA1(dad3eab14bb4535dd52885fef022720caf280e2b) )
ROM_END
@@ -4369,7 +4337,7 @@ ROM_START( drmn2m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn912ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "912jab02", 0, BAD_DUMP SHA1(19dfae94b63468d3e16d3cc4a3eeae60d5dff1d7) )
ROM_END
@@ -4388,10 +4356,10 @@ ROM_START( drmn2mpu )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn912ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "912jab02", 0, BAD_DUMP SHA1(19dfae94b63468d3e16d3cc4a3eeae60d5dff1d7) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "912za01", 0, BAD_DUMP SHA1(033a310006efe164cc6a8276de42a5d555f9fea9) )
ROM_END
@@ -4410,7 +4378,7 @@ ROM_START( drmn3m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca23ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a23jaa02", 0, BAD_DUMP SHA1(89e365f61a4db889621d7d9d9917bcfa2c09704e) )
ROM_END
@@ -4428,10 +4396,10 @@ ROM_START( drmn4m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gea25jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "a25jaa02", 0, BAD_DUMP SHA1(8a0b761d1c282d927e2daf92519654a1c91ee1ab) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a25jba02", 0, BAD_DUMP SHA1(5f4aae359da610352c1004cfa1a32064d8f55d0e) )
ROM_END
@@ -4444,10 +4412,10 @@ ROM_START( drmn5m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb05jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "b05jaa02", 0, BAD_DUMP SHA1(7a6e7940d1441cff1d9be1bc3affc029fe6dc9e4) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b05jba02", 0, BAD_DUMP SHA1(822149db553ca78ad8174719a657dbbd2776b922) )
ROM_END
@@ -4465,10 +4433,10 @@ ROM_START( drmn6m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb16jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "b16jaa02", 0, BAD_DUMP SHA1(fa0862a9bd3a48d4f6e7b44b11ad387acc05037e) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b16jba02", 0, BAD_DUMP SHA1(07de74a3ca384407d99c433110085208a458653e) )
ROM_END
@@ -4486,10 +4454,10 @@ ROM_START( drmn7m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc07jba.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "c07jca02", 0, SHA1(a81a35360933ab8a7630cf5e8a8c6988714cfa0d) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c07jda02", 0, BAD_DUMP SHA1(7c22ebbda11bdaf85c3441d7a6f3497994cd957f) )
ROM_END
@@ -4507,10 +4475,10 @@ ROM_START( drmn7ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc07jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "c07jaa02", 0, BAD_DUMP SHA1(96c410745d1fd14059bf11987655ed998a9b79dd) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c07jba02", 0, BAD_DUMP SHA1(25e1a3ff7886c409d16e40ca1798b01b11546755) )
ROM_END
@@ -4523,10 +4491,10 @@ ROM_START( drmn8m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc38jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "c38jaa02", 0, SHA1(9115252e6cc13ff90e73cd1a864e0d99e3c8b5ea) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c38jba02", 0, SHA1(2a31335277929b2231b12ad950ab69e35b37d973) )
ROM_END
@@ -4539,13 +4507,13 @@ ROM_START( drmn9m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd09jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "d09jab01", 0, SHA1(f3962f77b96a48bf0195700f4b72bf02d75a7e03) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "install2" )
DISK_IMAGE_READONLY( "d09jaa02", 0, BAD_DUMP SHA1(33f3e48ed5a8becd8c4714413e454328d8d5baae) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d09jba02", 0, BAD_DUMP SHA1(68324d474d89a9ddf5cadc9ab4a8d615b3739879) )
ROM_END
@@ -4558,10 +4526,10 @@ ROM_START( drmn9ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd09jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "d09jaa02", 0, BAD_DUMP SHA1(33f3e48ed5a8becd8c4714413e454328d8d5baae) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d09jba02", 0, BAD_DUMP SHA1(68324d474d89a9ddf5cadc9ab4a8d615b3739879) )
ROM_END
@@ -4574,7 +4542,7 @@ ROM_START( drmn9mb )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd09jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d09jca02", 0, SHA1(4583ce07fca67660f9f1928589f39d3f551206ff) )
ROM_END
@@ -4587,10 +4555,10 @@ ROM_START( drmn10m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd40jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "d40jaa02", 0, BAD_DUMP SHA1(68b2038f0cd2d461f608945d1e243f2b6979efaa) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d40jba02", 0, BAD_DUMP SHA1(0ded9e0a6c77b181e7b6beb1dbdfa17dee4acd90) )
ROM_END
@@ -4603,7 +4571,7 @@ ROM_START( drmn10ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd40jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d40jca02", 0, SHA1(f0208a62e2d15773961e89383ae8d4bd2e8f6b47) )
ROM_END
@@ -4616,7 +4584,7 @@ ROM_START( dmx )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge874ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "874jaa", 0, BAD_DUMP SHA1(3338a784efdca4f8bdcc83d2c9a6bbe7f7046d5c) )
ROM_END
@@ -4629,7 +4597,7 @@ ROM_START( dmxa )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge874aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "874aaa02", 0, SHA1(6985445a492e9d8ccd9938c7c47402c3886e2d62) )
ROM_END
@@ -4642,7 +4610,7 @@ ROM_START( dmx2m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca39ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a39jaa02", 0, BAD_DUMP SHA1(3d021448df857c12f6d46a20e14ae0fc6d342dcc) )
ROM_END
@@ -4660,7 +4628,7 @@ ROM_START( dmx2majp )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca38ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a38jaa02", 0, SHA1(27fbecefb634ce282ca3bf09500c0c9e8155a7ef) )
ROM_END
@@ -4673,7 +4641,7 @@ ROM_START( dncfrks )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gk874ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "874kaa", 0, BAD_DUMP SHA1(4d1e843417ea96635eeba0cef944e83fdb72565c) )
ROM_END
@@ -4686,7 +4654,7 @@ ROM_START( dsem )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge936ea.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "936eaa", 0, BAD_DUMP SHA1(7cacc15ae065d47af31f1008374ec8241dba0d55) )
ROM_END
@@ -4700,7 +4668,7 @@ ROM_START( dsem2 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gkc23ea.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c23eaa02", 0, BAD_DUMP SHA1(46868c97530db5be1b43ffa32744e3e12495c243) )
ROM_END
@@ -4719,7 +4687,7 @@ ROM_START( dsfdct )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gc910jc.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "910jca02", 0, BAD_DUMP SHA1(0c868f3c9f696d291e8f27687e3ad83e453a4894) )
ROM_END
@@ -4738,7 +4706,7 @@ ROM_START( dsfdcta )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gc910ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "910jaa02", 0, BAD_DUMP SHA1(70851c383e3876c4a697a99706fbaae2dafcb0e0) )
ROM_END
@@ -4757,7 +4725,7 @@ ROM_START( dsfdr )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca37ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a37jaa02", 0, BAD_DUMP SHA1(c6a23b910e884aa0d4afc388dbc8379e0d09611a) )
ROM_END
@@ -4770,7 +4738,7 @@ ROM_START( dsftkd )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn884ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "884jaa02", 0, BAD_DUMP SHA1(80f02fcb7ea5b6394a2a58f12b73d87a1826d7f4) )
ROM_END
@@ -4783,7 +4751,7 @@ ROM_START( dstage )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn884eb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "gc845eba", 0, BAD_DUMP SHA1(0b7b100ceb37ac30cc1d309e5fe11fde5e1192d0) )
ROM_END
@@ -4793,7 +4761,7 @@ ROM_START( dstagea )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gn845ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(b0cb136c) SHA1(ff9471517d94caaf6f8e07c0aa4f70762cbcd6ee) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "845uaa02", 0, BAD_DUMP SHA1(d3f9290d4dadb5e9b82ebe77abf7b99d1a89f716) )
ROM_END
@@ -4803,7 +4771,7 @@ ROM_START( fbait2bc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc865ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(e9f61a3d) SHA1(367914f142811ca592700c43570b4498a32434cd) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "865uab02", 0, BAD_DUMP SHA1(d14dc066d4c16fba1e9b31d5f042ad249c4b5137) )
ROM_END
@@ -4813,7 +4781,7 @@ ROM_START( fbaitbc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "ge765ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(5bfe59b0) SHA1(a15ae8e95a4fe6a3fa212297af8324b075b315c9) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "765uab02", 0, BAD_DUMP SHA1(07b09e763e4b90108aa924b518221b16667a7133) )
ROM_END
@@ -4823,7 +4791,7 @@ ROM_START( fbaitmc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx889ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(ceadb821) SHA1(12da44b0c4f4d4af133d1e8e0089602c0a3d8411) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "889ea", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) )
ROM_END
@@ -4833,7 +4801,7 @@ ROM_START( fbaitmca )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx889aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(27b5ca87) SHA1(5c3c822b1bd8c03aabdebcd927cf4479fdfc3bff) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "889aa", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) )
ROM_END
@@ -4843,7 +4811,7 @@ ROM_START( fbaitmcj )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx889ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(d9ef0053) SHA1(56503e668693af092e680fada47314ca4dcfea5f) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "889ja", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) )
ROM_END
@@ -4853,7 +4821,7 @@ ROM_START( fbaitmcu )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx889ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(dc2e7e3b) SHA1(461910918392037f9e33eb7ed2ac8e494c141fe1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "889ua", 0, BAD_DUMP SHA1(0b567bf2f03ee8089e0b021ea502a53b3f6fe7ac) )
ROM_END
@@ -4871,7 +4839,7 @@ ROM_START( fghtmn )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918eaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918xxb02", 0, BAD_DUMP SHA1(8ced8952fff3e70ce0621a491f0973af5a6ccd82) )
ROM_END
@@ -4889,7 +4857,7 @@ ROM_START( fghtmna )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918xxb02", 0, BAD_DUMP SHA1(8ced8952fff3e70ce0621a491f0973af5a6ccd82) )
ROM_END
@@ -4907,7 +4875,7 @@ ROM_START( fghtmnk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918xxb02", 0, BAD_DUMP SHA1(8ced8952fff3e70ce0621a491f0973af5a6ccd82) )
ROM_END
@@ -4925,7 +4893,7 @@ ROM_START( fghtmnu )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918uaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918xxb02", 0, BAD_DUMP SHA1(8ced8952fff3e70ce0621a491f0973af5a6ccd82) )
ROM_END
@@ -5066,7 +5034,7 @@ ROM_START( gtrfrks )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(3b38dccf) SHA1(c313d025b4faed73ab021b76dbf0c51c9d701eb3) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) )
ROM_END
@@ -5076,7 +5044,7 @@ ROM_START( gtrfrksu )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(29bb1ad5) SHA1(797ba61b6407fc0d0531e58129a9230e1484dc11) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) )
ROM_END
@@ -5086,7 +5054,7 @@ ROM_START( gtrfrksj )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(2c7a64bd) SHA1(01bd46989a897dbd023603e5cabbd7deb85825ff) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) )
ROM_END
@@ -5096,7 +5064,7 @@ ROM_START( gtrfrksa )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(d220ae69) SHA1(dfdd29197222cb621b05f9b9091cff9a20cd846e) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__d02", 0, BAD_DUMP SHA1(8d6681d6cacd054a047ad984184fa0dfa383ecb9) )
ROM_END
@@ -5106,7 +5074,7 @@ ROM_START( gtrfrksc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(3b38dccf) SHA1(c313d025b4faed73ab021b76dbf0c51c9d701eb3) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) )
ROM_END
@@ -5116,7 +5084,7 @@ ROM_START( gtrfrksuc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(29bb1ad5) SHA1(797ba61b6407fc0d0531e58129a9230e1484dc11) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) )
ROM_END
@@ -5126,7 +5094,7 @@ ROM_START( gtrfrksjc )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(2c7a64bd) SHA1(01bd46989a897dbd023603e5cabbd7deb85825ff) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) )
ROM_END
@@ -5136,7 +5104,7 @@ ROM_START( gtrfrksac )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(d220ae69) SHA1(dfdd29197222cb621b05f9b9091cff9a20cd846e) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__c02", 0, BAD_DUMP SHA1(80293512c4b914ef98acb1bbc7e3a2ed944a0dad) )
ROM_END
@@ -5146,7 +5114,7 @@ ROM_START( gtrfrksea )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886eac.u1", 0x000000, 0x000224, BAD_DUMP CRC(3b38dccf) SHA1(c313d025b4faed73ab021b76dbf0c51c9d701eb3) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__a02", 0, SHA1(f34f5678cfc0292e65e114480f167866664f4173) )
ROM_END
@@ -5156,7 +5124,7 @@ ROM_START( gtrfrksua )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886uac.u1", 0x000000, 0x000224, BAD_DUMP CRC(29bb1ad5) SHA1(797ba61b6407fc0d0531e58129a9230e1484dc11) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__a02", 0, SHA1(f34f5678cfc0292e65e114480f167866664f4173) )
ROM_END
@@ -5166,7 +5134,7 @@ ROM_START( gtrfrksja )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886jac.u1", 0x000000, 0x000224, BAD_DUMP CRC(2c7a64bd) SHA1(01bd46989a897dbd023603e5cabbd7deb85825ff) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__a02", 0, SHA1(f34f5678cfc0292e65e114480f167866664f4173) )
ROM_END
@@ -5176,7 +5144,7 @@ ROM_START( gtrfrksaa )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gq886aac.u1", 0x000000, 0x000224, BAD_DUMP CRC(d220ae69) SHA1(dfdd29197222cb621b05f9b9091cff9a20cd846e) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "886__a02", 0, SHA1(f34f5678cfc0292e65e114480f167866664f4173) )
ROM_END
@@ -5189,7 +5157,7 @@ ROM_START( gtrfrk2m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "929jbb02", 0, BAD_DUMP SHA1(4f6bb0150ad6ed574dd7583ccd60604028663b2a) )
ROM_END
@@ -5202,7 +5170,7 @@ ROM_START( gtrfrk2ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "883__a01", 0, BAD_DUMP SHA1(913c55a41d313e6197e0a176a2fba1461cda17f2) )
ROM_END
@@ -5215,7 +5183,7 @@ ROM_START( gtrfrk2mua )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "883__a01", 0, BAD_DUMP SHA1(913c55a41d313e6197e0a176a2fba1461cda17f2) )
ROM_END
@@ -5228,7 +5196,7 @@ ROM_START( gtrfrk2mja )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "883__a01", 0, BAD_DUMP SHA1(913c55a41d313e6197e0a176a2fba1461cda17f2) )
ROM_END
@@ -5241,7 +5209,7 @@ ROM_START( gtrfrk2mka )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "883__a01", 0, BAD_DUMP SHA1(913c55a41d313e6197e0a176a2fba1461cda17f2) )
ROM_END
@@ -5254,7 +5222,7 @@ ROM_START( gtrfrk2maa )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "883__a01", 0, BAD_DUMP SHA1(913c55a41d313e6197e0a176a2fba1461cda17f2) )
ROM_END
@@ -5267,7 +5235,7 @@ ROM_START( gtrfrk2ml1 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "929jaa02", 0, BAD_DUMP SHA1(7667f6d8eee055a12ed032ab2087db10f1d21bd4) )
ROM_END
@@ -5280,7 +5248,7 @@ ROM_START( gtrfrk2ml2 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq883jad.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "929jbb02", 0, BAD_DUMP SHA1(4f6bb0150ad6ed574dd7583ccd60604028663b2a) )
ROM_END
@@ -5299,10 +5267,10 @@ ROM_START( gtrfrk3m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge949jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "949jac01", 0, BAD_DUMP SHA1(ff017dd5c0ecbdb8935d0d4656a45e9fab10ef82) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "949jab02", 0, BAD_DUMP SHA1(ad629c9bafbdc4bf6c679918a5fae2bcfdb39332) )
ROM_END
@@ -5321,7 +5289,7 @@ ROM_START( gtfrk3ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge949jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "949jab02", 0, BAD_DUMP SHA1(ad629c9bafbdc4bf6c679918a5fae2bcfdb39332) )
ROM_END
@@ -5334,7 +5302,7 @@ ROM_START( gtfrk3mb )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "ge949jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "949jaz02", 0, BAD_DUMP SHA1(b0c786ba420a34fcbd16bc36a137f6ae87b7dfa8) )
ROM_END
@@ -5353,7 +5321,7 @@ ROM_START( gtrfrk4m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gea24ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a24jaa02", 0, BAD_DUMP SHA1(bc0303f5a6a19484cd35890cc9934ee0bcabb2ad) )
ROM_END
@@ -5371,7 +5339,7 @@ ROM_START( gtrfrk5m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gea26jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a26jaa02", 0, BAD_DUMP SHA1(9909e08abff780db6fd7a5fbcc57ffbe14ae08ce) )
ROM_END
@@ -5389,7 +5357,7 @@ ROM_START( gtrfrk5ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gea26aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a26aaa02", 0, SHA1(79c430664b79fb8f8d78b61b0192b73e70d3f206) )
ROM_END
@@ -5402,7 +5370,7 @@ ROM_START( gtrfrk6m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb06ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b06jaa02", 0, BAD_DUMP SHA1(2ea53ef492da63183a28c54afde07fce323fe42e) )
ROM_END
@@ -5420,7 +5388,7 @@ ROM_START( gtrfrk7m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb17jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b17jaa02", 0, SHA1(daf23982abbab882882f89b3a9d985df36252cae) )
ROM_END
@@ -5438,7 +5406,7 @@ ROM_START( gtrfrk8m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc08jba.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c08jba02", 0, BAD_DUMP SHA1(8e352ed8ade581b7c9bb579fc56003ea1831202c) )
ROM_END
@@ -5456,7 +5424,7 @@ ROM_START( gtrfrk8ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc08jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c08jaa02", 0, BAD_DUMP SHA1(7a1d97f74ec4d643ff7d3981d66b551cbf9e57f0) )
ROM_END
@@ -5469,7 +5437,7 @@ ROM_START( gtrfrk9m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc39jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c39jaa02", 0, SHA1(fef1202457b6bae2e10be6ecea35369820ffded5) )
ROM_END
@@ -5482,10 +5450,10 @@ ROM_START( gtfrk10m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd10jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "d10jab01", 0, BAD_DUMP SHA1(c84858b412f0798a65cf3059c743501f32ad7280) )
- DISK_REGION( "cdrom1" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d10jaa02", 0, BAD_DUMP SHA1(d4e4460ca3edc1b365af593757557c6cf5b7b3ec) )
ROM_END
@@ -5498,7 +5466,7 @@ ROM_START( gtfrk10ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd10jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d10jaa02", 0, BAD_DUMP SHA1(d4e4460ca3edc1b365af593757557c6cf5b7b3ec) )
ROM_END
@@ -5511,7 +5479,7 @@ ROM_START( gtfrk10mb )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd10jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d10jba02", 0, BAD_DUMP SHA1(80893da422268cc1f89688289cdec981c4f9feb2) )
ROM_END
@@ -5524,7 +5492,7 @@ ROM_START( gtfrk11m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd39ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d39jaa02", 0, BAD_DUMP SHA1(7a87ee331ba0301bb8724c398e6c77cfb9c172a7) )
ROM_END
@@ -5537,7 +5505,7 @@ ROM_START( gtfrk11ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd39ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d39jba02", 0, SHA1(a10225d1dd6cfd22382970099927aeba5e0c03e7) )
ROM_END
@@ -5756,7 +5724,7 @@ ROM_START( hypbbc2p )
ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx908ja.u1", 0x000000, 0x000084, BAD_DUMP CRC(8900eaff) SHA1(aea4449c2453875694dfa92451d46dace710faf2) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "908a02", 0, BAD_DUMP SHA1(573194ca9938c30415fc88dcc0c0152dd3024d71) )
ROM_END
@@ -5766,7 +5734,7 @@ ROM_START( hypbbc2pk )
ROM_REGION( 0x0000084, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx908ka.u1", 0x000000, 0x000084, BAD_DUMP CRC(869f932b) SHA1(db5f96536ede2c16fc5fd5ab6a8efdf0f03be43b) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "908a02", 0, BAD_DUMP SHA1(573194ca9938c30415fc88dcc0c0152dd3024d71) )
ROM_END
@@ -5776,7 +5744,7 @@ ROM_START( jppyex98 )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc811ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(fd70efbe) SHA1(206fd4a6424723f082856c19617461897d127638) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "811jaa02", 0, BAD_DUMP SHA1(e9580172d58b38841f643651ae0bcaf24fd5f118) )
ROM_END
@@ -5786,7 +5754,7 @@ ROM_START( konam80a )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc826aa.u1", 0x000000, 0x000224, BAD_DUMP CRC(da4cff17) SHA1(9a7b074d15b7d861132d9588c753cd18a469590f) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "826aaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) )
ROM_END
@@ -5796,7 +5764,7 @@ ROM_START( konam80j )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc826ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(0479ef71) SHA1(043c01f115dd1434273729d06be3ba9c2d7b7a86) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "826jaa01", 0, SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) )
ROM_END
@@ -5806,7 +5774,7 @@ ROM_START( konam80k )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc826ka.u1", 0x000000, 0x000224, BAD_DUMP CRC(b4d57749) SHA1(8edbc08bc160350aa45dc4eb75dff29bcfd3d8f0) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "826kaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) )
ROM_END
@@ -5816,7 +5784,7 @@ ROM_START( konam80s )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc826ea.u1", 0x000000, 0x000224, BAD_DUMP CRC(7c12ec3f) SHA1(7989ed47fe551116a821c7d4bc4de6bbb22eff29) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "826eaa01", 0, BAD_DUMP SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) )
ROM_END
@@ -5826,7 +5794,7 @@ ROM_START( konam80u )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gc826ua.u1", 0x000000, 0x000224, BAD_DUMP CRC(077fefab) SHA1(2b3db957b6b767854ffeb99edd767040cb981489) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "826uaa01", 0, SHA1(be5f8b31fd18ba631fe98c2132c56abf20193419) )
ROM_END
@@ -5840,7 +5808,7 @@ ROM_START( mamboagg )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gqa40jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a40jab02", 0, SHA1(2e4ed217a7e9f7c79abc9a1798556cc3649db30e) )
ROM_END
@@ -5854,7 +5822,7 @@ ROM_START( mamboagga )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gqa40jrb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a40jab02", 0, SHA1(2e4ed217a7e9f7c79abc9a1798556cc3649db30e) )
ROM_END
@@ -5867,7 +5835,7 @@ ROM_START( mrtlbeat )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "geb47jb.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b47jxb02", 0, SHA1(6bbe8d6169ef692bd8995da564bd5a97b6bf0b31) )
ROM_END
@@ -5877,7 +5845,7 @@ ROM_START( powyakex )
ROM_REGION( 0x0000224, "cassette:game:eeprom", 0 )
ROM_LOAD( "gx802ja.u1", 0x000000, 0x000224, BAD_DUMP CRC(82743f7b) SHA1(9019de5f38e79477327e4dde23e1e572e8450d67) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "802jab02", 0, SHA1(460cc9f0b2514ec1da06b0a1d7b52fe43220d181) )
ROM_END
@@ -5895,7 +5863,7 @@ ROM_START( pcnfrk )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881ea.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY("881xxb02", 0, BAD_DUMP SHA1(9252ff1841584c06506f58c9a9cefbc82b32187d))
ROM_END
@@ -5913,7 +5881,7 @@ ROM_START( pcnfrka )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881aa.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY("881xxb02", 0, BAD_DUMP SHA1(9252ff1841584c06506f58c9a9cefbc82b32187d))
ROM_END
@@ -5931,7 +5899,7 @@ ROM_START( pcnfrkk )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881ka.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY("881xxb02", 0, BAD_DUMP SHA1(9252ff1841584c06506f58c9a9cefbc82b32187d))
ROM_END
@@ -5949,7 +5917,7 @@ ROM_START( drmnu )
ROM_REGION( 0x002000, "m48t58", 0 )
ROM_LOAD( "gq881ua.22h", 0x000000, 0x002000, CRC(e834d5ec) SHA1(1c845811e43d7dfec657da288b5a38b8bc9c8366) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY("881xxb02", 0, BAD_DUMP SHA1(9252ff1841584c06506f58c9a9cefbc82b32187d))
ROM_END
@@ -5968,7 +5936,7 @@ ROM_START( pcnfrk2m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn912aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "912aaa02", 0, BAD_DUMP SHA1(0abc1c32c71c535ee2deb3e1fa574f1e723b97b0) )
ROM_END
@@ -5987,7 +5955,7 @@ ROM_START( pcnfrk2mk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gn912ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "912kaa02", 0, BAD_DUMP SHA1(f817054453b7d66260813fe823f348280b4e9902) )
ROM_END
@@ -6006,7 +5974,7 @@ ROM_START( pcnfrk3m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca23aa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a23aaa02", 0, BAD_DUMP SHA1(aab3b2e1167f0b4ab101d77fa3bb25db8ab01437) )
ROM_END
@@ -6025,7 +5993,7 @@ ROM_START( pcnfrk3mk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca23ka.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a23kaa02", 0, BAD_DUMP SHA1(5b853cc25eb583ed36d8cd402235b4f5c9ce065a) )
ROM_END
@@ -6043,10 +6011,10 @@ ROM_START( pcnfrk4m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gea25aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "a25aaa02", 0, BAD_DUMP SHA1(cea168d38a4052ef5f30dc00a80529bbd8a31097) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a25aba02", 0, BAD_DUMP SHA1(eb8eed41c715f39a426433224671adc36d4b0262) )
ROM_END
@@ -6059,7 +6027,7 @@ ROM_START( pcnfrk4mk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gka25kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a25kaa02", 0, BAD_DUMP SHA1(6c9084773c6964e794bd096822da4413aa7305ef) )
ROM_END
@@ -6072,7 +6040,7 @@ ROM_START( pcnfrk5m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb05aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b05aaa02", 0, SHA1(71e244ba03d6e761921c24f2a2ae5835f0a69021) )
ROM_END
@@ -6085,7 +6053,7 @@ ROM_START( pcnfrk5mk )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb05kaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b05kaa02", 0, SHA1(10e7ca2b0d8ed29f5882cccd735b6d1cb13aca21) )
ROM_END
@@ -6103,7 +6071,7 @@ ROM_START( pcnfrk6m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcb16aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "b16aaa02", 0, BAD_DUMP SHA1(d268548e7cbfb22a8127509aeb84b4487b0e7460) )
ROM_END
@@ -6121,7 +6089,7 @@ ROM_START( pcnfrk7m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc07aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c07aaa02", 0, BAD_DUMP SHA1(3edb219d5fd7cf25c851fa02c7c1926c9e2baa02) )
ROM_END
@@ -6134,7 +6102,7 @@ ROM_START( pcnfrk8m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcc38aaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "c38aaa02", 0, SHA1(df1699e6216cfccf5ff0cad8ad2b66a8c4c8cfc9) )
ROM_END
@@ -6147,7 +6115,7 @@ ROM_START( pcnfrk9m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd09aba.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d09aaa02", 0, SHA1(593706872e3a541acfe4d9527c3a5e89cc193e98) )
ROM_END
@@ -6160,7 +6128,7 @@ ROM_START( pcnfrk9ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd09aba.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d09aba02", 0, BAD_DUMP SHA1(a817d1c7fdb354b7d2d5c08f92a352c76a2b1a72) )
ROM_END
@@ -6173,10 +6141,10 @@ ROM_START( pcnfrk10m )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd40aca.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d40aaa02", 0, SHA1(638c19588c5f9967eb5623a3a979ac68e7c96dae) )
- DISK_REGION( "multisession" )
+ DISK_REGION( "install" )
DISK_IMAGE_READONLY( "d40aba02", 0, NO_DUMP )
ROM_END
@@ -6189,7 +6157,7 @@ ROM_START( pcnfrk10ma )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gcd40aca.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "d40aca02", 0, BAD_DUMP SHA1(3a23808e13b689f3ed2a1fa1ce541a4b82765d97) )
ROM_END
@@ -6207,7 +6175,7 @@ ROM_START( pnchmn )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918jaa.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918xxb02", 0, BAD_DUMP SHA1(8ced8952fff3e70ce0621a491f0973af5a6ccd82) )
ROM_END
@@ -6225,7 +6193,7 @@ ROM_START( pnchmna )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gq918jab.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "918jab02", 0, SHA1(8b8cb806a4e15b4687456a5a4482ea7e1373bbf6) )
ROM_END
@@ -6243,7 +6211,7 @@ ROM_START( pnchmn2 )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gqa09ja.u6", 0x000000, 0x000008, BAD_DUMP CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a09jaa02", 0, BAD_DUMP SHA1(b085fbe76d5ef87578744b45b874b5f79147e586) )
ROM_END
@@ -6256,7 +6224,7 @@ ROM_START( salarymc )
ROM_REGION( 0x000008, "cassette:game:id", 0 )
ROM_LOAD( "gca18jaa.u6", 0x000000, 0x000008, CRC(ce84419e) SHA1(839e8ee080ecfc79021a06417d930e8b32dfc6a1) )
- DISK_REGION( "cdrom0" )
+ DISK_REGION( "runtime" )
DISK_IMAGE_READONLY( "a18jaa02", 0, SHA1(740cc93ec65433098153684fdfc418a098a43736) )
ROM_END
diff --git a/src/mame/misc/3do.cpp b/src/mame/misc/3do.cpp
index 595f4c8a336..f67a795d5fa 100644
--- a/src/mame/misc/3do.cpp
+++ b/src/mame/misc/3do.cpp
@@ -98,7 +98,7 @@ Part list of Goldstar 3DO Interactive Multiplayer
#include "cpu/arm/arm.h"
#include "cpu/arm7/arm7.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#define X2_CLOCK_PAL 59000000
diff --git a/src/mame/nec/pce_cd.cpp b/src/mame/nec/pce_cd.cpp
index e9df24d6f1b..c3d2027ba8f 100644
--- a/src/mame/nec/pce_cd.cpp
+++ b/src/mame/nec/pce_cd.cpp
@@ -142,8 +142,6 @@ void pce_cd_device::device_start()
m_ack_clear_timer = timer_alloc(FUNC(pce_cd_device::clear_ack), this);
m_ack_clear_timer->adjust(attotime::never);
- // m_cd_file pointer is setup at a later stage because it is still empty when this function is called
-
// TODO: add proper restore for the cd data...
save_pointer(NAME(m_bram), PCE_BRAM_SIZE * 2);
save_pointer(NAME(m_adpcm_ram), PCE_ADPCM_RAM_SIZE);
@@ -240,13 +238,12 @@ void pce_cd_device::device_reset()
void pce_cd_device::late_setup()
{
// at device start, the cdrom is not 'ready' yet, so we postpone this part of the initialization at machine_start in the driver
- m_cd_file = m_cdrom->get_cdrom_file();
- if (m_cd_file)
+ if (m_cdrom->exists())
{
- m_toc = &m_cd_file->get_toc();
- m_cdda->set_cdrom(m_cd_file);
- m_last_frame = m_cd_file->get_track_start(m_cd_file->get_last_track() - 1);
- m_last_frame += m_toc->tracks[m_cd_file->get_last_track() - 1].frames;
+ m_toc = &m_cdrom->get_toc();
+ m_cdda->set_cdrom(m_cdrom);
+ m_last_frame = m_cdrom->get_track_start(m_cdrom->get_last_track() - 1);
+ m_last_frame += m_toc->tracks[m_cdrom->get_last_track() - 1].frames;
m_end_frame = m_last_frame;
}
@@ -381,7 +378,7 @@ void pce_cd_device::reply_status_byte(uint8_t status)
void pce_cd_device::test_unit_ready()
{
LOGCMD("0x00 TEST UNIT READY: status send ");
- if (m_cd_file)
+ if (m_cdrom)
{
LOGCMD("STATUS_OK\n");
reply_status_byte(SCSI_STATUS_OK);
@@ -401,7 +398,7 @@ void pce_cd_device::read_6()
LOGCMD("0x08 READ(6): frame: %08x size: %08x\n", frame, frame_count);
/* Check for presence of a CD */
- if (!m_cd_file)
+ if (!m_cdrom)
{
reply_status_byte(SCSI_CHECK_CONDITION);
return;
@@ -440,7 +437,7 @@ void pce_cd_device::nec_set_audio_start_position()
const uint8_t mode = m_command_buffer[9] & 0xc0;
LOGCMD("0xd8 SET AUDIO PLAYBACK START POSITION (NEC): mode %02x\n", mode);
- if (!m_cd_file)
+ if (!m_cdrom)
{
/* Throw some error here */
reply_status_byte(SCSI_CHECK_CONDITION);
@@ -460,7 +457,7 @@ void pce_cd_device::nec_set_audio_start_position()
const u8 f = bcd_2_dec(m_command_buffer[4]);
frame = f + 75 * (s + m * 60);
- const u32 pregap = m_toc->tracks[m_cd_file->get_track(frame)].pregap;
+ const u32 pregap = m_toc->tracks[m_cdrom->get_track(frame)].pregap;
LOGCMD("MSF=%d %02d:%02d:%02d (pregap = %d)\n", frame, m, s, f, pregap);
// PCE tries to be clever here and set (start of track + track pregap size) to skip the pregap
@@ -473,7 +470,7 @@ void pce_cd_device::nec_set_audio_start_position()
case 0x80:
{
const u8 track_number = bcd_2_dec(m_command_buffer[2]);
- const u32 pregap = m_toc->tracks[m_cd_file->get_track(track_number - 1)].pregap;
+ const u32 pregap = m_toc->tracks[m_cdrom->get_track(track_number - 1)].pregap;
LOGCMD("TRACK=%d (pregap = %d)\n", track_number, pregap);
frame = m_toc->tracks[ track_number - 1 ].logframeofs;
// Not right for emeraldd, breaks intro lip sync
@@ -518,8 +515,8 @@ void pce_cd_device::nec_set_audio_start_position()
else
{
//m_cdda_status = PCE_CD_CDDA_PLAYING;
- m_end_frame = m_toc->tracks[ m_cd_file->get_track(m_current_frame) ].logframeofs
- + m_toc->tracks[ m_cd_file->get_track(m_current_frame) ].logframes;
+ m_end_frame = m_toc->tracks[ m_cdrom->get_track(m_current_frame) ].logframeofs
+ + m_toc->tracks[ m_cdrom->get_track(m_current_frame) ].logframes;
LOGCDDA("Audio start (end of track) current %d end %d\n", m_current_frame, m_end_frame);
// Several places definitely don't want this to start redbook,
@@ -558,7 +555,7 @@ void pce_cd_device::nec_set_audio_stop_position()
const uint8_t mode = m_command_buffer[9] & 0xc0;
LOGCMD("0xd9 SET AUDIO PLAYBACK END POSITION (NEC): mode %02x\n", mode);
- if (!m_cd_file)
+ if (!m_cdrom)
{
/* Throw some error here */
reply_status_byte(SCSI_CHECK_CONDITION);
@@ -578,7 +575,7 @@ void pce_cd_device::nec_set_audio_stop_position()
const u8 m = bcd_2_dec(m_command_buffer[2]);
const u8 s = bcd_2_dec(m_command_buffer[3]);
const u8 f = bcd_2_dec(m_command_buffer[4]);
- const u32 pregap = m_toc->tracks[m_cd_file->get_track(frame)].pregap;
+ const u32 pregap = m_toc->tracks[m_cdrom->get_track(frame)].pregap;
frame = f + 75 * (s + m * 60);
LOGCMD("MSF=%d %02d:%02d:%02d (pregap = %d)\n", frame, m, s, f, pregap);
@@ -588,7 +585,7 @@ void pce_cd_device::nec_set_audio_stop_position()
case 0x80:
{
const u8 track_number = bcd_2_dec(m_command_buffer[2]);
- const u32 pregap = m_toc->tracks[m_cd_file->get_track(track_number - 1)].pregap;
+ const u32 pregap = m_toc->tracks[m_cdrom->get_track(track_number - 1)].pregap;
// NB: crazyhos uses this command with track = 1 on pre-title screen intro.
// It's not supposed to playback anything according to real HW refs.
frame = m_toc->tracks[ track_number - 1 ].logframeofs;
@@ -645,7 +642,7 @@ void pce_cd_device::nec_set_audio_stop_position()
void pce_cd_device::nec_pause()
{
/* If no cd mounted throw an error */
- if (!m_cd_file)
+ if (!m_cdrom)
{
reply_status_byte(SCSI_CHECK_CONDITION);
return;
@@ -675,7 +672,7 @@ void pce_cd_device::nec_get_subq()
uint32_t msf_abs, msf_rel, track, frame;
//LOGCMD("0xdd READ SUBCHANNEL Q (NEC) %d\n", m_cdda_status);
- if (!m_cd_file)
+ if (!m_cdrom)
{
/* Throw some error here */
reply_status_byte(SCSI_CHECK_CONDITION);
@@ -700,10 +697,10 @@ void pce_cd_device::nec_get_subq()
}
msf_abs = cdrom_file::lba_to_msf_alt(frame);
- track = m_cd_file->get_track(frame);
- msf_rel = cdrom_file::lba_to_msf_alt(frame - m_cd_file->get_track_start(track));
+ track = m_cdrom->get_track(frame);
+ msf_rel = cdrom_file::lba_to_msf_alt(frame - m_cdrom->get_track_start(track));
- m_data_buffer[1] = 0x01 | ((m_cd_file->get_track_type(m_cd_file->get_track(track+1)) == cdrom_file::CD_TRACK_AUDIO) ? 0x00 : 0x40);
+ m_data_buffer[1] = 0x01 | ((m_cdrom->get_track_type(m_cdrom->get_track(track+1)) == cdrom_file::CD_TRACK_AUDIO) ? 0x00 : 0x40);
// track
m_data_buffer[2] = dec_2_bcd(track+1);
// index
@@ -742,13 +739,13 @@ void pce_cd_device::nec_get_dir_info()
uint32_t frame, msf, track = 0;
LOGCMD("0xde GET DIR INFO (NEC)\n");
- if (!m_cd_file)
+ if (!m_cdrom)
{
/* Throw some error here */
reply_status_byte(SCSI_CHECK_CONDITION);
}
- const cdrom_file::toc &toc = m_cd_file->get_toc();
+ const cdrom_file::toc &toc = m_cdrom->get_toc();
switch (m_command_buffer[1])
{
@@ -1097,7 +1094,7 @@ TIMER_CALLBACK_MEMBER(pce_cd_device::data_timer_callback)
{
/* Read next data sector */
LOGSCSI("read sector %d\n", m_current_frame);
- if (! m_cd_file->read_data(m_current_frame, m_data_buffer.get(), cdrom_file::CD_TRACK_MODE1))
+ if (! m_cdrom->read_data(m_current_frame, m_data_buffer.get(), cdrom_file::CD_TRACK_MODE1))
{
LOGSCSI("Mode1 CD read failed for frame #%d\n", m_current_frame);
}
diff --git a/src/mame/nec/pce_cd.h b/src/mame/nec/pce_cd.h
index 9c3445d2ca6..b77ebbad788 100644
--- a/src/mame/nec/pce_cd.h
+++ b/src/mame/nec/pce_cd.h
@@ -9,7 +9,7 @@
TYPE DEFINITIONS
***************************************************************************/
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/nvram.h"
#include "sound/cdda.h"
#include "sound/msm5205.h"
@@ -198,7 +198,6 @@ private:
required_device<nvram_device> m_nvram;
required_device<cdrom_image_device> m_cdrom;
- cdrom_file *m_cd_file = nullptr;
const cdrom_file::toc* m_toc = nullptr;
emu_timer *m_data_timer = nullptr;
emu_timer *m_adpcm_dma_timer = nullptr;
diff --git a/src/mame/neogeo/neogeocd.cpp b/src/mame/neogeo/neogeocd.cpp
index 0ffbcb818f1..eac8803e29e 100644
--- a/src/mame/neogeo/neogeocd.cpp
+++ b/src/mame/neogeo/neogeocd.cpp
@@ -28,7 +28,7 @@
#include "megacdcd.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/74259.h"
#include "machine/nvram.h"
diff --git a/src/mame/next/next.h b/src/mame/next/next.h
index 02ad9541704..78aca6cf6cd 100644
--- a/src/mame/next/next.h
+++ b/src/mame/next/next.h
@@ -16,7 +16,7 @@
#include "machine/ncr53c90.h"
#include "machine/mb8795.h"
#include "nextmo.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "imagedev/harddriv.h"
class next_state : public driver_device
diff --git a/src/mame/nichibutsu/csplayh5.cpp b/src/mame/nichibutsu/csplayh5.cpp
index 21d09b32c3d..375badbd307 100644
--- a/src/mame/nichibutsu/csplayh5.cpp
+++ b/src/mame/nichibutsu/csplayh5.cpp
@@ -14,12 +14,6 @@
DVD Notes:
- - Testing currently requires converting the data to cd mode 1
- format (extracthd, rename to .iso, createcd) then change the
- checksum. This will be fixed and the checksums changed to
- something different again, so don't do the intermediate step
- yet
-
- TMP68301 communicates with h8 via their respective internal serial comms
- TMP sends "?P", h8 answers "P01", TMP tends "?S", h8 answers "NG", games says the dvd drive has a problem
@@ -438,7 +432,7 @@ void csplayh5_state::tmp68301_parallel_port_w(uint16_t data)
static void atapi_devs(device_slot_interface &device)
{
- device.option_add("cdrom", ATAPI_FIXED_CDROM);
+ device.option_add("dvdrom", ATAPI_FIXED_DVDROM);
}
void csplayh5_state::csplayh5(machine_config &config)
@@ -455,7 +449,7 @@ void csplayh5_state::csplayh5(machine_config &config)
m_maincpu->tx0_handler().set(*m_subcpu->subdevice<h8_sci_device>("sci0"), FUNC(h8_sci_device::rx_w));
m_subcpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(m_maincpu, FUNC(tmp68301_device::rx0_w));
- HRDVD_ATA_CONTROLLER_DEVICE(config, m_ata).options(atapi_devs, "cdrom", nullptr, true); // dvd
+ HRDVD_ATA_CONTROLLER_DEVICE(config, m_ata).options(atapi_devs, "dvdrom", nullptr, true);
m_ata->irq_handler().set(FUNC(csplayh5_state::ata_irq));
m_ata->dmarq_handler().set(FUNC(csplayh5_state::ata_drq));
@@ -500,7 +494,7 @@ ROM_START( nichidvd )
ROM_REGION16_BE( 0x400000, "blit_gfx", ROMREGION_ERASEFF ) // blitter based gfxs
- DISK_REGION( "ata:0:cdrom" )
+ DISK_REGION( "ata:0:dvdrom" )
ROM_END
// TODO: this surely uses a different subboard
@@ -519,7 +513,7 @@ ROM_START( csplayh1 )
ROM_LOAD16_BYTE( "4.bin", 0x000001, 0x080000, CRC(2e63ee15) SHA1(78fefbc277234458212cded997d393bd8b82cf76) )
ROM_LOAD16_BYTE( "8.bin", 0x000000, 0x080000, CRC(a8567f1b) SHA1(2a854ef8b1988ad097bbcbeddc4b275ad738e1e1) )
- DISK_REGION( "ata:0:cdrom" )
+ DISK_REGION( "ata:0:dvdrom" )
DISK_IMAGE_READONLY( "csplayh1", 0, SHA1(d6514882c2626e62c5079df9ac68ecb70fc33209) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@@ -543,8 +537,8 @@ ROM_START( mjgalpri )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(4c92a523) SHA1(51da73fdfdfccdc070fa8a13163e031438b50876) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8001", 0, SHA1(30f356af4e08567273a88758bb0ddd3544eea228) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8001", 0, SHA1(7860688f8152ba7fdaeef5fec9eeb8e85c90b9a5) )
ROM_END
ROM_START( sengomjk )
@@ -561,8 +555,8 @@ ROM_START( sengomjk )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(20791a5a) SHA1(03c38e9b8e60b0dded7504b2725210df5405110c) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(1ed72387) SHA1(7e2b8ce49561d6fd79dcf0d427569e5f6ef8dc67) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8002", 0, SHA1(d3502496526e62a877f12dccc27b32ae33d3704d) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8002", 0, SHA1(0fac6bbe52bc7ed56ce786ed0690f7e150fc4f3e) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.bin", 0x000000, 0x000117, CRC(9f0dec43) SHA1(d836e564da496c3049e16f025daf362cced413d4) )
@@ -583,9 +577,8 @@ ROM_START( junai )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(4182dc30) SHA1(89601c62b74aff3d65b075d4b5cd1eb2ccf4e386) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "junai", 0, SHA1(0491533e0ce3e4d2af608ea0b9d9646316b512bd) )
-// DISK_IMAGE_READONLY( "junai", 0, SHA1(282cc528ff175ac55f1545481ca1c40377cf9347) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "junai", 0, SHA1(098925d09cfdd2c970edf40054b36423f6e71a42) )
ROM_END
ROM_START( csplayh5 )
@@ -603,8 +596,8 @@ ROM_START( csplayh5 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(113d7e96) SHA1(f3fb9c719544417a6a018b82f07c65bf73de21ff) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "csplayh5", 0, SHA1(ce4883ce1351ce5299e41bfbd9a5ae8078b82b8c) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "csplayh5", 0, SHA1(30a5262529196d2bf6608114781ccf20ab284e37) )
ROM_END
ROM_START( junai2 )
@@ -622,8 +615,8 @@ ROM_START( junai2 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(5b37c8dd) SHA1(8de5e2f92721c6679c6506850a442cafff89653f) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "junai2", 0, SHA1(dc9633a101f20f03fd9b4414c10274d2539fb7c2) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "junai2", 0, SHA1(ec11caa96833b80324e68f0345b000d702eaf6cb) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.ic8", 0x000000, 0x0008c1, BAD_DUMP CRC(01c2895a) SHA1(782166a60fa14d5faa5a92629f7ca65a878ad7fe) )
@@ -644,8 +637,8 @@ ROM_START( mogitate )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ea655990) SHA1(7f59cfab21e8858625e82a9501acc943b07f799c) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(4c910b86) SHA1(48007f03f4e445b9de15531afe821c1b18fccae1) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8006", 0, SHA1(aa911e46e791d89ce4fed4a32b4b0637ba3a9920) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8006", 0, SHA1(334c37710affc852bec750721280488530b3d1e0) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(ac5c9495) SHA1(1c54ecf6dedbf8c3a29207c1c91b52e2ff394d9d) )
@@ -665,8 +658,8 @@ ROM_START( mjmania )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(37dde764) SHA1(0530b63d8e682cdf01128057fdc3a8c23262afc9) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(dea4a2d2) SHA1(0118eb1330c9da8fead99f64fc015fd343fed79b) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "mjmania", 0, SHA1(7117f2045fd04a3d8f8e06a6a98e8f585c4da301) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "mjmania", 0, SHA1(777668854058b1586f599d266d1cea55c35aa30d) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.ic8", 0x000000, 0x0008c1, BAD_DUMP CRC(6a92b563) SHA1(a6c4305cf021f37845f99713427daa9394b6ec7d) )
@@ -687,8 +680,8 @@ ROM_START( renaimj )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(6d1c9efd) SHA1(c9ea9d6e6d34db5635fc55d41e7bb54a41948d27) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8008", 0, SHA1(49c92cb9b08ee7773f3d93fce0bbecc3c0ae654d) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8008", 0, SHA1(8dd445030e287f9e4380277d2163c4163182ab51) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal18v8b.020", 0x000000, 0x040000, CRC(0a32a144) SHA1(f3b4a1174adbb2f7b7500adeafa20142f6a16d08) )
@@ -709,8 +702,8 @@ ROM_START( bikiniko )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(1e2e1cf3) SHA1(f71b5dedf4f897644d519e412651152d0d81edb8) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "bikiniko", 0, SHA1(2189b676746dd848b9b5eb69f9663d6dccd63787) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "bikiniko", 0, SHA1(cac9a6c7fe86751c968cd15f7b779edbc14d5f0b) )
ROM_END
ROM_START( csplayh6 )
@@ -728,8 +721,8 @@ ROM_START( csplayh6 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(858e0604) SHA1(64c23bc06898188798937770129697b3c4b547d6) )
// 0x100000 - 0x3fffff empty sockets
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8010", 0, SHA1(01e247fe1b86bbfe743e09a625432874f881a9a0) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8010", 0, SHA1(5c3fab40d0cce94e80f2bdd533569d5507496ad4) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "palce16v8h.020_bad", 0x000000, 0x040000, BAD_DUMP CRC(2aec4e37) SHA1(79d64394c0f6f2c5e17ae9fc62eaa279da466ccd) )
@@ -749,8 +742,8 @@ ROM_START( thenanpa )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ee6b88c4) SHA1(64ae66a24f1639801c7bdda7faa0d604bb97ceb1) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(ce987845) SHA1(2f7dca32a79ad6afbc55ca1d492b582f952688ff) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "thenanpa", 0, SHA1(72bf8c75189e877508c5a64d5591738d23ed7e96) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "thenanpa", 0, SHA1(730848295802b8596929ffd22b81712ec4ea30a6) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.ic8", 0x000000, 0x0008c1, BAD_DUMP CRC(daffd0ac)SHA1(cbeff914163d425a9cb30fe8d62f91fca281b11f) )
@@ -770,8 +763,8 @@ ROM_START( pokoachu )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(843c288e) SHA1(2741b9da83fd35c7472b8c67bc02313a1c5e4e25) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(6920a9b8) SHA1(0a4cb9e2a0d871aed60c1293b7cac4bf79a9446c) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8012", 0, SHA1(06c611f110377f5d02bbde1ab1d43d3623772b7b) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8012", 0, SHA1(be6450351d6da4c96cbff353d587980a2728e306) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(ac5c9495) SHA1(1c54ecf6dedbf8c3a29207c1c91b52e2ff394d9d) )
@@ -791,8 +784,8 @@ ROM_START( csplayh7 )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(1d67ca95) SHA1(9b45045b6fa67308bade324f91c21010aa8d121e) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(b4f5f990) SHA1(88cccae04f89fef43d88f4e82b65de3de946e9af) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "csplayh7", 0, SHA1(f81e772745b0c62b17d91bd294993e49fe8da4d9) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "csplayh7", 0, SHA1(be6450351d6da4c96cbff353d587980a2728e306) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "mjdvd12.gal16v8b.ic8.bin", 0x000000, 0x0008c1, BAD_DUMP CRC(6a92b563)SHA1(a6c4305cf021f37845f99713427daa9394b6ec7d) )
@@ -812,8 +805,8 @@ ROM_START( aimode )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(4a9863cf) SHA1(ccf08befe773fb94fa78423ed19b6b8d255ca3a7) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(893aac1a) SHA1(14dd3f07363858c2be3a9400793f720b1f5baf1a) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8014", 0, SHA1(c5ad9bd66f0930e1c477126301286e38f077c164) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8014", 0, SHA1(f2aea46961630328d82ffc221c4b817b20fa9f5c) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(0a32a144) SHA1(f3b4a1174adbb2f7b7500adeafa20142f6a16d08) )
@@ -833,8 +826,8 @@ ROM_START( fuudol )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c9e8665) SHA1(2a1b040e5c72d4400d4b5c467c75ae99e9bb01e2) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(fdd79d8f) SHA1(f8bb82afaa28affb04b83270eb407129f1c7e611) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "fuudol", 0, SHA1(fabab43543ed14da4fe7c63a2a2cc4e68936938a) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "fuudol", 0, SHA1(d6b5af48775304caa1d98878dc8dc154c975720e) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.ic8", 0x000000, 0x0008c1, CRC(30719630) SHA1(a8c7b6d0304c38691775c5af6c32fbeeefd9f9fa) )
@@ -854,8 +847,8 @@ ROM_START( nuretemi )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c7af7f6) SHA1(78e58e3a81a6585c2c61f0026b7dc73a72c0d862) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(335b6388) SHA1(c5427b42af011b5a5026d905b1740684b9f6f953) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8016", 0, SHA1(607d9f390265da3f0c50753d0ea32257b12e8c08) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8016", 0, SHA1(76c7257e6c98e9dd8c594489c3104b2d032a9099) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.bin", 0x000000, 0x000117, CRC(865de327) SHA1(a97374ee765443d9da6919d0e226108c062f7942) )
@@ -875,8 +868,8 @@ ROM_START( tsuwaku )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(00657ca3) SHA1(a02bb8a177f3915ddf0bf97fd69426a3a28061a5) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(edf56c94) SHA1(76d95a45aced3ad8bfe8a561f355731f4f99603e) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8017", 0, SHA1(6c86985574d53f990c4eec573d7fa84782cb9c4c) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8017", 0, SHA1(0db86e6157b4bd402f0c41d0d69c1a80d2156b27) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8h.020", 0x000000, 0x040000, CRC(ac5c9495) SHA1(1c54ecf6dedbf8c3a29207c1c91b52e2ff394d9d) )
@@ -896,8 +889,8 @@ ROM_START( torarech )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(cbbbab5c) SHA1(ab8ae64b1f2acfab55ba7cbb173f3036a46001e6) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(18412fd8) SHA1(6907ce2739549519e1f3dcee2186f6add219a3c2) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8018", 0, SHA1(cf8758bb2caaba6377b354694123ddec71a4f8e1) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8018", 0, SHA1(b6cf54735bf6fded2ffb17e6fac84ae9a86ccaf2) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "palce16v8h.020", 0x000000, 0xbb2, BAD_DUMP CRC(c8e8605a) SHA1(02e43d9de73256e5c73d6f99834a23cef321d56b) )
@@ -917,8 +910,8 @@ ROM_START( nichisel )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5ab63481) SHA1(fc81fbdd1df496813fc0d80bcab6d0434b75d311) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(50085861) SHA1(b8f99a66a743c9bf66ef307fe4b581586e293fe5) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb80sp", 0, SHA1(48eb9f8adba0ea5f59cfcbdee61c29b4af84ac97) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb80sp", 0, SHA1(3bf53fef4b002bfd8515e4133f636e1c9b031931) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "palce16v8h.020", 0x000000, 0x040000, CRC(228b98fb) SHA1(53b57a09610425a5bb9d0ffe0f68dce2d9ab3bf6) )
@@ -938,8 +931,8 @@ ROM_START( konhaji )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(88f31da7) SHA1(dc76532fa3261b3b238a42e2ca8f270f2b2ea1fa) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(35893109) SHA1(6a55bd147a75913af59bc355abf010e1b75063bf) )
- DISK_REGION( "ata:0:cdrom" )
- DISK_IMAGE_READONLY( "nb8019", 0, SHA1(f59ac1587009d7d15618549dc60cbd24c263a95f) )
+ DISK_REGION( "ata:0:dvdrom" )
+ DISK_IMAGE_READONLY( "nb8019", 0, SHA1(a7b6dc0374b374b02e4a4eaf706330f961ebb563) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.bin", 0x000000, 0x000117, CRC(9f0dec43) SHA1(d836e564da496c3049e16f025daf362cced413d4) )
diff --git a/src/mame/philips/cdi.cpp b/src/mame/philips/cdi.cpp
index b8dd96dbf3e..8a97eb89395 100644
--- a/src/mame/philips/cdi.cpp
+++ b/src/mame/philips/cdi.cpp
@@ -51,7 +51,7 @@ TODO:
#include "cdi.h"
#include "cpu/m6805/m6805.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/timekpr.h"
#include "sound/cdda.h"
@@ -478,6 +478,8 @@ void cdi_state::cdimono1_base(machine_config &config)
CDI_SLAVE_HLE(config, m_slave_hle, 0);
m_slave_hle->int_callback().set(m_maincpu, FUNC(scc68070_device::in2_w));
+ CDROM(config, "cdrom").set_interface("cdi_cdrom");
+
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/philips/cdicdic.cpp b/src/mame/philips/cdicdic.cpp
index 5094d971780..a82f2a5846c 100644
--- a/src/mame/philips/cdicdic.cpp
+++ b/src/mame/philips/cdicdic.cpp
@@ -931,7 +931,7 @@ void cdicdic_device::process_disc_sector()
LOGMASKED(LOG_SECTORS, "Disc sector, current LBA: %08x, MSF: %02x %02x %02x\n", real_lba, mins_bcd, secs_bcd, frac_bcd);
uint8_t buffer[2560] = { 0 };
- m_cd->read_data(m_curr_lba, buffer, cdrom_file::CD_TRACK_RAW_DONTCARE);
+ m_cdrom->read_data(m_curr_lba, buffer, cdrom_file::CD_TRACK_RAW_DONTCARE);
// Detect (badly) if we're dealing with a byteswapped loose-bin image
if (buffer[0] == 0xff && buffer[1] == 0x00)
@@ -1022,7 +1022,7 @@ void cdicdic_device::process_disc_sector()
if (m_disc_mode == DISC_TOC)
{
uint8_t *toc_buffer = buffer;
- const cdrom_file::toc &toc = m_cd->get_toc();
+ const cdrom_file::toc &toc = m_cdrom->get_toc();
uint32_t entry_count = 0;
// Determine total frame count for data, and total audio track count
@@ -1473,7 +1473,7 @@ cdicdic_device::cdicdic_device(const machine_config &mconfig, const char *tag, d
, m_memory_space(*this, ":maincpu", AS_PROGRAM)
, m_dmadac(*this, ":dac%u", 1U)
, m_scc(*this, ":maincpu")
- , m_cdrom_dev(*this, ":cdrom")
+ , m_cdrom(*this, ":cdrom")
, m_clock2(clock)
{
}
@@ -1564,17 +1564,6 @@ void cdicdic_device::device_reset()
m_decoding_audio_map = false;
m_decode_addr = 0;
- if (m_cdrom_dev)
- {
- // Console case (has CDROM device)
- m_cd = m_cdrom_dev->get_cdrom_file();
- }
- else
- {
- // Arcade case
- m_cd = new cdrom_file(machine().rom_load().get_disk_handle(":cdrom"));
- }
-
m_audio_timer->adjust(attotime::from_hz(75), 0, attotime::from_hz(75));
m_sector_timer->adjust(attotime::from_hz(75), 0, attotime::from_hz(75));
diff --git a/src/mame/philips/cdicdic.h b/src/mame/philips/cdicdic.h
index 90c886ed5e0..46d7816122c 100644
--- a/src/mame/philips/cdicdic.h
+++ b/src/mame/philips/cdicdic.h
@@ -26,11 +26,10 @@ TODO:
#pragma once
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/scc68070.h"
#include "sound/cdda.h"
#include "sound/dmadac.h"
-#include "cdrom.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -156,7 +155,7 @@ private:
required_address_space m_memory_space;
required_device_array<dmadac_sound_device, 2> m_dmadac;
required_device<scc68070_device> m_scc;
- optional_device<cdrom_image_device> m_cdrom_dev;
+ required_device<cdrom_image_device> m_cdrom;
uint32_t m_clock2;
@@ -174,7 +173,6 @@ private:
uint16_t m_interrupt_vector; // CDIC Interrupt Vector Register (0x303ffc)
uint16_t m_data_buffer; // CDIC Data Buffer Register (0x303ffe)
- cdrom_file *m_cd;
bool m_cd_byteswap;
emu_timer *m_sector_timer;
diff --git a/src/mame/quantel/dpb7000.cpp b/src/mame/quantel/dpb7000.cpp
index 624b10952b6..98a08efbaa2 100644
--- a/src/mame/quantel/dpb7000.cpp
+++ b/src/mame/quantel/dpb7000.cpp
@@ -111,7 +111,6 @@ public:
, m_floppy0(*this, "0")
, m_hdd(*this, "hdd")
, m_floppy(nullptr)
- , m_hdd_file(nullptr)
, m_output_cursor(*this, "output_timing_cursor")
, m_output_hlines(*this, "output_timing_hlines")
, m_output_hflags(*this, "output_timing_hflags")
@@ -241,9 +240,6 @@ private:
uint8_t m_fdd_side;
fdc_pll_t m_fdd_pll;
- // Hard Disk
- hard_disk_file *m_hdd_file;
-
// Timers
emu_timer *m_diskseq_complete_clk;
emu_timer *m_field_in_clk;
@@ -999,9 +995,6 @@ void dpb7000_state::machine_reset()
m_fdd_pll.reset(machine().time());
m_floppy = nullptr;
- // Hard Disc Handling
- m_hdd_file = m_hdd->get_hard_disk_file();
-
// Disc Data Buffer Card
m_diskbuf_ram_addr = 0;
memset(m_diskbuf_ram, 0, 14 * 0x800);
@@ -2409,7 +2402,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
int head_index = m_diskseq_cmd_word_from_cpu & 0xf;
int image_lba = SECTORS_PER_TRACK * head_count * (int)m_diskseq_cyl_from_cpu + SECTORS_PER_TRACK * head_index;
- if (m_hdd_file != nullptr)
+ if (m_hdd->exists())
{
if (m_diskseq_cyl_write_pending)
{
@@ -2420,14 +2413,14 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
{
for (int sector = start_sector; sector < 19200 / 256; sector++, image_lba++)
{
- m_hdd_file->read(image_lba, sector_buffer);
+ m_hdd->read(image_lba, sector_buffer);
for (int stride_idx = 0; stride_idx < 256; stride_idx += 2)
{
sector_buffer[stride_idx] = m_diskbuf_ram[ram_addr];
ram_addr += 2;
}
LOGMASKED(LOG_HDD, "Performing write to LBA %d: Cylinder %03x, head %x, command word %03x, Stride 2 (RAM address %04x, offset %04x)\n", image_lba, m_diskseq_cyl_from_cpu, head_index, m_diskseq_cmd_word_from_cpu, m_diskbuf_ram_addr, sector * 256);
- m_hdd_file->write(image_lba, sector_buffer);
+ m_hdd->write(image_lba, sector_buffer);
}
}
else
@@ -2442,7 +2435,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
sector_buffer[i + 0] = process_byte_to_disc();
sector_buffer[i + 1] = process_byte_to_disc();
}
- m_hdd_file->write(image_lba, sector_buffer);
+ m_hdd->write(image_lba, sector_buffer);
}
}
else
@@ -2450,7 +2443,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
for (int sector = start_sector; sector < 19200 / 256; sector++, image_lba++)
{
LOGMASKED(LOG_HDD, "Performing write to LBA %d: Cylinder %03x, head %x, command word %03x (RAM address %04x, offset %04x)\n", image_lba, m_diskseq_cyl_from_cpu, head_index, m_diskseq_cmd_word_from_cpu, m_diskbuf_ram_addr, sector * 256);
- m_hdd_file->write(image_lba, m_diskbuf_ram + sector * 256);
+ m_hdd->write(image_lba, m_diskbuf_ram + sector * 256);
}
}
}
@@ -2464,7 +2457,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
for (int sector = 0; sector < 19200 / 256; sector++, image_lba++)
{
LOGMASKED(LOG_HDD, "Performing read of LBA %d: Cylinder %03x, head %x, command word %03x\n", image_lba, m_diskseq_cyl_from_cpu, head_index, m_diskseq_cmd_word_from_cpu);
- m_hdd_file->read(image_lba, sector_buffer);
+ m_hdd->read(image_lba, sector_buffer);
for (int clear_idx = 0; clear_idx < 256; clear_idx += 2)
{
sector_buffer[clear_idx] = 0;
@@ -2489,7 +2482,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
if (partial_bytes && !BIT(m_diskseq_cmd, 2))
{
LOGMASKED(LOG_HDD, "Performing partial read of sector into disk buffer address %04x\n", m_diskbuf_ram_addr);
- m_hdd_file->read(image_lba, sector_buffer);
+ m_hdd->read(image_lba, sector_buffer);
memcpy(m_diskbuf_ram + m_diskbuf_ram_addr, sector_buffer + partial_bytes, 0x100 - partial_bytes);
m_diskbuf_ram_addr += 0x100;
m_diskbuf_ram_addr &= 0xff00;
@@ -2501,7 +2494,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
LOGMASKED(LOG_HDD, "Performing read of LBA %d: Cylinder %03x, head %x, command word %03x\n", image_lba, m_diskseq_cyl_from_cpu, head_index, m_diskseq_cmd_word_from_cpu);
if (BIT(m_diskseq_cmd, 2))
{
- m_hdd_file->read(image_lba, sector_buffer);
+ m_hdd->read(image_lba, sector_buffer);
for (int i = 0; i < 256; i++)
{
process_byte_from_disc(sector_buffer[i]);
@@ -2509,7 +2502,7 @@ TIMER_CALLBACK_MEMBER(dpb7000_state::execute_hdd_command)
}
else
{
- m_hdd_file->read(image_lba, m_diskbuf_ram + sector * 256);
+ m_hdd->read(image_lba, m_diskbuf_ram + sector * 256);
}
}
}
diff --git a/src/mame/sega/dccons.cpp b/src/mame/sega/dccons.cpp
index 3535c08dd09..9cc26768325 100644
--- a/src/mame/sega/dccons.cpp
+++ b/src/mame/sega/dccons.cpp
@@ -55,7 +55,7 @@
#include "cpu/arm7/arm7.h"
#include "cpu/arm7/arm7core.h"
#include "cpu/sh/sh4.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/aicartc.h"
//#include "emupal.h"
@@ -429,7 +429,7 @@ void dc_cons_state::dc_base(machine_config &config)
m_ata->irq_handler().set(FUNC(dc_cons_state::ata_interrupt));
ata_slot_device &ata_0(*subdevice<ata_slot_device>("ata:0"));
- ata_0.option_add("gdrom", GDROM);
+ ata_0.option_add("gdrom", ATAPI_GDROM);
ata_0.set_option_machine_config("gdrom", gdrom_config);
ata_0.set_default_option("gdrom");
}
diff --git a/src/mame/sega/dccons.h b/src/mame/sega/dccons.h
index 1bad460cd38..27bc4639fd5 100644
--- a/src/mame/sega/dccons.h
+++ b/src/mame/sega/dccons.h
@@ -8,7 +8,7 @@
#include "dc.h"
#include "bus/ata/ataintf.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/intelfsh.h"
class dc_cons_state : public dc_state
diff --git a/src/mame/sega/mdconsole.cpp b/src/mame/sega/mdconsole.cpp
index 6222d4e0791..7cb150ee65a 100644
--- a/src/mame/sega/mdconsole.cpp
+++ b/src/mame/sega/mdconsole.cpp
@@ -6,7 +6,8 @@
#include "bus/generic/carts.h"
#include "bus/sms_ctrl/controllers.h"
-#include "imagedev/chd_cd.h"
+#include "bus/generic/slot.h"
+#include "imagedev/cdromimg.h"
#include "sound/sn76496.h"
#include "softlist.h"
diff --git a/src/mame/sega/naomigd.cpp b/src/mame/sega/naomigd.cpp
index c692601bd18..374f3fe6d5b 100644
--- a/src/mame/sega/naomigd.cpp
+++ b/src/mame/sega/naomigd.cpp
@@ -434,7 +434,7 @@ void idegdrom_device::map_extra(uint64_t memory_window_start, uint64_t memory_wi
static void gdrom_devices(device_slot_interface &device)
{
- device.option_add("gdrom", GDROM);
+ device.option_add("gdrom", ATAPI_GDROM);
}
diff --git a/src/mame/shared/isbc_215g.cpp b/src/mame/shared/isbc_215g.cpp
index 7bcc0211c5c..2945b5d1068 100644
--- a/src/mame/shared/isbc_215g.cpp
+++ b/src/mame/shared/isbc_215g.cpp
@@ -64,7 +64,7 @@ uint16_t isbc_215g_device::read_sector()
uint16_t wps = 64 << ((m_idcompare[0] >> 4) & 3);
harddisk_image_device *drive = (m_drive ? m_hdd1 : m_hdd0);
if(!m_secoffset)
- drive->get_hard_disk_file()->read(m_lba[m_drive], m_sector);
+ drive->read(m_lba[m_drive], m_sector);
if(m_secoffset >= wps)
return 0;
return m_sector[m_secoffset++];
@@ -79,7 +79,7 @@ bool isbc_215g_device::write_sector(uint16_t data)
m_sector[m_secoffset++] = data;
if(m_secoffset == wps)
{
- drive->get_hard_disk_file()->write(m_lba[m_drive], m_sector);
+ drive->write(m_lba[m_drive], m_sector);
return true;
}
return false;
@@ -386,12 +386,12 @@ const tiny_rom_entry *isbc_215g_device::device_rom_region() const
void isbc_215g_device::device_reset()
{
- if(m_hdd0->get_hard_disk_file())
- m_geom[0] = &m_hdd0->get_hard_disk_file()->get_info();
+ if(m_hdd0->exists())
+ m_geom[0] = &m_hdd0->get_info();
else
m_geom[0] = nullptr;
- if(m_hdd1->get_hard_disk_file())
- m_geom[1] = &m_hdd1->get_hard_disk_file()->get_info();
+ if(m_hdd1->exists())
+ m_geom[1] = &m_hdd1->get_info();
else
m_geom[1] = nullptr;
diff --git a/src/mame/shared/megacdcd.cpp b/src/mame/shared/megacdcd.cpp
index 22759b96a3a..d4f2ffcb153 100644
--- a/src/mame/shared/megacdcd.cpp
+++ b/src/mame/shared/megacdcd.cpp
@@ -311,7 +311,7 @@ void lc89510_temp_device::CDD_GetPos(void)
CLEAR_CDD_RESULT
uint32_t msf;
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
CDD_STATUS |= SCD_STATUS;
msf = cdrom_file::lba_to_msf_alt(SCD_CURLBA+150);
@@ -327,12 +327,12 @@ void lc89510_temp_device::CDD_GetTrackPos(void)
uint32_t msf;
CDD_STATUS &= 0xFF;
// uint32_t end_msf = ;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
CDD_STATUS |= SCD_STATUS;
- elapsedlba = SCD_CURLBA - segacd.toc->tracks[ segacd.cd->get_track(SCD_CURLBA) ].logframeofs;
+ elapsedlba = SCD_CURLBA - segacd.toc->tracks[ m_cdrom->get_track(SCD_CURLBA) ].logframeofs;
msf = cdrom_file::lba_to_msf_alt (elapsedlba);
- //popmessage("%08x %08x",SCD_CURLBA,segacd.toc->tracks[ cdrom_get_track(segacd.cd, SCD_CURLBA) + 1 ].logframeofs);
+ //popmessage("%08x %08x",SCD_CURLBA,segacd.toc->tracks[ cdrom_get_track(m_cdrom, SCD_CURLBA) + 1 ].logframeofs);
CDD_MIN = to_bcd(((msf & 0x00ff0000)>>16),false);
CDD_SEC = to_bcd(((msf & 0x0000ff00)>>8),false);
CDD_FRAME = to_bcd(((msf & 0x000000ff)>>0),false);
@@ -342,10 +342,10 @@ void lc89510_temp_device::CDD_GetTrack(void)
{
CLEAR_CDD_RESULT
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
CDD_STATUS |= SCD_STATUS;
- SCD_CURTRK = segacd.cd->get_track(SCD_CURLBA)+1;
+ SCD_CURTRK = m_cdrom->get_track(SCD_CURLBA)+1;
CDD_MIN = to_bcd(SCD_CURTRK, false);
}
@@ -353,11 +353,11 @@ void lc89510_temp_device::CDD_Length(void)
{
CLEAR_CDD_RESULT
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
CDD_STATUS |= SCD_STATUS;
- uint32_t startlba = (segacd.toc->tracks[segacd.cd->get_last_track()].logframeofs);
+ uint32_t startlba = (segacd.toc->tracks[m_cdrom->get_last_track()].logframeofs);
uint32_t startmsf = cdrom_file::lba_to_msf_alt( startlba );
CDD_MIN = to_bcd((startmsf&0x00ff0000)>>16,false);
@@ -370,11 +370,11 @@ void lc89510_temp_device::CDD_FirstLast(void)
{
CLEAR_CDD_RESULT
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
CDD_STATUS |= SCD_STATUS;
CDD_MIN = 1; // first
- CDD_SEC = to_bcd(segacd.cd->get_last_track(),false); // last
+ CDD_SEC = to_bcd(m_cdrom->get_last_track(),false); // last
}
void lc89510_temp_device::CDD_GetTrackAdr(void)
@@ -382,11 +382,11 @@ void lc89510_temp_device::CDD_GetTrackAdr(void)
CLEAR_CDD_RESULT
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
int track = (CDD_TX[5] & 0xF) + (CDD_TX[4] & 0xF) * 10;
- int last_track = segacd.cd->get_last_track();
+ int last_track = m_cdrom->get_last_track();
CDD_STATUS |= SCD_STATUS;
@@ -415,11 +415,11 @@ void lc89510_temp_device::CDD_GetTrackType(void)
CLEAR_CDD_RESULT
CDD_STATUS &= 0xFF;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
int track = (CDD_TX[5] & 0xF) + (CDD_TX[4] & 0xF) * 10;
- int last_track = segacd.cd->get_last_track();
+ int last_track = m_cdrom->get_last_track();
CDD_STATUS |= SCD_STATUS;
@@ -455,10 +455,10 @@ void lc89510_temp_device::CDD_Play()
CLEAR_CDD_RESULT
uint32_t msf = getmsf_from_regs();
SCD_CURLBA = cdrom_file::msf_to_lba(msf)-150;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
- uint32_t track_length = segacd.toc->tracks[ segacd.cd->get_track(SCD_CURLBA) ].logframes;
- SCD_CURTRK = segacd.cd->get_track(SCD_CURLBA)+1;
+ uint32_t track_length = segacd.toc->tracks[ m_cdrom->get_track(SCD_CURLBA) ].logframes;
+ SCD_CURTRK = m_cdrom->get_track(SCD_CURLBA)+1;
LC8951UpdateHeader();
SCD_STATUS = CDD_PLAYINGCDDA;
CDD_STATUS = 0x0102;
@@ -480,9 +480,9 @@ void lc89510_temp_device::CDD_Seek(void)
CLEAR_CDD_RESULT
uint32_t msf = getmsf_from_regs();
SCD_CURLBA = cdrom_file::msf_to_lba(msf)-150;
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
- SCD_CURTRK = segacd.cd->get_track(SCD_CURLBA)+1;
+ SCD_CURTRK = m_cdrom->get_track(SCD_CURLBA)+1;
LC8951UpdateHeader();
STOP_CDC_READ
SCD_STATUS = CDD_READY;
@@ -513,9 +513,9 @@ void lc89510_temp_device::CDD_Resume()
{
CLEAR_CDD_RESULT
STOP_CDC_READ
- if(segacd.cd == nullptr) // no CD is there, bail out
+ if(m_cdrom == nullptr) // no CD is there, bail out
return;
- SCD_CURTRK = segacd.cd->get_track(SCD_CURLBA)+1;
+ SCD_CURTRK = m_cdrom->get_track(SCD_CURLBA)+1;
SCD_STATUS = CDD_PLAYINGCDDA;
CDD_STATUS = 0x0102;
set_data_audio_mode();
@@ -1107,19 +1107,13 @@ void lc89510_temp_device::reset_cd(void)
lc89510_Reset();
{
- segacd.cd = m_cdrom->get_cdrom_file();
- if ( segacd.cd )
+ if ( m_cdrom->exists() )
{
- segacd.toc = &segacd.cd->get_toc();
- m_cdda->set_cdrom(segacd.cd);
+ segacd.toc = &m_cdrom->get_toc();
+ m_cdda->set_cdrom(m_cdrom);
m_cdda->stop_audio(); //stop any pending CD-DA
}
}
-
-
-
-// if (segacd.cd)
-// printf("cd found\n");
}
@@ -1335,7 +1329,7 @@ int lc89510_temp_device::Read_LBA_To_Buffer()
if (CDD_CONTROL & 0x0100) data_track = true;
if (data_track)
- segacd.cd->read_data(SCD_CURLBA, SCD_BUFFER, cdrom_file::CD_TRACK_MODE1);
+ m_cdrom->read_data(SCD_CURLBA, SCD_BUFFER, cdrom_file::CD_TRACK_MODE1);
LC8951UpdateHeader();
diff --git a/src/mame/shared/megacdcd.h b/src/mame/shared/megacdcd.h
index b02ca3fd601..ba6d6049947 100644
--- a/src/mame/shared/megacdcd.h
+++ b/src/mame/shared/megacdcd.h
@@ -3,7 +3,7 @@
#ifndef MAME_SHARED_SEGACDCD_H
#define MAME_SHARED_SEGACDCD_H
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "machine/timer.h"
#include "sound/cdda.h"
@@ -91,7 +91,6 @@ protected:
struct segacd_t
{
- cdrom_file *cd;
const cdrom_file::toc *toc;
uint32_t current_frame;
};
diff --git a/src/mame/skeleton/vsmilepro.cpp b/src/mame/skeleton/vsmilepro.cpp
index 104a8e70a80..6886146f9dd 100644
--- a/src/mame/skeleton/vsmilepro.cpp
+++ b/src/mame/skeleton/vsmilepro.cpp
@@ -22,7 +22,7 @@
#include "cdrom.h"
#include "cpu/arm7/arm7.h"
#include "cpu/arm7/arm7core.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "softlist.h"
diff --git a/src/mame/sony/psx.cpp b/src/mame/sony/psx.cpp
index aea6ae13c16..cf7b59dd7ff 100644
--- a/src/mame/sony/psx.cpp
+++ b/src/mame/sony/psx.cpp
@@ -15,7 +15,7 @@
#include "bus/psx/parallel.h"
#include "cpu/m6805/m6805.h"
#include "cpu/psx/psx.h"
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "imagedev/snapquik.h"
#include "psxcd.h"
#include "machine/ram.h"
diff --git a/src/mame/sony/psxcd.h b/src/mame/sony/psxcd.h
index 55819fff940..33532a9c9a7 100644
--- a/src/mame/sony/psxcd.h
+++ b/src/mame/sony/psxcd.h
@@ -5,7 +5,7 @@
#pragma once
-#include "imagedev/chd_cd.h"
+#include "imagedev/cdromimg.h"
#include "sound/spu.h"
diff --git a/src/tools/chdman.cpp b/src/tools/chdman.cpp
index bbbc81d4526..52b611ed0d3 100644
--- a/src/tools/chdman.cpp
+++ b/src/tools/chdman.cpp
@@ -70,6 +70,7 @@ const int MODE_GDI = 2;
#define COMMAND_CREATE_RAW "createraw"
#define COMMAND_CREATE_HD "createhd"
#define COMMAND_CREATE_CD "createcd"
+#define COMMAND_CREATE_DVD "createdvd"
#define COMMAND_CREATE_LD "createld"
#define COMMAND_EXTRACT_RAW "extractraw"
#define COMMAND_EXTRACT_HD "extracthd"
@@ -124,6 +125,7 @@ static void do_verify(parameters_map &params);
static void do_create_raw(parameters_map &params);
static void do_create_hd(parameters_map &params);
static void do_create_cd(parameters_map &params);
+static void do_create_dvd(parameters_map &params);
static void do_create_ld(parameters_map &params);
static void do_copy(parameters_map &params);
static void do_extract_raw(parameters_map &params);
@@ -699,6 +701,16 @@ static const command_description s_commands[] =
OPTION_NUMPROCESSORS
}
},
+ { COMMAND_CREATE_DVD, do_create_dvd, ": create a DVD CHD from the input file",
+ {
+ REQUIRED OPTION_OUTPUT,
+ OPTION_OUTPUT_PARENT,
+ OPTION_OUTPUT_FORCE,
+ REQUIRED OPTION_INPUT,
+ OPTION_COMPRESSION,
+ OPTION_NUMPROCESSORS
+ }
+ },
{ COMMAND_CREATE_LD, do_create_ld, ": create a laserdisc CHD from the input file",
{
@@ -2065,6 +2077,88 @@ static void do_create_cd(parameters_map &params)
//-------------------------------------------------
+// do_create_dvd - create a new compressed dvd
+// image from a raw file
+//-------------------------------------------------
+
+static void do_create_dvd(parameters_map &params)
+{
+ // process input file
+ util::core_file::ptr input_file;
+ auto input_file_str = params.find(OPTION_INPUT);
+ if (input_file_str != params.end())
+ {
+ std::error_condition const filerr = util::core_file::open(*input_file_str->second, OPEN_FLAG_READ, input_file);
+ if (filerr)
+ report_error(1, "Unable to open file (%s): %s", *input_file_str->second, filerr.message());
+ }
+
+ // process output CHD
+ chd_file output_parent;
+ std::string *output_chd_str = parse_output_chd_parameters(params, output_parent);
+
+ // process input start/end
+ uint64_t filesize = 0;
+ input_file->length(filesize); // FIXME: check error return
+
+ // process compression
+ chd_codec_type compression[4];
+ memcpy(compression, s_default_hd_compression, sizeof(compression)); // No reason to be different than HD for compression
+ if (!input_file)
+ compression[0] = compression[1] = compression[2] = compression[3] = CHD_CODEC_NONE;
+ parse_compression(params, compression);
+
+ // process numprocessors
+ parse_numprocessors(params);
+
+ // validate the size
+ if (filesize % 2048 != 0)
+ report_error(1, "Data size is not divisible by 2048");
+
+ uint32_t totalsectors = filesize / 2048;
+
+ // print some info
+ printf("Output CHD: %s\n", output_chd_str->c_str());
+ if (output_parent.opened())
+ printf("Parent CHD: %s\n", params.find(OPTION_OUTPUT_PARENT)->second->c_str());
+ printf("Input file: %s\n", input_file_str->second->c_str());
+ printf("Compression: %s\n", compression_string(compression).c_str());
+ printf("Logical size: %s\n", big_int_string(uint64_t(totalsectors) * 2048).c_str());
+
+ // catch errors so we can close & delete the output file
+ try
+ {
+ // create the new dvd
+ std::unique_ptr<chd_file_compressor> chd;
+ chd.reset(new chd_rawfile_compressor(*input_file, 0, filesize));
+ std::error_condition err;
+ if (output_parent.opened())
+ err = chd->create(output_chd_str->c_str(), uint64_t(totalsectors) * 2048, 2048, compression, output_parent);
+ else
+ err = chd->create(output_chd_str->c_str(), uint64_t(totalsectors) * 2048, 2048, 2048, compression);
+ if (err)
+ report_error(1, "Error creating CHD file (%s): %s", output_chd_str, err.message());
+
+ // add the standard dvd type tag
+ err = chd->write_metadata(DVD_METADATA_TAG, 0, "");
+ if (err)
+ report_error(1, "Error adding dvd metadata: %s", err.message());
+
+ // compress it generically
+ compress_common(*chd);
+ }
+ catch (...)
+ {
+ // delete the output file
+ auto output_chd_str = params.find(OPTION_OUTPUT);
+ if (output_chd_str != params.end())
+ osd_file::remove(*output_chd_str->second);
+ throw;
+ }
+}
+
+
+//-------------------------------------------------
// do_create_ld - create a new A/V file from an
// input AVI file and metadata
//-------------------------------------------------