From c2717100d9d2e873898366122253e12d5f82e3e6 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 27 Jul 2016 18:03:32 +0100 Subject: [PATCH] * DiscImageChef.DiscImages/DiskCopy42.cs: Added support for LisaEm created images. * DiscImageChef.Metadata/MediaType.cs: * DiscImageChef.Metadata/Dimensions.cs: * DiscImageChef.CommonTypes/MediaType.cs: Added Apple Profile, Widget and HD20. --- DiscImageChef.CommonTypes/MediaType.cs | 6 ++++ DiscImageChef.DiscImages/DiskCopy42.cs | 42 +++++++++++++++++++++----- DiscImageChef.Metadata/Dimensions.cs | 18 +++++++++++ DiscImageChef.Metadata/MediaType.cs | 12 ++++++++ 4 files changed, 71 insertions(+), 7 deletions(-) diff --git a/DiscImageChef.CommonTypes/MediaType.cs b/DiscImageChef.CommonTypes/MediaType.cs index e601af308..c7653a163 100644 --- a/DiscImageChef.CommonTypes/MediaType.cs +++ b/DiscImageChef.CommonTypes/MediaType.cs @@ -778,6 +778,12 @@ namespace DiscImageChef.CommonTypes PD650_WORM, #endregion Miscellaneous + #region Apple Hard Disks + AppleProfile, + AppleWidget, + AppleHD20, + #endregion Apple Hard Disks + #region Generic hard disks Microdrive, RDX, diff --git a/DiscImageChef.DiscImages/DiskCopy42.cs b/DiscImageChef.DiscImages/DiskCopy42.cs index 4a24745ee..6b2f12c1a 100644 --- a/DiscImageChef.DiscImages/DiskCopy42.cs +++ b/DiscImageChef.DiscImages/DiskCopy42.cs @@ -90,6 +90,8 @@ namespace DiscImageChef.ImagePlugins const byte kSonyFormat1680K = 0x04; /// Defined by Sigma Seven's BLU const byte kSigmaFormatTwiggy = 0x54; + /// Defined by LisaEm + const byte kNotStandardFormat = 0x5D; // There should be a value for Apple HD20 hard disks, unknown... // fmyByte byte // Based on GCR nibble @@ -110,6 +112,8 @@ namespace DiscImageChef.ImagePlugins const byte kSonyFmtByteProDos = 0x24; /// Unformatted sectors const byte kInvalidFmtByte = 0x96; + /// Defined by LisaEm + const byte kFmtNotStandard = 0x93; #endregion @@ -202,7 +206,8 @@ namespace DiscImageChef.ImagePlugins return false; if(tmp_header.format != kSonyFormat400K && tmp_header.format != kSonyFormat800K && tmp_header.format != kSonyFormat720K && - tmp_header.format != kSonyFormat1440K && tmp_header.format != kSonyFormat1680K && tmp_header.format != kSigmaFormatTwiggy) + tmp_header.format != kSonyFormat1440K && tmp_header.format != kSonyFormat1680K && tmp_header.format != kSigmaFormatTwiggy && + tmp_header.format != kNotStandardFormat) { DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.format = 0x{0:X2} value", tmp_header.format); @@ -210,7 +215,8 @@ namespace DiscImageChef.ImagePlugins } if(tmp_header.fmtByte != kSonyFmtByte400K && tmp_header.fmtByte != kSonyFmtByte800K && tmp_header.fmtByte != kSonyFmtByte800KIncorrect && - tmp_header.fmtByte != kSonyFmtByteProDos && tmp_header.fmtByte != kInvalidFmtByte && tmp_header.fmtByte != kSigmaFmtByteTwiggy) + tmp_header.fmtByte != kSonyFmtByteProDos && tmp_header.fmtByte != kInvalidFmtByte && tmp_header.fmtByte != kSigmaFmtByteTwiggy && + tmp_header.fmtByte != kFmtNotStandard) { DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.fmtByte = 0x{0:X2} value", tmp_header.fmtByte); @@ -275,7 +281,7 @@ namespace DiscImageChef.ImagePlugins return false; if(header.format != kSonyFormat400K && header.format != kSonyFormat800K && header.format != kSonyFormat720K && - header.format != kSonyFormat1440K && header.format != kSonyFormat1680K && header.format != kSigmaFormatTwiggy) + header.format != kSonyFormat1440K && header.format != kSonyFormat1680K && header.format != kSigmaFormatTwiggy && header.format != kNotStandardFormat) { DicConsole.DebugWriteLine("DC42 plugin", "Unknown header.format = 0x{0:X2} value", header.format); @@ -283,7 +289,7 @@ namespace DiscImageChef.ImagePlugins } if(header.fmtByte != kSonyFmtByte400K && header.fmtByte != kSonyFmtByte800K && header.fmtByte != kSonyFmtByte800KIncorrect && - header.fmtByte != kSonyFmtByteProDos && header.fmtByte != kInvalidFmtByte && header.fmtByte != kSigmaFmtByteTwiggy) + header.fmtByte != kSonyFmtByteProDos && header.fmtByte != kInvalidFmtByte && header.fmtByte != kSigmaFmtByteTwiggy && header.fmtByte != kFmtNotStandard) { DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.fmtByte = 0x{0:X2} value", header.fmtByte); @@ -307,10 +313,12 @@ namespace DiscImageChef.ImagePlugins if(header.tagSize != 0) { - if(header.tagSize / 12 != ImageInfo.sectors) - { - DicConsole.DebugWriteLine("DC42 plugin", "header.tagSize / 12 != sectors"); + bptag = (uint)(header.tagSize / ImageInfo.sectors); + DicConsole.DebugWriteLine("DC42 plugin", "bptag = {0} bytes", bptag); + if(bptag != 12 && bptag != 20 && bptag != 24) + { + DicConsole.DebugWriteLine("DC42 plugin", "Unknown tag size"); return false; } @@ -342,6 +350,26 @@ namespace DiscImageChef.ImagePlugins case kSigmaFormatTwiggy: ImageInfo.mediaType = MediaType.AppleFileWare; break; + case kNotStandardFormat: + switch(ImageInfo.sectors) + { + case 9728: + ImageInfo.mediaType = MediaType.AppleProfile; + break; + case 19456: + ImageInfo.mediaType = MediaType.AppleProfile; + break; + case 38912: + ImageInfo.mediaType = MediaType.AppleWidget; + break; + case 39040: + ImageInfo.mediaType = MediaType.AppleHD20; + break; + default: + ImageInfo.mediaType = MediaType.Unknown; + break; + } + break; default: ImageInfo.mediaType = MediaType.Unknown; break; diff --git a/DiscImageChef.Metadata/Dimensions.cs b/DiscImageChef.Metadata/Dimensions.cs index 5525b76d6..46be3c5a3 100644 --- a/DiscImageChef.Metadata/Dimensions.cs +++ b/DiscImageChef.Metadata/Dimensions.cs @@ -892,6 +892,24 @@ namespace DiscImageChef.Metadata return dmns; #endregion CD/DVD/BD + #region Apple Hard Disks + // TODO: Find Apple Widget size + case CommonTypes.MediaType.AppleProfile: + dmns.Height = 223.8; + dmns.HeightSpecified = true; + dmns.Width = 438.9; + dmns.WidthSpecified = true; + dmns.Thickness = 111.5; + return dmns; + case CommonTypes.MediaType.AppleHD20: + dmns.Height = 246.4; + dmns.HeightSpecified = true; + dmns.Width = 266.7; + dmns.WidthSpecified = true; + dmns.Thickness = 78.7; + return dmns; + #endregion Apple Hard Disks + default: return null; } diff --git a/DiscImageChef.Metadata/MediaType.cs b/DiscImageChef.Metadata/MediaType.cs index 51cfd2218..2b310a6b6 100644 --- a/DiscImageChef.Metadata/MediaType.cs +++ b/DiscImageChef.Metadata/MediaType.cs @@ -664,6 +664,18 @@ namespace DiscImageChef.Metadata DiscType = "Iomega ZIP"; DiscSubType = "Iomega ZIP750"; break; + case CommonTypes.MediaType.AppleProfile: + DiscType = "HDD"; + DiscSubType = "Apple Profile"; + break; + case CommonTypes.MediaType.AppleWidget: + DiscType = "HDD"; + DiscSubType = "Apple Widget"; + break; + case CommonTypes.MediaType.AppleHD20: + DiscType = "HDD"; + DiscSubType = "Apple HD20"; + break; default: DiscType = "Unknown"; DiscSubType = "Unknown";