From 3c79845b90b13d6c31506190a32876c1f9d525fc Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 3 Dec 2015 08:11:46 +0000 Subject: [PATCH] Added support for Nintendo GOD and WOD. --- DiscImageChef.Decoders/ChangeLog | 6 ++++++ DiscImageChef.Decoders/DVD/Enums.cs | 7 ++++++- DiscImageChef.Decoders/DVD/PFI.cs | 13 +++++++++++++ DiscImageChef/ChangeLog | 5 +++++ DiscImageChef/Commands/MediaInfo.cs | 15 +++++++++++++-- 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/DiscImageChef.Decoders/ChangeLog b/DiscImageChef.Decoders/ChangeLog index 7303b1e45..47f26ddf5 100644 --- a/DiscImageChef.Decoders/ChangeLog +++ b/DiscImageChef.Decoders/ChangeLog @@ -1,3 +1,9 @@ +2015-12-03 Natalia Portillo + + * DVD/PFI.cs: + * DVD/Enums.cs: + Added support for Nintendo GOD and WOD. + 2015-12-03 Natalia Portillo * Xbox/DMI.cs: diff --git a/DiscImageChef.Decoders/DVD/Enums.cs b/DiscImageChef.Decoders/DVD/Enums.cs index e836a54e2..da893b546 100644 --- a/DiscImageChef.Decoders/DVD/Enums.cs +++ b/DiscImageChef.Decoders/DVD/Enums.cs @@ -77,7 +77,12 @@ namespace DiscImageChef.Decoders.DVD /// /// DVD+R DL. Version 1 is ECMA-364. /// - DVDPRDL = 14 + DVDPRDL = 14, + /// + /// According to standards this value is reserved. + /// It's used by Nintendo GODs and WODs. + /// + Nintendo = 15 } public enum MaximumRateField : byte diff --git a/DiscImageChef.Decoders/DVD/PFI.cs b/DiscImageChef.Decoders/DVD/PFI.cs index 7bb2d84eb..a0dbd908f 100644 --- a/DiscImageChef.Decoders/DVD/PFI.cs +++ b/DiscImageChef.Decoders/DVD/PFI.cs @@ -1470,6 +1470,19 @@ namespace DiscImageChef.Decoders.DVD break; } break; + case DiskCategory.Nintendo: + if (decoded.PartVersion == 15) + { + if (decoded.DiscSize == DVDSize.Eighty) + sb.AppendLine("Disc is a Nintendo Gamecube Optical Disc (GOD)"); + else if (decoded.DiscSize == DVDSize.OneTwenty) + sb.AppendLine("Disc is a Nintendo Wii Optical Disc (WOD)"); + else + goto default; + } + else + goto default; + break; default: sb.AppendFormat(categorySentence, sizeString, "unknown disc type", decoded.PartVersion).AppendLine(); break; diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 546ffb9e0..cb407022f 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,8 @@ +2015-12-03 Natalia Portillo + + * Commands/MediaInfo.cs: + Added support for Nintendo GOD and WOD. + 2015-12-03 Natalia Portillo * Commands/MediaInfo.cs: diff --git a/DiscImageChef/Commands/MediaInfo.cs b/DiscImageChef/Commands/MediaInfo.cs index a89122a84..3dc321cf0 100644 --- a/DiscImageChef/Commands/MediaInfo.cs +++ b/DiscImageChef/Commands/MediaInfo.cs @@ -817,7 +817,19 @@ namespace DiscImageChef.Commands else { doWriteFile(outputPrefix, "_readdiscstructure_dvd_pfi.bin", "SCSI READ DISC STRUCTURE", cmdBuf); - DicConsole.WriteLine("PFI:\n{0}", Decoders.DVD.PFI.Prettify(cmdBuf)); + Decoders.DVD.PFI.PhysicalFormatInformation? nintendoPfi = Decoders.DVD.PFI.Decode(cmdBuf); + if(nintendoPfi != null) + { + DicConsole.WriteLine("PFI:\n{0}", Decoders.DVD.PFI.Prettify(cmdBuf)); + if(nintendoPfi.Value.DiskCategory == DiscImageChef.Decoders.DVD.DiskCategory.Nintendo && + nintendoPfi.Value.PartVersion == 15) + { + if(nintendoPfi.Value.DiscSize == DiscImageChef.Decoders.DVD.DVDSize.Eighty) + dskType = DiskType.GOD; + else if(nintendoPfi.Value.DiscSize == DiscImageChef.Decoders.DVD.DVDSize.OneTwenty) + dskType = DiskType.WOD; + } + } } sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.DiscManufacturingInformation, 0, dev.Timeout, out duration); if(sense) @@ -837,7 +849,6 @@ namespace DiscImageChef.Commands DicConsole.ErrorWriteLine("READ DISC STRUCTURE: BCA\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); else doWriteFile(outputPrefix, "_readdiscstructure_dvd_bca.bin", "SCSI READ DISC STRUCTURE", cmdBuf); - } #endregion Nintendo }