mirror of
https://github.com/holub/mame
synced 2025-06-08 13:53:52 +03:00
machine/t10mmc.cpp: Added stub CD-TEXT TOC read; util/cdrom.cpp: Handle control flags in TOC files. (#12954)
* machine/t10mmc.cpp: Return dummy data for CD-TEXT format TOC read. * machine/t10mmc.cpp: Fixed bug in track transition. * util/cdrom.cpp: Handle track type and serial copy management flags in TOC file input.
This commit is contained in:
parent
c814f0856a
commit
e9dcdb5200
@ -265,6 +265,10 @@ void t10mmc::ExecCommand()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TOC_FORMAT_CDTEXT:
|
||||||
|
length = 4;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
||||||
length = 0;
|
length = 0;
|
||||||
@ -622,8 +626,8 @@ void t10mmc::ExecCommand()
|
|||||||
auto track_type = m_image->get_track_type(trk);
|
auto track_type = m_image->get_track_type(trk);
|
||||||
|
|
||||||
// If there's a transition between CD data and CD audio anywhere in the requested range then return an error
|
// If there's a transition between CD data and CD audio anywhere in the requested range then return an error
|
||||||
if ((last_track_type == cdrom_file::CD_TRACK_AUDIO && track_type != cdrom_file::CD_TRACK_AUDIO)
|
if (last_track_type != -1 && ((last_track_type == cdrom_file::CD_TRACK_AUDIO && track_type != cdrom_file::CD_TRACK_AUDIO)
|
||||||
|| (last_track_type != cdrom_file::CD_TRACK_AUDIO && track_type == cdrom_file::CD_TRACK_AUDIO))
|
|| (last_track_type != cdrom_file::CD_TRACK_AUDIO && track_type == cdrom_file::CD_TRACK_AUDIO)))
|
||||||
{
|
{
|
||||||
set_sense(SCSI_SENSE_KEY_ILLEGAL_REQUEST, SCSI_SENSE_ASC_ASCQ_ILLEGAL_MODE_FOR_THIS_TRACK);
|
set_sense(SCSI_SENSE_KEY_ILLEGAL_REQUEST, SCSI_SENSE_ASC_ASCQ_ILLEGAL_MODE_FOR_THIS_TRACK);
|
||||||
|
|
||||||
@ -1466,6 +1470,14 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TOC_FORMAT_CDTEXT:
|
||||||
|
{
|
||||||
|
put_u16be(&data[0], 0); // length
|
||||||
|
data[2] = 0; // first track/session/reserved
|
||||||
|
data[3] = 0; // last track/session/reserved
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
||||||
std::fill_n(data, dataLength, 0);
|
std::fill_n(data, dataLength, 0);
|
||||||
|
@ -2886,7 +2886,43 @@ std::error_condition cdrom_file::parse_toc(std::string_view tocfname, toc &outto
|
|||||||
|
|
||||||
TOKENIZE
|
TOKENIZE
|
||||||
|
|
||||||
if ((!strcmp(token, "DATAFILE")) || (!strcmp(token, "AUDIOFILE")) || (!strcmp(token, "FILE")))
|
/*
|
||||||
|
Samples: https://github.com/cdrdao/cdrdao/tree/master/testtocs
|
||||||
|
|
||||||
|
Unimplemented:
|
||||||
|
CD_TEXT
|
||||||
|
SILENCE
|
||||||
|
ZERO
|
||||||
|
FIFO
|
||||||
|
PREGAP
|
||||||
|
CATALOG
|
||||||
|
ISRC
|
||||||
|
*/
|
||||||
|
if (!strcmp(token, "NO"))
|
||||||
|
{
|
||||||
|
TOKENIZE
|
||||||
|
if (!strcmp(token, "COPY"))
|
||||||
|
outtoc.tracks[trknum].control_flags &= ~CD_FLAG_CONTROL_DIGITAL_COPY_PERMITTED;
|
||||||
|
else if (!strcmp(token, "PRE_EMPHASIS"))
|
||||||
|
outtoc.tracks[trknum].control_flags &= ~CD_FLAG_CONTROL_PREEMPHASIS;
|
||||||
|
}
|
||||||
|
else if (!strcmp(token, "COPY"))
|
||||||
|
{
|
||||||
|
outtoc.tracks[trknum].control_flags |= CD_FLAG_CONTROL_DIGITAL_COPY_PERMITTED;
|
||||||
|
}
|
||||||
|
else if (!strcmp(token, "PRE_EMPHASIS"))
|
||||||
|
{
|
||||||
|
outtoc.tracks[trknum].control_flags |= CD_FLAG_CONTROL_PREEMPHASIS;
|
||||||
|
}
|
||||||
|
else if (!strcmp(token, "TWO_CHANNEL_AUDIO"))
|
||||||
|
{
|
||||||
|
outtoc.tracks[trknum].control_flags &= ~CD_FLAG_CONTROL_4CH;
|
||||||
|
}
|
||||||
|
else if (!strcmp(token, "FOUR_CHANNEL_AUDIO"))
|
||||||
|
{
|
||||||
|
outtoc.tracks[trknum].control_flags |= CD_FLAG_CONTROL_4CH;
|
||||||
|
}
|
||||||
|
else if ((!strcmp(token, "DATAFILE")) || (!strcmp(token, "AUDIOFILE")) || (!strcmp(token, "FILE")))
|
||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user