summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/t10mmc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/t10mmc.h')
-rw-r--r--src/devices/machine/t10mmc.h45
1 files changed, 37 insertions, 8 deletions
diff --git a/src/devices/machine/t10mmc.h b/src/devices/machine/t10mmc.h
index 351454cb2b6..852e21db046 100644
--- a/src/devices/machine/t10mmc.h
+++ b/src/devices/machine/t10mmc.h
@@ -12,23 +12,23 @@ 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_model_name("MAME Virtual CDROM 1.0 "), 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;
+ void set_model(std::string model_name);
+
protected:
virtual void t10_start(device_t &device) override;
virtual void t10_reset() override;
@@ -43,13 +43,40 @@ protected:
T10MMC_CMD_PAUSE_RESUME = 0x4b,
T10MMC_CMD_STOP_PLAY_SCAN = 0x4e,
T10MMC_CMD_PLAY_AUDIO_12 = 0xa5,
- T10MMC_CMD_SET_CD_SPEED = 0xbb
+ T10MMC_CMD_READ_DISC_STRUCTURE = 0xad,
+ T10MMC_CMD_SET_CD_SPEED = 0xbb,
+ T10MMC_CMD_MECHANISM_STATUS = 0xbd,
+ T10MMC_CMD_READ_CD = 0xbe
+ };
+
+ enum
+ {
+ T10MMC_READ_CD_SECTOR_TYPE_ANY = 0,
+ T10MMC_READ_CD_SECTOR_TYPE_CDDA = 1,
+ T10MMC_READ_CD_SECTOR_TYPE_MODE1 = 2,
+ T10MMC_READ_CD_SECTOR_TYPE_MODE2 = 3,
+ T10MMC_READ_CD_SECTOR_TYPE_MODE2_FORM1 = 4,
+ T10MMC_READ_CD_SECTOR_TYPE_MODE2_FORM2 = 5,
+
+ // These shouldn't be treated as masks, 3 is a reserved value
+ T10MMC_READ_CD_C2_ONLY = 1, // C2 error bits (294 bytes)
+ T10MMC_READ_CD_C2_BLOCK = 2, // C2 error bits (294 bytes) + block error byte (logical OR of all the C2 error bit bytes) + 1 padding byte
+
+ T10MMC_READ_CD_FIELD_ECC = 0x08, // EDC/ECC
+ T10MMC_READ_CD_FIELD_USER_DATA = 0x10,
+ T10MMC_READ_CD_FIELD_HEADER = 0x20,
+ T10MMC_READ_CD_FIELD_SUBHEADER = 0x40,
+ T10MMC_READ_CD_FIELD_SYNC = 0x80,
};
enum toc_format_t
{
- TOC_FORMAT_TRACKS = 0,
- TOC_FORMAT_SESSIONS = 1
+ TOC_FORMAT_TRACKS = 0, // legacy toc
+ TOC_FORMAT_SESSIONS = 1, // multi-session information
+ TOC_FORMAT_FULL_TOC = 2, // full TOC - includes sessions, lead-ins, lead-outs
+ TOC_FORMAT_PMA = 3, // PMA
+ TOC_FORMAT_ATIP = 4, // ATIP
+ TOC_FORMAT_CDTEXT = 5, // valid only for CD audio discs
};
void abort_audio();
@@ -58,7 +85,8 @@ protected:
cdrom_image_device *m_image;
cdda_device *m_cdda;
- cdrom_file *m_cdrom;
+
+ std::string m_model_name;
uint32_t m_lba;
uint32_t m_blocks;
@@ -67,6 +95,7 @@ protected:
uint32_t m_cur_subblock;
int m_audio_sense;
int m_sotc;
+ uint8_t m_read_cd_flags;
device_t *m_device;
};