From 18fddf7d285a1a396515178cc29189dfab13e128 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 4 Dec 2015 07:26:03 +0000 Subject: [PATCH] * DiscImageChef.Decoders/CD/ATIP.cs: Added disc type and manufacturer lookup from ATIP. * DiscImageChef.Decoders/CD/PMA.cs: Implement full PMA decoding. * DiscImageChef.Decoders/CD/FullTOC.cs: Implement decoding disc ID. * DiscImageChef.Decoders/SCSI/MMC/DiscInformation.cs: Disc ID is 24-bit. * DiscImageChef.Decoders/CD/CDTextOnLeadIn.cs: CD-TEXT can be empty without being null, do not decode an empty one. --- CD/ATIP.cs | 344 +++++++++++++++++++++++++++++++++++- CD/CDTextOnLeadIn.cs | 3 + CD/FullTOC.cs | 8 +- CD/PMA.cs | 127 +++++++++++-- ChangeLog | 18 ++ SCSI/MMC/DiscInformation.cs | 2 +- 6 files changed, 486 insertions(+), 16 deletions(-) diff --git a/CD/ATIP.cs b/CD/ATIP.cs index d9bd5c6..d51084d 100644 --- a/CD/ATIP.cs +++ b/CD/ATIP.cs @@ -331,6 +331,24 @@ namespace DiscImageChef.Decoders.CD case 1: sb.AppendLine("Disc is High-Speed CD-RW"); break; + case 2: + sb.AppendLine("Disc is Ultra-Speed CD-RW"); + break; + case 3: + sb.AppendLine("Disc is Ultra-Speed+ CD-RW"); + break; + case 4: + sb.AppendLine("Disc is medium type B, low beta category (B-) CD-RW"); + break; + case 5: + sb.AppendLine("Disc is medium type B, high beta category (B+) CD-RW"); + break; + case 6: + sb.AppendLine("Disc is medium type C, low beta category (C-) CD-RW"); + break; + case 7: + sb.AppendLine("Disc is medium type C, high beta category (C+) CD-RW"); + break; default: sb.AppendFormat("Unknown CD-RW disc subtype: {0}", response.DiscSubType).AppendLine(); break; @@ -350,6 +368,30 @@ namespace DiscImageChef.Decoders.CD sb.AppendLine("Disc is CD-R"); switch (response.DiscSubType) { + case 0: + sb.AppendLine("Disc is normal speed (CLV) CD-R"); + break; + case 1: + sb.AppendLine("Disc is high speed (CAV) CD-R"); + break; + case 2: + sb.AppendLine("Disc is medium type A, low beta category (A-) CD-R"); + break; + case 3: + sb.AppendLine("Disc is medium type A, high beta category (A+) CD-R"); + break; + case 4: + sb.AppendLine("Disc is medium type B, low beta category (B-) CD-R"); + break; + case 5: + sb.AppendLine("Disc is medium type B, high beta category (B+) CD-R"); + break; + case 6: + sb.AppendLine("Disc is medium type C, low beta category (C-) CD-R"); + break; + case 7: + sb.AppendLine("Disc is medium type C, high beta category (C+) CD-R"); + break; default: sb.AppendFormat("Unknown CD-R disc subtype: {0}", response.DiscSubType).AppendLine(); break; @@ -361,8 +403,8 @@ namespace DiscImageChef.Decoders.CD else sb.AppendLine("Disc use is restricted"); - sb.AppendFormat("ATIP Start time of Lead-in: {0:X2}:{1:X2}:{2:X2}", response.LeadInStartMin, response.LeadInStartSec, response.LeadInStartFrame).AppendLine(); - sb.AppendFormat("ATIP Last possible start time of Lead-out: {0:X2}:{1:X2}:{2:X2}", response.LeadOutStartMin, response.LeadOutStartSec, response.LeadOutStartFrame).AppendLine(); + sb.AppendFormat("ATIP Start time of Lead-in: {0}:{1:D2}:{2:D2}", response.LeadInStartMin, response.LeadInStartSec, response.LeadInStartFrame).AppendLine(); + sb.AppendFormat("ATIP Last possible start time of Lead-out: {0}:{1:D2}:{2:D2}", response.LeadOutStartMin, response.LeadOutStartSec, response.LeadOutStartFrame).AppendLine(); if(response.A1Valid) sb.AppendFormat("A1 value: 0x{0:X6}", (response.A1Values[0] << 16) + (response.A1Values[1] << 8) + response.A1Values[2]).AppendLine(); if(response.A2Valid) @@ -373,6 +415,304 @@ namespace DiscImageChef.Decoders.CD sb.AppendFormat("S4 value: 0x{0:X6}", (response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2]).AppendLine(); } + if (response.LeadInStartMin == 97) + { + int type = response.LeadInStartFrame % 10; + int frm = response.LeadInStartFrame - type; + string manufacturer = ""; + + if (response.DiscType) + sb.AppendLine("Disc uses phase change"); + else + { + if(type < 5) + sb.AppendLine("Disc uses long strategy type dye (Cyanine, AZO, etc...)"); + else + sb.AppendLine("Disc uses short strategy type dye (Phthalocyanine, etc...)"); + } + + switch (response.LeadInStartSec) + { + case 15: + if (frm == 00) + manufacturer = "TDK Corporation"; + if (frm == 10) + manufacturer = "Ritek Co."; + if (frm == 20) + manufacturer = "Mitsubishi Chemical Corporation"; + if (frm == 30) + manufacturer = "NAN-YA Plastics Corporation"; + break; + case 16: + if (frm == 20) + manufacturer = "Shenzen SG&Gast Digital Optical Discs"; + if (frm == 30) + manufacturer = "Grand Advance Technology Ltd."; + break; + case 17: + if (frm == 00) + manufacturer = "Moser Baer India Limited"; + break; + case 18: + if (frm == 10) + manufacturer = "Wealth Fair Investment Ltd."; + if (frm == 60) + manufacturer = "Taroko International Co. Ltd."; + break; + case 20: + if (frm == 10) + manufacturer = "CDA Datenträger Albrechts GmbH"; + break; + case 21: + if (frm == 30) + manufacturer = "Bestdisc Technology Corporation"; + if (frm == 40) + manufacturer = "Optical Disc Manufacturing Equipment"; + if (frm == 50) + manufacturer = "Sound Sound Multi-Media Development Ltd."; + break; + case 22: + if (frm == 00) + manufacturer = "Woongjin Media Corp."; + if (frm == 10) + manufacturer = "Seantram Technology Inc."; + if (frm == 20) + manufacturer = "Advanced Digital Media"; + if (frm == 30) + manufacturer = "EXIMPO"; + if (frm == 40) + manufacturer = "CIS Technology Inc."; + if (frm == 50) + manufacturer = "Hong Kong Digital Technology Co., Ltd."; + if (frm == 60) + manufacturer = "Acer Media Technology, Inc."; + break; + case 23: + if (frm == 00) + manufacturer = "Matsushita Electric Industrial Co., Ltd."; + if (frm == 10) + manufacturer = "Doremi Media Co., Ltd."; + if (frm == 20) + manufacturer = "Nacar Media s.r.l."; + if (frm == 30) + manufacturer = "Audio Distributors Co., Ltd."; + if (frm == 40) + manufacturer = "Victor Company of Japan, Ltd."; + if (frm == 50) + manufacturer = "Optrom Inc."; + if (frm == 60) + manufacturer = "Customer Pressing Oosterhout"; + break; + case 24: + if (frm == 00) + manufacturer = "Taiyo Yuden Company Ltd."; + if (frm == 10) + manufacturer = "SONY Corporation"; + if (frm == 20) + manufacturer = "Computer Support Italy s.r.l."; + if (frm == 30) + manufacturer = "Unitech Japan Inc."; + if (frm == 40) + manufacturer = "kdg mediatech AG"; + if (frm == 50) + manufacturer = "Guann Yinn Co., Ltd."; + if (frm == 60) + manufacturer = "Harmonic Hall Optical Disc Ltd."; + break; + case 25: + if (frm == 00) + manufacturer = "MPO"; + if (frm == 20) + manufacturer = "Hitachi Maxell, Ltd."; + if (frm == 30) + manufacturer = "Infodisc Technology Co. Ltd."; + if (frm == 40) + manufacturer = "Vivastar AG"; + if (frm == 50) + manufacturer = "AMS Technology Inc."; + if (frm == 60) + manufacturer = "Xcitec Inc."; + break; + case 26: + if (frm == 00) + manufacturer = "Fornet International Pte Ltd."; + if (frm == 10) + manufacturer = "POSTECH Corporation"; + if (frm == 20) + manufacturer = "SKC Co., Ltd."; + if (frm == 30) + manufacturer = "Optical Disc Corporation"; + if (frm == 40) + manufacturer = "FUJI Photo Film Co., Ltd."; + if (frm == 50) + manufacturer = "Lead Data Inc."; + if (frm == 60) + manufacturer = "CMC Magnetics Corporation"; + break; + case 27: + if (frm == 00) + manufacturer = "Digital Storage Technology Co., Ltd."; + if (frm == 10) + manufacturer = "Plasmon Data systems Ltd."; + if (frm == 20) + manufacturer = "Princo Corporation"; + if (frm == 30) + manufacturer = "Pioneer Video Corporation"; + if (frm == 40) + manufacturer = "Kodak Japan Ltd."; + if (frm == 50) + manufacturer = "Mitsui Chemicals, Inc."; + if (frm == 60) + manufacturer = "Ricoh Company Ltd."; + break; + case 28: + if (frm == 00) + manufacturer = "Opti.Me.S. S.p.A."; + if (frm == 10) + manufacturer = "Gigastore Corporation"; + if (frm == 20) + manufacturer = "Multi Media Masters & Machinary SA"; + if (frm == 30) + manufacturer = "Auvistar Industry Co., Ltd."; + if (frm == 40) + manufacturer = "King Pro Mediatek Inc."; + if (frm == 50) + manufacturer = "Delphi Technology Inc."; + if (frm == 60) + manufacturer = "Friendly CD-Tek Co."; + break; + case 29: + if (frm == 00) + manufacturer = "Taeil Media Co., Ltd."; + if (frm == 10) + manufacturer = "Vanguard Disc Inc."; + if (frm == 20) + manufacturer = "Unidisc Technology Co., Ltd."; + if (frm == 30) + manufacturer = "Hile Optical Disc Technology Corp."; + if (frm == 40) + manufacturer = "Viva Magnetics Ltd."; + if (frm == 50) + manufacturer = "General Magnetics Ltd."; + break; + case 30: + if (frm == 10) + manufacturer = "CDA Datenträger Albrechts GmbH"; + break; + case 31: + if (frm == 00) + manufacturer = "Ritek Co."; + if (frm == 30) + manufacturer = "Grand Advance Technology Ltd."; + break; + case 32: + if (frm == 00) + manufacturer = "TDK Corporation"; + if (frm == 10) + manufacturer = "Prodisc Technology Inc."; + break; + case 34: + if (frm == 20) + manufacturer = "Mitsubishi Chemical Corporation"; + break; + case 42: + if (frm == 20) + manufacturer = "Advanced Digital Media"; + break; + case 45: + if (frm == 00) + manufacturer = "Fornet International Pte Ltd."; + if (frm == 10) + manufacturer = "Unitech Japan Inc."; + if (frm == 20) + manufacturer = "Acer Media Technology, Inc."; + if (frm == 40) + manufacturer = "CIS Technology Inc."; + if (frm == 50) + manufacturer = "Guann Yinn Co., Ltd."; + if (frm == 60) + manufacturer = "Xcitec Inc."; + break; + case 46: + if (frm == 00) + manufacturer = "Taiyo Yuden Company Ltd."; + if (frm == 10) + manufacturer = "Hong Kong Digital Technology Co., Ltd."; + if (frm == 20) + manufacturer = "Multi Media Masters & Machinary SA"; + if (frm == 30) + manufacturer = "Computer Support Italy s.r.l."; + if (frm == 40) + manufacturer = "FUJI Photo Film Co., Ltd."; + if (frm == 50) + manufacturer = "Auvistar Industry Co., Ltd."; + if (frm == 60) + manufacturer = "CMC Magnetics Corporation"; + break; + case 47: + if (frm == 10) + manufacturer = "Hitachi Maxell, Ltd."; + if (frm == 20) + manufacturer = "Princo Corporation"; + if (frm == 40) + manufacturer = "POSTECH Corporation"; + if (frm == 50) + manufacturer = "Ritek Co."; + if (frm == 60) + manufacturer = "Prodisc Technology Inc."; + break; + case 48: + if (frm == 00) + manufacturer = "Ricoh Company Ltd."; + if (frm == 10) + manufacturer = "Kodak Japan Ltd."; + if (frm == 20) + manufacturer = "Plasmon Data systems Ltd."; + if (frm == 30) + manufacturer = "Pioneer Video Corporation"; + if (frm == 40) + manufacturer = "Digital Storage Technology Co., Ltd."; + if (frm == 50) + manufacturer = "Mitsui Chemicals, Inc."; + if (frm == 60) + manufacturer = "Lead Data Inc."; + break; + case 49: + if (frm == 00) + manufacturer = "TDK Corporation"; + if (frm == 10) + manufacturer = "Gigastore Corporation"; + if (frm == 20) + manufacturer = "King Pro Mediatek Inc."; + if (frm == 30) + manufacturer = "Opti.Me.S. S.p.A."; + if (frm == 40) + manufacturer = "Victor Company of Japan, Ltd."; + if (frm == 60) + manufacturer = "Matsushita Electric Industrial Co., Ltd."; + break; + case 50: + if (frm == 10) + manufacturer = "Vanguard Disc Inc."; + if (frm == 20) + manufacturer = "Mitsubishi Chemical Corporation"; + if (frm == 30) + manufacturer = "CDA Datenträger Albrechts GmbH"; + break; + case 51: + if (frm == 10) + manufacturer = "Grand Advance Technology Ltd."; + if (frm == 20) + manufacturer = "Infodisc Technology Co. Ltd."; + if (frm == 50) + manufacturer = "Hile Optical Disc Technology Corp."; + break; + } + + if (manufacturer != "") + sb.AppendFormat("Disc manufactured by: {0}", manufacturer).AppendLine(); + } + return sb.ToString(); } diff --git a/CD/CDTextOnLeadIn.cs b/CD/CDTextOnLeadIn.cs index 9eb5f03..ab0f695 100644 --- a/CD/CDTextOnLeadIn.cs +++ b/CD/CDTextOnLeadIn.cs @@ -205,6 +205,9 @@ namespace DiscImageChef.Decoders.CD decoded.Reserved2 = CDTextResponse[3]; decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18]; + if (decoded.DataLength == 2) + return null; + if (decoded.DataLength + 2 != CDTextResponse.Length) { DicConsole.DebugWriteLine("CD-TEXT decoder", "Expected CD-TEXT size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDTextResponse.Length); diff --git a/CD/FullTOC.cs b/CD/FullTOC.cs index e3e060e..286f52b 100644 --- a/CD/FullTOC.cs +++ b/CD/FullTOC.cs @@ -207,7 +207,7 @@ namespace DiscImageChef.Decoders.CD foreach (TrackDataDescriptor descriptor in response.TrackDescriptors) { if ((descriptor.CONTROL & 0x08) == 0x08 || - (descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4) || + (descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 && descriptor.ADR != 6) || descriptor.TNO != 0) { sb.AppendLine("Unknown TOC entry format, printing values as-is"); @@ -533,6 +533,12 @@ namespace DiscImageChef.Decoders.CD } break; } + case 6: + { + uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame); + sb.AppendFormat("Disc ID: {0:X6}", id & 0x00FFFFFF).AppendLine(); + break; + } } } } diff --git a/CD/PMA.cs b/CD/PMA.cs index 6bd3c45..fb2c6c0 100644 --- a/CD/PMA.cs +++ b/CD/PMA.cs @@ -200,18 +200,121 @@ namespace DiscImageChef.Decoders.CD sb.AppendFormat("Reserved = 0x{0:X2}", descriptor.Reserved).AppendLine(); #endif - sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine(); - sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine(); - sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine(); - sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine(); - sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine(); - sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine(); - sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine(); - sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine(); - sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine(); - sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine(); - sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine(); - sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine(); + switch (descriptor.ADR) + { + case 1: + if (descriptor.POINT > 0) + { + sb.AppendFormat("Track {0}", descriptor.POINT); + switch ((TOC_CONTROL)(descriptor.CONTROL & 0x0D)) + { + case TOC_CONTROL.TwoChanNoPreEmph: + sb.Append(" (Stereo audio track with no pre-emphasis)"); + break; + case TOC_CONTROL.TwoChanPreEmph: + sb.Append(" (Stereo audio track with 50/15 μs pre-emphasis)"); + break; + case TOC_CONTROL.FourChanNoPreEmph: + sb.Append(" (Quadraphonic audio track with no pre-emphasis)"); + break; + case TOC_CONTROL.FourChanPreEmph: + sb.Append(" (Quadraphonic audio track with 50/15 μs pre-emphasis)"); + break; + case TOC_CONTROL.DataTrack: + sb.Append(" (Data track, recorded uninterrupted)"); + break; + case TOC_CONTROL.DataTrackIncremental: + sb.Append(" (Data track, recorded incrementally)"); + break; + } + if (descriptor.PHOUR > 0) + sb.AppendFormat(" starts at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR); + else + sb.AppendFormat(" starts at {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME); + if (descriptor.PHOUR > 0) + sb.AppendFormat(" and ends at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR); + else + sb.AppendFormat(" and ends at {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame); + } + else + goto default; + break; + case 2: + uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame); + sb.AppendFormat("Disc ID: {0:X6}", id & 0x00FFFFFF).AppendLine(); + break; + case 3: + sb.AppendFormat("Skip track assignment {0} says that tracks ", descriptor.POINT); + if(descriptor.Min > 0) + sb.AppendFormat("{0} ", descriptor.Min); + if(descriptor.Sec > 0) + sb.AppendFormat("{0} ", descriptor.Sec); + if(descriptor.Frame > 0) + sb.AppendFormat("{0} ", descriptor.Frame); + if(descriptor.PMIN > 0) + sb.AppendFormat("{0} ", descriptor.PMIN); + if(descriptor.PSEC > 0) + sb.AppendFormat("{0} ", descriptor.PSEC); + if(descriptor.PFRAME > 0) + sb.AppendFormat("{0} ", descriptor.PFRAME); + sb.AppendLine("should be skipped"); + break; + case 4: + sb.AppendFormat("Unskip track assignment {0} says that tracks ", descriptor.POINT); + if(descriptor.Min > 0) + sb.AppendFormat("{0} ", descriptor.Min); + if(descriptor.Sec > 0) + sb.AppendFormat("{0} ", descriptor.Sec); + if(descriptor.Frame > 0) + sb.AppendFormat("{0} ", descriptor.Frame); + if(descriptor.PMIN > 0) + sb.AppendFormat("{0} ", descriptor.PMIN); + if(descriptor.PSEC > 0) + sb.AppendFormat("{0} ", descriptor.PSEC); + if(descriptor.PFRAME > 0) + sb.AppendFormat("{0} ", descriptor.PFRAME); + sb.AppendLine("should not be skipped"); + break; + case 5: + sb.AppendFormat("Skip time interval assignment {0} says that from ", descriptor.POINT); + if(descriptor.PHOUR > 0) + sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR); + else + sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME); + if(descriptor.PHOUR > 0) + sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR); + else + sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame); + sb.AppendLine("should be skipped"); + break; + case 6: + sb.AppendFormat("Unskip time interval assignment {0} says that from ", descriptor.POINT); + if(descriptor.PHOUR > 0) + sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR); + else + sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME); + if(descriptor.PHOUR > 0) + sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR); + else + sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame); + sb.AppendLine("should not be skipped"); + break; + default: + + sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine(); + sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine(); + sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine(); + sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine(); + sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine(); + sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine(); + sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine(); + sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine(); + sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine(); + sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine(); + sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine(); + sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine(); + break; + } } return sb.ToString(); diff --git a/ChangeLog b/ChangeLog index be992de..cf72f5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2015-12-04 Natalia Portillo + + * CD/ATIP.cs: + Added disc type and manufacturer lookup from ATIP. + + * CD/PMA.cs: + Implement full PMA decoding. + + * CD/FullTOC.cs: + Implement decoding disc ID. + + * SCSI/MMC/DiscInformation.cs: + Disc ID is 24-bit. + + * CD/CDTextOnLeadIn.cs: + CD-TEXT can be empty without being null, do not decode an + empty one. + 2015-12-04 Natalia Portillo * CD/CDTextOnLeadIn.cs: diff --git a/SCSI/MMC/DiscInformation.cs b/SCSI/MMC/DiscInformation.cs index c0e3b0d..345ef3c 100644 --- a/SCSI/MMC/DiscInformation.cs +++ b/SCSI/MMC/DiscInformation.cs @@ -436,7 +436,7 @@ namespace DiscImageChef.Decoders.SCSI.MMC sb.AppendLine("Disc is defined for restricted use"); if (decoded.DID_V) - sb.AppendFormat("Disc ID: {0:X8}", decoded.DiscIdentification).AppendLine(); + sb.AppendFormat("Disc ID: {0:X6}", decoded.DiscIdentification & 0x00FFFFFF).AppendLine(); if (decoded.DBC_V) sb.AppendFormat("Disc barcode: {0:X16}", decoded.DiscBarcode).AppendLine(); if (decoded.DAC_V)