diff options
Diffstat (limited to 'src/devices/machine/t10mmc.h')
-rw-r--r-- | src/devices/machine/t10mmc.h | 45 |
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; }; |