// license:BSD-3-Clause // copyright-holders:smf /*************************************************************************** t10mmc.h ***************************************************************************/ #ifndef MAME_MACHINE_T10MMC_H #define MAME_MACHINE_T10MMC_H #pragma once #include "t10spc.h" #include "imagedev/cdromimg.h" #include "sound/cdda.h" class t10mmc : public virtual t10spc { public: t10mmc() : 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 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; enum { T10MMC_CMD_READ_SUB_CHANNEL = 0x42, T10MMC_CMD_READ_TOC_PMA_ATIP = 0x43, T10MMC_CMD_PLAY_AUDIO_10 = 0x45, T10MMC_CMD_PLAY_AUDIO_MSF = 0x47, T10MMC_CMD_PLAY_AUDIO_TRACK_INDEX = 0x48, T10MMC_CMD_PAUSE_RESUME = 0x4b, T10MMC_CMD_STOP_PLAY_SCAN = 0x4e, T10MMC_CMD_PLAY_AUDIO_12 = 0xa5, T10MMC_CMD_READ_DISC_STRUCTURE = 0xad, T10MMC_CMD_SET_CD_SPEED = 0xbb, 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 }; void abort_audio(); toc_format_t toc_format(); int toc_tracks(); cdrom_image_device *m_image; cdda_device *m_cdda; std::string m_model_name; uint32_t m_lba; uint32_t m_blocks; uint32_t m_last_lba; uint32_t m_num_subblocks; uint32_t m_cur_subblock; int m_audio_sense; int m_sotc; uint8_t m_read_cd_flags; device_t *m_device; }; #endif // MAME_MACHINE_T10MMC_H