diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index 6d90c547..e0b31d4a 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -391,6 +391,18 @@ namespace DiscImageChef.Core.Devices.Dumping lastSector = phour * 3600 * 75 + pmin * 60 * 75 + psec * 75 + pframe - 150; } + else if(trk.POINT == 0xA0 && trk.ADR == 1) + { + switch(trk.PSEC) + { + case 0x10: + dskType = MediaType.CDI; + break; + case 0x20: + dskType = MediaType.CDROMXA; + break; + } + } if(trackList.Count == 0) { diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index c0583df0..7fac21a6 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -1158,6 +1158,25 @@ namespace DiscImageChef.Commands DataFile.WriteTo("Media-Info command", outputPrefix, "_rawtoc.bin", "SCSI READ TOC/PMA/ATIP", cmdBuf); DicConsole.WriteLine("Raw TOC:\n{0}", FullTOC.Prettify(cmdBuf)); + + FullTOC.CDFullTOC? fullToc = FullTOC.Decode(cmdBuf); + if(fullToc.HasValue) + { + FullTOC.TrackDataDescriptor a0Track = + fullToc.Value.TrackDescriptors.FirstOrDefault(t => t.POINT == 0xA0 && t.ADR == 1); + if(a0Track.POINT == 0xA0) + { + switch(a0Track.PSEC) + { + case 0x10: + dskType = MediaType.CDI; + break; + case 0x20: + dskType = MediaType.CDROMXA; + break; + } + } + } } sense = dev.ReadPma(out cmdBuf, out senseBuf, dev.Timeout, out _); if(sense)