mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +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;
|
||||
}
|
||||
|
||||
case TOC_FORMAT_CDTEXT:
|
||||
length = 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
||||
length = 0;
|
||||
@ -622,8 +626,8 @@ void t10mmc::ExecCommand()
|
||||
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 ((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))
|
||||
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)))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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:
|
||||
m_device->logerror("T10MMC: Unhandled READ TOC format %d\n", toc_format());
|
||||
std::fill_n(data, dataLength, 0);
|
||||
|
@ -2886,7 +2886,43 @@ std::error_condition cdrom_file::parse_toc(std::string_view tocfname, toc &outto
|
||||
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user