diff --git a/DiscImageChef.DiscImages/Alcohol120.cs b/DiscImageChef.DiscImages/Alcohol120.cs index db9871535..983a60a43 100644 --- a/DiscImageChef.DiscImages/Alcohol120.cs +++ b/DiscImageChef.DiscImages/Alcohol120.cs @@ -742,6 +742,15 @@ namespace DiscImageChef.ImagePlugins ImageInfo.readableSectorTags.Add(SectorTagType.CDTrackFlags); } + if(ImageInfo.mediaType == MediaType.XGD2) + { + // All XGD3 all have the same number of blocks + if(ImageInfo.sectors == 25063 || // Locked (or non compatible drive) + ImageInfo.sectors == 4229664 || // Xtreme unlock + ImageInfo.sectors == 4246304) // Wxripper unlock + ImageInfo.mediaType = MediaType.XGD3; + } + DicConsole.VerboseWriteLine("Alcohol 120% image describes a disc of type {0}", ImageInfo.mediaType); return true; diff --git a/DiscImageChef.DiscImages/BlindWrite5.cs b/DiscImageChef.DiscImages/BlindWrite5.cs index 9fea0d2d4..f3f657de5 100644 --- a/DiscImageChef.DiscImages/BlindWrite5.cs +++ b/DiscImageChef.DiscImages/BlindWrite5.cs @@ -1123,6 +1123,15 @@ namespace DiscImageChef.ImagePlugins if(fullToc != null) ImageInfo.readableMediaTags.Add(MediaTagType.CD_FullTOC); + if(ImageInfo.mediaType == MediaType.XGD2) + { + // All XGD3 all have the same number of blocks + if(ImageInfo.sectors == 25063 || // Locked (or non compatible drive) + ImageInfo.sectors == 4229664 || // Xtreme unlock + ImageInfo.sectors == 4246304) // Wxripper unlock + ImageInfo.mediaType = MediaType.XGD3; + } + DicConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", ImageInfo.mediaType); return true; diff --git a/DiscImageChef.DiscImages/ChangeLog b/DiscImageChef.DiscImages/ChangeLog index 725d735cd..476581ac1 100644 --- a/DiscImageChef.DiscImages/ChangeLog +++ b/DiscImageChef.DiscImages/ChangeLog @@ -1,3 +1,8 @@ +2017-05-23 Natalia Portillo + + * Alcohol120.cs: + * BlindWrite5.cs: Added XGD3 detection (by its size). + 2017-05-20 Natalia Portillo * packages.config: diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 4a089b843..6dd8e24c1 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,9 @@ +2017-05-23 Natalia Portillo + + * Commands/MediaInfo.cs: + * Commands/CreateSidecar.cs: + Added XGD3 detection (by its size). + 2017-05-23 Natalia Portillo * Commands/DeviceInfo.cs: diff --git a/DiscImageChef/Commands/CreateSidecar.cs b/DiscImageChef/Commands/CreateSidecar.cs index 61747d835..b818e98f8 100644 --- a/DiscImageChef/Commands/CreateSidecar.cs +++ b/DiscImageChef/Commands/CreateSidecar.cs @@ -621,6 +621,17 @@ namespace DiscImageChef.Commands if(trksLst != null) sidecar.OpticalDisc[0].Track = trksLst.ToArray(); + // All XGD3 all have the same number of blocks + if(dskType == MediaType.XGD2 && sidecar.OpticalDisc[0].Track.Length == 1) + { + ulong blocks = (ulong)(sidecar.OpticalDisc[0].Track[0].EndSector - sidecar.OpticalDisc[0].Track[0].StartSector + 1); + if(blocks == 25063 || // Locked (or non compatible drive) + blocks == 4229664 || // Xtreme unlock + blocks == 4246304) // Wxripper unlock + dskType = MediaType.XGD3; + } + + string dscType, dscSubType; Metadata.MediaType.MediaTypeToString(dskType, out dscType, out dscSubType); sidecar.OpticalDisc[0].DiscType = dscType; diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index 4b3b1e7ff..a8357d394 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -546,9 +546,14 @@ namespace DiscImageChef.Commands } else if(Decoders.Xbox.DMI.IsXbox360(cmdBuf)) { - // TODO: Detect XGD3 from XGD2... dskType = MediaType.XGD2; DicConsole.WriteLine("Xbox 360 DMI:\n{0}", Decoders.Xbox.DMI.PrettifyXbox360(cmdBuf)); + + // All XGD3 all have the same number of blocks + if(blocks == 25063 || // Locked (or non compatible drive) + blocks == 4229664 || // Xtreme unlock + blocks == 4246304) // Wxripper unlock + dskType = MediaType.XGD3; } } }