diff --git a/DiscImageChef.CommonTypes/ChangeLog b/DiscImageChef.CommonTypes/ChangeLog index ea8495fc..0281a4d4 100644 --- a/DiscImageChef.CommonTypes/ChangeLog +++ b/DiscImageChef.CommonTypes/ChangeLog @@ -1,3 +1,7 @@ +2016-08-21 Natalia Portillo + + * MediaType.cs: Added missing NEC and SHARP floppy types. + 2016-08-09 Natalia Portillo * DiscImageChef.CommonTypes.csproj: Bumped version to diff --git a/DiscImageChef.CommonTypes/MediaType.cs b/DiscImageChef.CommonTypes/MediaType.cs index f87f15bd..9482a305 100644 --- a/DiscImageChef.CommonTypes/MediaType.cs +++ b/DiscImageChef.CommonTypes/MediaType.cs @@ -360,6 +360,10 @@ namespace DiscImageChef.CommonTypes NEC_8_SD, /// 8", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, MFM NEC_8_DD, + /// 8", SS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM + NEC_525_SD, + /// 8", SS, SD, 77 tracks, 26 spt, 256 bytes/sector, MFM? + NEC_525_DD, /// 5,25", DS, HD, 80 tracks, 8 spt, 1024 bytes/sector, MFM NEC_525_HD, /// 3,5", DS, HD, 80 tracks, 8 spt, 1024 bytes/sector, MFM @@ -369,10 +373,14 @@ namespace DiscImageChef.CommonTypes #endregion NEC standard floppy formats #region SHARP standard floppy formats - /// 5,25", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, FM + /// 5,25", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, FM SHARP_525, - /// 3,5", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, FM + /// 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, FM + SHARP_525_9, + /// 3,5", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, FM SHARP_35, + /// 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, FM + SHARP_35_9, #endregion SHARP standard floppy formats #region ECMA floppy standards diff --git a/DiscImageChef.DiscImages/Alcohol120.cs b/DiscImageChef.DiscImages/Alcohol120.cs index d12946ca..b3b340a5 100644 --- a/DiscImageChef.DiscImages/Alcohol120.cs +++ b/DiscImageChef.DiscImages/Alcohol120.cs @@ -735,6 +735,8 @@ namespace DiscImageChef.ImagePlugins ImageInfo.readableSectorTags.Add(SectorTagType.CDTrackFlags); } + DicConsole.VerboseWriteLine("Alcohol 120% image describes a disc of type {0}", ImageInfo.mediaType); + return true; } diff --git a/DiscImageChef.DiscImages/Apple2MG.cs b/DiscImageChef.DiscImages/Apple2MG.cs index cca1605e..8fc45db2 100644 --- a/DiscImageChef.DiscImages/Apple2MG.cs +++ b/DiscImageChef.DiscImages/Apple2MG.cs @@ -365,6 +365,10 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.BlockMedia; + DicConsole.VerboseWriteLine("2MG image contains a disk of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("2MG comments: {0}", ImageInfo.imageComments); + return true; } diff --git a/DiscImageChef.DiscImages/BLU.cs b/DiscImageChef.DiscImages/BLU.cs index 8b3c1dd1..e2f3626f 100644 --- a/DiscImageChef.DiscImages/BLU.cs +++ b/DiscImageChef.DiscImages/BLU.cs @@ -215,6 +215,8 @@ namespace DiscImageChef.ImagePlugins if(bptag > 0) ImageInfo.readableSectorTags.Add(SectorTagType.AppleSectorTag); + DicConsole.VerboseWriteLine("BLU image contains a disk of type {0}", ImageInfo.mediaType); + return true; } diff --git a/DiscImageChef.DiscImages/BlindWrite4.cs b/DiscImageChef.DiscImages/BlindWrite4.cs index 0d967338..353b1644 100644 --- a/DiscImageChef.DiscImages/BlindWrite4.cs +++ b/DiscImageChef.DiscImages/BlindWrite4.cs @@ -837,6 +837,10 @@ namespace DiscImageChef.ImagePlugins ImageInfo.imageComments = header.comments; + DicConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("BlindrWrite comments: {0}", ImageInfo.imageComments); + return true; } diff --git a/DiscImageChef.DiscImages/BlindWrite5.cs b/DiscImageChef.DiscImages/BlindWrite5.cs index 374a344d..02adcdbf 100644 --- a/DiscImageChef.DiscImages/BlindWrite5.cs +++ b/DiscImageChef.DiscImages/BlindWrite5.cs @@ -1110,6 +1110,8 @@ namespace DiscImageChef.ImagePlugins if(fullToc != null) ImageInfo.readableMediaTags.Add(MediaTagType.CD_FullTOC); + DicConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", ImageInfo.mediaType); + return true; } diff --git a/DiscImageChef.DiscImages/CDRDAO.cs b/DiscImageChef.DiscImages/CDRDAO.cs index 23ad5045..cc66c90b 100644 --- a/DiscImageChef.DiscImages/CDRDAO.cs +++ b/DiscImageChef.DiscImages/CDRDAO.cs @@ -946,6 +946,10 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.OpticalDisc; + DicConsole.VerboseWriteLine("CDRDAO image describes a disc of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("CDRDAO comments: {0}", ImageInfo.imageComments); + return true; } catch(Exception ex) diff --git a/DiscImageChef.DiscImages/CDRWin.cs b/DiscImageChef.DiscImages/CDRWin.cs index da189b2a..37588d46 100644 --- a/DiscImageChef.DiscImages/CDRWin.cs +++ b/DiscImageChef.DiscImages/CDRWin.cs @@ -1282,6 +1282,10 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.OpticalDisc; + DicConsole.VerboseWriteLine("CDRWIN image describes a disc of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("CDRWIN comments: {0}", ImageInfo.imageComments); + return true; } catch(Exception ex) diff --git a/DiscImageChef.DiscImages/ChangeLog b/DiscImageChef.DiscImages/ChangeLog index a850a120..331d772e 100644 --- a/DiscImageChef.DiscImages/ChangeLog +++ b/DiscImageChef.DiscImages/ChangeLog @@ -1,3 +1,24 @@ +2016-08-21 Natalia Portillo + + * DIM.cs: + * DiscImageChef.DiscImages.csproj: Added support for X68k .DIM + format. + + * BLU.cs: + * GDI.cs: + * Nero.cs: + * CopyQM.cs: + * CDRDAO.cs: + * CDRWin.cs: + * TeleDisk.cs: + * Apple2MG.cs: + * DiskCopy42.cs: + * Alcohol120.cs: + * BlindWrite5.cs: + * BlindWrite4.cs: + * ZZZRawImage.cs: In verbose show disk image type and + comments. + 2016-08-18 Natalia Portillo * BlindWrite5.cs: diff --git a/DiscImageChef.DiscImages/CopyQM.cs b/DiscImageChef.DiscImages/CopyQM.cs index b582b08a..2619d006 100644 --- a/DiscImageChef.DiscImages/CopyQM.cs +++ b/DiscImageChef.DiscImages/CopyQM.cs @@ -404,6 +404,10 @@ namespace DiscImageChef.ImagePlugins decodedImage.Close(); stream.Close(); + DicConsole.VerboseWriteLine("CopyQM image contains a disk of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("CopyQM comments: {0}", ImageInfo.imageComments); + return true; } diff --git a/DiscImageChef.DiscImages/DIM.cs b/DiscImageChef.DiscImages/DIM.cs new file mode 100644 index 00000000..23f127e3 --- /dev/null +++ b/DiscImageChef.DiscImages/DIM.cs @@ -0,0 +1,505 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : DIM.cs +// Author(s) : Natalia Portillo +// +// Component : Component +// +// --[ Description ] ---------------------------------------------------------- +// +// Description +// +// --[ License ] -------------------------------------------------------------- +// +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2016 Natalia Portillo +// ****************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using DiscImageChef.Console; +using DiscImageChef.CommonTypes; +using System.Linq; +using System.Text; + +namespace DiscImageChef.ImagePlugins +{ + // Checked using several images and strings inside Apple's DiskImages.framework + class DIM : ImagePlugin + { + #region Internal enumerations + enum DiskType : byte + { + HD2 = 0, + HS2 = 1, + HC2 = 2, + HDE2 = 3, + HQ2 = 9, + N88 = 17 + } + #endregion + + #region Internal constants + readonly byte[] HeaderID = { 0x44, 0x49, 0x46, 0x43, 0x20, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x20, 0x20 }; + #endregion + + + #region Internal variables + + /// Start of data sectors in disk image, should be 0x100 + const uint dataOffset = 0x100; + /// Disk image file + string dimImagePath; + byte[] comment; + byte[] hdrId; + DiskType dskType; + #endregion + + public DIM() + { + Name = "DIM Disk Image"; + PluginUUID = new Guid("0240B7B1-E959-4CDC-B0BD-386D6E467B88"); + ImageInfo = new ImageInfo(); + ImageInfo.readableSectorTags = new List(); + ImageInfo.readableMediaTags = new List(); + ImageInfo.imageHasPartitions = false; + ImageInfo.imageHasSessions = false; + ImageInfo.imageVersion = null; + ImageInfo.imageApplication = null; + ImageInfo.imageApplicationVersion = null; + ImageInfo.imageCreator = null; + ImageInfo.imageComments = null; + ImageInfo.mediaManufacturer = null; + ImageInfo.mediaModel = null; + ImageInfo.mediaSerialNumber = null; + ImageInfo.mediaBarcode = null; + ImageInfo.mediaPartNumber = null; + ImageInfo.mediaSequence = 0; + ImageInfo.lastMediaSequence = 0; + ImageInfo.driveManufacturer = null; + ImageInfo.driveModel = null; + ImageInfo.driveSerialNumber = null; + ImageInfo.driveFirmwareRevision = null; + } + + public override bool IdentifyImage(string imagePath) + { + FileStream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read); + stream.Seek(0, SeekOrigin.Begin); + + if(stream.Length < dataOffset) + return false; + + comment = new byte[60]; + hdrId = new byte[13]; + stream.Seek(0, SeekOrigin.Begin); + dskType = (DiskType)stream.ReadByte(); + stream.Seek(0xAB, SeekOrigin.Begin); + stream.Read(hdrId, 0, 13); + stream.Seek(0xC2, SeekOrigin.Begin); + stream.Read(comment, 0, 60); + stream.Close(); + + return HeaderID.SequenceEqual(hdrId); + } + + public override bool OpenImage(string imagePath) + { + FileStream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read); + stream.Seek(0, SeekOrigin.Begin); + + if(stream.Length < dataOffset) + return false; + + long diskSize = stream.Length - dataOffset; + + comment = new byte[60]; + hdrId = new byte[13]; + stream.Seek(0, SeekOrigin.Begin); + dskType = (DiskType)stream.ReadByte(); + stream.Seek(0xAB, SeekOrigin.Begin); + stream.Read(hdrId, 0, 13); + stream.Seek(0xC2, SeekOrigin.Begin); + stream.Read(comment, 0, 60); + stream.Close(); + + if(!HeaderID.SequenceEqual(hdrId)) + return false; + + ImageInfo.mediaType = MediaType.Unknown; + + switch(dskType) + { + // 8 spt, 1024 bps + case DiskType.HD2: + if(diskSize % (2 * 8 * 1024) != 0) + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 8 * 1024)); + return false; + } + if(diskSize / (2 * 8 * 1024) == 77) + ImageInfo.mediaType = MediaType.SHARP_525; + ImageInfo.sectorSize = 1024; + break; + // 9 spt, 1024 bps + case DiskType.HS2: + if(diskSize % (2 * 9 * 512) != 0) + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 9 * 512)); + return false; + } + if(diskSize / (2 * 9 * 512) == 80) + ImageInfo.mediaType = MediaType.SHARP_525_9; + ImageInfo.sectorSize = 512; + break; + // 15 spt, 512 bps + case DiskType.HC2: + if(diskSize % (2 * 15 * 512) != 0) + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 15 * 512)); + return false; + } + if(diskSize / (2 * 15 * 512) == 80) + ImageInfo.mediaType = MediaType.DOS_525_HD; + ImageInfo.sectorSize = 512; + break; + // 9 spt, 1024 bps + case DiskType.HDE2: + if(diskSize % (2 * 9 * 512) != 0) + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 9 * 512)); + return false; + } + if(diskSize / (2 * 9 * 512) == 80) + ImageInfo.mediaType = MediaType.SHARP_35_9; + ImageInfo.sectorSize = 512; + break; + // 18 spt, 512 bps + case DiskType.HQ2: + if(diskSize % (2 * 18 * 512) != 0) + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 18 * 512)); + return false; + } + if(diskSize / (2 * 18 * 512) == 80) + ImageInfo.mediaType = MediaType.DOS_35_HD; + ImageInfo.sectorSize = 512; + break; + // 26 spt, 256 bps + case DiskType.N88: + if(diskSize % (2 * 26 * 256) == 0) + { + if(diskSize % (2 * 26 * 256) == 77) + ImageInfo.mediaType = MediaType.NEC_525_DD; + ImageInfo.sectorSize = 256; + } + else if(diskSize % (2 * 26 * 128) == 0) + { + if(diskSize % (2 * 26 * 128) == 77) + ImageInfo.mediaType = MediaType.NEC_525_SD; + ImageInfo.sectorSize = 256; + } + else + { + DicConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 26 * 256)); + return false; + } + break; + default: + return false; + } + + DicConsole.VerboseWriteLine("DIM image contains a disk of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("DIM comments: {0}", ImageInfo.imageComments); + + dimImagePath = imagePath; + + FileInfo fi = new FileInfo(imagePath); + ImageInfo.imageSize = (ulong)diskSize; + ImageInfo.imageCreationTime = fi.CreationTimeUtc; + ImageInfo.imageLastModificationTime = fi.LastWriteTimeUtc; + ImageInfo.imageName = Path.GetFileNameWithoutExtension(imagePath); + ImageInfo.sectors = ImageInfo.imageSize / ImageInfo.sectorSize; + ImageInfo.imageComments = StringHandlers.CToString(comment, Encoding.GetEncoding(932)); + ImageInfo.xmlMediaType = XmlMediaType.BlockMedia; + + return true; + } + + public override bool ImageHasPartitions() + { + return false; + } + + public override ulong GetImageSize() + { + return ImageInfo.imageSize; + } + + public override ulong GetSectors() + { + return ImageInfo.sectors; + } + + public override uint GetSectorSize() + { + return ImageInfo.sectorSize; + } + + public override string GetImageFormat() + { + return "DIM disk image"; + } + + public override string GetImageVersion() + { + return ImageInfo.imageVersion; + } + + public override string GetImageApplication() + { + return ImageInfo.imageApplication; + } + + public override string GetImageApplicationVersion() + { + return ImageInfo.imageApplicationVersion; + } + + public override string GetImageCreator() + { + return ImageInfo.imageCreator; + } + + public override DateTime GetImageCreationTime() + { + return ImageInfo.imageCreationTime; + } + + public override DateTime GetImageLastModificationTime() + { + return ImageInfo.imageLastModificationTime; + } + + public override string GetImageName() + { + return ImageInfo.imageName; + } + + public override string GetImageComments() + { + return ImageInfo.imageComments; + } + + public override MediaType GetMediaType() + { + return ImageInfo.mediaType; + } + + public override byte[] ReadSector(ulong sectorAddress) + { + return ReadSectors(sectorAddress, 1); + } + + public override byte[] ReadSectors(ulong sectorAddress, uint length) + { + if(sectorAddress > ImageInfo.sectors - 1) + throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); + + if(sectorAddress + length > ImageInfo.sectors) + throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than available"); + + byte[] buffer = new byte[length * ImageInfo.sectorSize]; + + FileStream stream = new FileStream(dimImagePath, FileMode.Open, FileAccess.Read); + + stream.Seek((long)(dataOffset + sectorAddress * ImageInfo.sectorSize), SeekOrigin.Begin); + + stream.Read(buffer, 0, (int)(length * ImageInfo.sectorSize)); + + stream.Close(); + + return buffer; + } + + #region Unsupported features + + public override byte[] ReadDiskTag(MediaTagType tag) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorTag(ulong sectorAddress, SectorTagType tag) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSector(ulong sectorAddress, uint track) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorTag(ulong sectorAddress, uint track, SectorTagType tag) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorLong(ulong sectorAddress) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorLong(ulong sectorAddress, uint track) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override string GetMediaManufacturer() + { + return null; + } + + public override string GetMediaModel() + { + return null; + } + + public override string GetMediaSerialNumber() + { + return null; + } + + public override string GetMediaBarcode() + { + return null; + } + + public override string GetMediaPartNumber() + { + return null; + } + + public override int GetMediaSequence() + { + return 0; + } + + public override int GetLastDiskSequence() + { + return 0; + } + + public override string GetDriveManufacturer() + { + return null; + } + + public override string GetDriveModel() + { + return null; + } + + public override string GetDriveSerialNumber() + { + return null; + } + + public override List GetPartitions() + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override List GetTracks() + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override List GetSessionTracks(Session session) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override List GetSessionTracks(ushort session) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override List GetSessions() + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override bool? VerifySector(ulong sectorAddress) + { + return null; + } + + public override bool? VerifySector(ulong sectorAddress, uint track) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override bool? VerifySectors(ulong sectorAddress, uint length, out List FailingLBAs, out List UnknownLBAs) + { + FailingLBAs = new List(); + UnknownLBAs = new List(); + for(ulong i = 0; i < ImageInfo.sectors; i++) + UnknownLBAs.Add(i); + return null; + } + + public override bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List FailingLBAs, out List UnknownLBAs) + { + throw new FeatureUnsupportedImageException("Feature not supported by image format"); + } + + public override bool? VerifyMediaImage() + { + return null; + } + + #endregion + } +} \ No newline at end of file diff --git a/DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj b/DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj index 61fb58a7..afe4b3dd 100644 --- a/DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj +++ b/DiscImageChef.DiscImages/DiscImageChef.DiscImages.csproj @@ -50,6 +50,7 @@ + diff --git a/DiscImageChef.DiscImages/DiskCopy42.cs b/DiscImageChef.DiscImages/DiskCopy42.cs index 1794629c..95145dfe 100644 --- a/DiscImageChef.DiscImages/DiskCopy42.cs +++ b/DiscImageChef.DiscImages/DiskCopy42.cs @@ -440,6 +440,7 @@ namespace DiscImageChef.ImagePlugins } ImageInfo.xmlMediaType = XmlMediaType.BlockMedia; + DicConsole.VerboseWriteLine("DiskCopy 4.2 image contains a disk of type {0}", ImageInfo.mediaType); return true; } diff --git a/DiscImageChef.DiscImages/GDI.cs b/DiscImageChef.DiscImages/GDI.cs index 83ebd423..6703dc34 100644 --- a/DiscImageChef.DiscImages/GDI.cs +++ b/DiscImageChef.DiscImages/GDI.cs @@ -428,6 +428,8 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.OpticalDisc; + DicConsole.VerboseWriteLine("GDI image describes a disc of type {0}", ImageInfo.mediaType); + return true; } catch(Exception ex) diff --git a/DiscImageChef.DiscImages/Nero.cs b/DiscImageChef.DiscImages/Nero.cs index 61efb5bd..be9ca3de 100644 --- a/DiscImageChef.DiscImages/Nero.cs +++ b/DiscImageChef.DiscImages/Nero.cs @@ -1714,6 +1714,7 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.OpticalDisc; + DicConsole.VerboseWriteLine("Nero image contains a disc of type {0}", ImageInfo.mediaType); return true; } diff --git a/DiscImageChef.DiscImages/TeleDisk.cs b/DiscImageChef.DiscImages/TeleDisk.cs index 67d819ca..151feecd 100644 --- a/DiscImageChef.DiscImages/TeleDisk.cs +++ b/DiscImageChef.DiscImages/TeleDisk.cs @@ -576,6 +576,10 @@ namespace DiscImageChef.ImagePlugins ImageInfo.xmlMediaType = XmlMediaType.BlockMedia; + DicConsole.VerboseWriteLine("TeleDisk image contains a disk of type {0}", ImageInfo.mediaType); + if(!string.IsNullOrEmpty(ImageInfo.imageComments)) + DicConsole.VerboseWriteLine("TeleDisk comments: {0}", ImageInfo.imageComments); + return true; } diff --git a/DiscImageChef.DiscImages/ZZZRawImage.cs b/DiscImageChef.DiscImages/ZZZRawImage.cs index bce2a604..aef88ce0 100644 --- a/DiscImageChef.DiscImages/ZZZRawImage.cs +++ b/DiscImageChef.DiscImages/ZZZRawImage.cs @@ -31,9 +31,10 @@ // ****************************************************************************/ using System; -using System.IO; using System.Collections.Generic; +using System.IO; using DiscImageChef.CommonTypes; +using DiscImageChef.Console; namespace DiscImageChef.ImagePlugins { @@ -274,6 +275,8 @@ namespace DiscImageChef.ImagePlugins break; } + DicConsole.VerboseWriteLine("Raw disk image contains a disk of type {0}", ImageInfo.mediaType); + return true; } diff --git a/README.md b/README.md index 1502afe0..f94822c7 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ Supported disk image formats * Alcohol 120% Media Descriptor Structure (.MDS/.MDF) * BlindWrite 4 TOC files (.BWT/.BWI/.BWS) * BlindWrite 5/6 TOC files (.B5T/.B5I and .B6T/.B6I) +* X68k DIM disk image files (.DIM) Supported partitioning schemes ==============================