mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Added disk geometry.
This commit is contained in:
@@ -289,6 +289,7 @@ namespace DiscImageChef.CommonTypes
|
|||||||
|
|
||||||
#region IBM non standard floppy formats
|
#region IBM non standard floppy formats
|
||||||
XDF_525,
|
XDF_525,
|
||||||
|
/// <summary>3.5", DS, HD, 80 tracks, 4 spt, 8192 + 2048 + 1024 + 512 bytes/sector, MFMm track 0 = 19 sectors, 512 bytes/sector, falsified to DOS as 23 spt, 512 bps</summary>
|
||||||
XDF_35,
|
XDF_35,
|
||||||
#endregion IBM non standard floppy formats
|
#endregion IBM non standard floppy formats
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,9 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.sectors = (ulong)(fdihdr.cylinders * fdihdr.heads * fdihdr.spt);
|
ImageInfo.sectors = (ulong)(fdihdr.cylinders * fdihdr.heads * fdihdr.spt);
|
||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
ImageInfo.sectorSize = (uint)fdihdr.bps;
|
ImageInfo.sectorSize = (uint)fdihdr.bps;
|
||||||
|
ImageInfo.cylinders = (uint)fdihdr.cylinders;
|
||||||
|
ImageInfo.heads = (uint)fdihdr.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = (uint)fdihdr.spt;
|
||||||
|
|
||||||
anexImageFilter = imageFilter;
|
anexImageFilter = imageFilter;
|
||||||
|
|
||||||
|
|||||||
@@ -368,7 +368,43 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
||||||
DicConsole.VerboseWriteLine("2MG comments: {0}", ImageInfo.imageComments);
|
DicConsole.VerboseWriteLine("2MG comments: {0}", ImageInfo.imageComments);
|
||||||
|
|
||||||
return true;
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.Apple32SS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 13;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple32DS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 13;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple33SS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple33DS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleSonySS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
// Variable sectors per track, this suffices
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleSonyDS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
// Variable sectors per track, this suffices
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool ImageHasPartitions()
|
public override bool ImageHasPartitions()
|
||||||
|
|||||||
@@ -125,6 +125,9 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.sectors = 560;
|
ImageInfo.sectors = 560;
|
||||||
ImageInfo.mediaType = MediaType.Apple33SS;
|
ImageInfo.mediaType = MediaType.Apple33SS;
|
||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,6 +243,19 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.sectorSize = 256;
|
ImageInfo.sectorSize = 256;
|
||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
ImageInfo.readableSectorTags.Add(SectorTagType.FloppyAddressMark);
|
ImageInfo.readableSectorTags.Add(SectorTagType.FloppyAddressMark);
|
||||||
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.Apple32SS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 13;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple33SS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,27 +176,43 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.mediaType = MediaType.AppleProfile;
|
ImageInfo.mediaType = MediaType.AppleProfile;
|
||||||
else
|
else
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
break;
|
ImageInfo.cylinders = 152;
|
||||||
|
ImageInfo.heads = 4;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
case profile10Name:
|
case profile10Name:
|
||||||
if(ImageInfo.sectors == 0x4C00)
|
if(ImageInfo.sectors == 0x4C00)
|
||||||
ImageInfo.mediaType = MediaType.AppleProfile;
|
ImageInfo.mediaType = MediaType.AppleProfile;
|
||||||
else
|
else
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
break;
|
ImageInfo.cylinders = 304;
|
||||||
|
ImageInfo.heads = 4;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
case widgetName:
|
case widgetName:
|
||||||
if(ImageInfo.sectors == 0x4C00)
|
if(ImageInfo.sectors == 0x4C00)
|
||||||
ImageInfo.mediaType = MediaType.AppleWidget;
|
ImageInfo.mediaType = MediaType.AppleWidget;
|
||||||
else
|
else
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
break;
|
ImageInfo.cylinders = 304;
|
||||||
|
ImageInfo.heads = 4;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
case priamName:
|
case priamName:
|
||||||
if(ImageInfo.sectors == 0x022C7C)
|
if(ImageInfo.sectors == 0x022C7C)
|
||||||
ImageInfo.mediaType = MediaType.PriamDataTower;
|
ImageInfo.mediaType = MediaType.PriamDataTower;
|
||||||
else
|
else
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
break;
|
// This values are invented...
|
||||||
|
ImageInfo.cylinders = 419;
|
||||||
|
ImageInfo.heads = 4;
|
||||||
|
ImageInfo.sectorsPerTrack = 85;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -713,6 +713,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
mapVersion = 1;
|
mapVersion = 1;
|
||||||
isHdd = true;
|
isHdd = true;
|
||||||
|
|
||||||
|
ImageInfo.cylinders = hdrV1.cylinders;
|
||||||
|
ImageInfo.heads = hdrV1.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = hdrV1.sectors;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
@@ -775,6 +779,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
mapVersion = 1;
|
mapVersion = 1;
|
||||||
isHdd = true;
|
isHdd = true;
|
||||||
|
|
||||||
|
ImageInfo.cylinders = hdrV2.cylinders;
|
||||||
|
ImageInfo.heads = hdrV2.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = hdrV2.sectors;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
@@ -967,6 +975,9 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
{
|
{
|
||||||
isHdd = true;
|
isHdd = true;
|
||||||
ImageInfo.sectorSize = uint.Parse(gdddMatch.Groups["bps"].Value);
|
ImageInfo.sectorSize = uint.Parse(gdddMatch.Groups["bps"].Value);
|
||||||
|
ImageInfo.cylinders = uint.Parse(gdddMatch.Groups["cylinders"].Value);
|
||||||
|
ImageInfo.heads = uint.Parse(gdddMatch.Groups["heads"].Value);
|
||||||
|
ImageInfo.sectorsPerTrack = uint.Parse(gdddMatch.Groups["sectors"].Value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// "CHCD"
|
// "CHCD"
|
||||||
@@ -1417,6 +1428,18 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.driveModel = idnt.Value.Model;
|
ImageInfo.driveModel = idnt.Value.Model;
|
||||||
ImageInfo.driveSerialNumber = idnt.Value.SerialNumber;
|
ImageInfo.driveSerialNumber = idnt.Value.SerialNumber;
|
||||||
ImageInfo.driveFirmwareRevision = idnt.Value.FirmwareRevision;
|
ImageInfo.driveFirmwareRevision = idnt.Value.FirmwareRevision;
|
||||||
|
if(idnt.Value.CurrentCylinders > 0 && idnt.Value.CurrentHeads > 0 && idnt.Value.CurrentSectorsPerTrack > 0)
|
||||||
|
{
|
||||||
|
ImageInfo.cylinders = idnt.Value.CurrentCylinders;
|
||||||
|
ImageInfo.heads = idnt.Value.CurrentHeads;
|
||||||
|
ImageInfo.sectorsPerTrack = idnt.Value.CurrentSectorsPerTrack;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImageInfo.cylinders = idnt.Value.Cylinders;
|
||||||
|
ImageInfo.heads = idnt.Value.Heads;
|
||||||
|
ImageInfo.sectorsPerTrack = idnt.Value.SectorsPerTrack;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
identify = meta;
|
identify = meta;
|
||||||
if(!ImageInfo.readableMediaTags.Contains(MediaTagType.ATA_IDENTIFY))
|
if(!ImageInfo.readableMediaTags.Contains(MediaTagType.ATA_IDENTIFY))
|
||||||
|
|||||||
@@ -429,8 +429,8 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.mediaType = MediaType.CompactFloppy;
|
ImageInfo.mediaType = MediaType.CompactFloppy;
|
||||||
ImageInfo.readableSectorTags.Add(SectorTagType.FloppyAddressMark);
|
ImageInfo.readableSectorTags.Add(SectorTagType.FloppyAddressMark);
|
||||||
|
|
||||||
// Debug writing full disk as raw
|
// Debug writing full disk as raw
|
||||||
/*
|
/*
|
||||||
FileStream foo = new FileStream(Path.GetFileNameWithoutExtension(imagePath) + ".bin", FileMode.Create);
|
FileStream foo = new FileStream(Path.GetFileNameWithoutExtension(imagePath) + ".bin", FileMode.Create);
|
||||||
for(ulong i = 0; i < (ulong)sectors.Count; i++)
|
for(ulong i = 0; i < (ulong)sectors.Count; i++)
|
||||||
{
|
{
|
||||||
@@ -441,7 +441,11 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
foo.Close();
|
foo.Close();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = header.tracks;
|
||||||
|
ImageInfo.heads = header.sides;
|
||||||
|
ImageInfo.sectors = ImageInfo.sectors / (uint)(header.tracks * header.sides);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int SizeCodeToBytes(IBMSectorSizeCode code)
|
static int SizeCodeToBytes(IBMSectorSizeCode code)
|
||||||
|
|||||||
@@ -410,6 +410,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
||||||
DicConsole.VerboseWriteLine("CopyQM comments: {0}", ImageInfo.imageComments);
|
DicConsole.VerboseWriteLine("CopyQM comments: {0}", ImageInfo.imageComments);
|
||||||
|
|
||||||
|
ImageInfo.heads = header.heads;
|
||||||
|
ImageInfo.cylinders = header.imageCylinders;
|
||||||
|
ImageInfo.sectorsPerTrack = header.sectorsPerTrack;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -490,6 +490,76 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
ImageInfo.sectorSize = (uint)(128 << (int)bps);
|
ImageInfo.sectorSize = (uint)(128 << (int)bps);
|
||||||
|
|
||||||
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.NEC_525_SS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_8_SD:
|
||||||
|
case MediaType.NEC_8_DD:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_525_DS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_525_HD:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_SS_DD_8:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_SS_DD_9:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_DS_DD_8:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_35_HD_15:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_ED:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 36;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_35_TD:
|
||||||
|
ImageInfo.cylinders = 240;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 38;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ namespace DiscImageChef.DiscImages
|
|||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case kAppleIIDisk:
|
case kAppleIIDisk:
|
||||||
if(header.srcSize != kAppleIIDisk)
|
if(header.srcSize != kApple800KSize)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case kMacHiDDisk:
|
case kMacHiDDisk:
|
||||||
@@ -395,13 +395,41 @@ namespace DiscImageChef.DiscImages
|
|||||||
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
||||||
ImageInfo.sectorSize = sectorSize;
|
ImageInfo.sectorSize = sectorSize;
|
||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
|
||||||
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
||||||
if(header.srcCmp == kNoCompress)
|
if(header.srcCmp == kNoCompress)
|
||||||
ImageInfo.imageVersion = "1.4";
|
ImageInfo.imageVersion = "1.4";
|
||||||
else
|
else
|
||||||
ImageInfo.imageVersion = "1.5";
|
ImageInfo.imageVersion = "1.5";
|
||||||
|
|
||||||
|
switch(header.srcSize)
|
||||||
|
{
|
||||||
|
case kMac400KSize:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
ImageInfo.mediaType = MediaType.AppleSonySS;
|
||||||
|
break;
|
||||||
|
case kMac800KSize:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
ImageInfo.mediaType = MediaType.AppleSonyDS;
|
||||||
|
break;
|
||||||
|
case kMSDOS720KSize:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
ImageInfo.mediaType = MediaType.DOS_35_DS_DD_9;
|
||||||
|
break;
|
||||||
|
case kMac1440KSize:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
ImageInfo.mediaType = MediaType.DOS_35_HD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -238,7 +238,42 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.imageComments = StringHandlers.CToString(comment, Encoding.GetEncoding(932));
|
ImageInfo.imageComments = StringHandlers.CToString(comment, Encoding.GetEncoding(932));
|
||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
|
|
||||||
return true;
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.SHARP_525:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.SHARP_525_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.SHARP_35_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_8_DD:
|
||||||
|
case MediaType.NEC_8_SD:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool ImageHasPartitions()
|
public override bool ImageHasPartitions()
|
||||||
|
|||||||
@@ -516,7 +516,65 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||||
DicConsole.VerboseWriteLine("DiskCopy 4.2 image contains a disk of type {0}", ImageInfo.mediaType);
|
DicConsole.VerboseWriteLine("DiskCopy 4.2 image contains a disk of type {0}", ImageInfo.mediaType);
|
||||||
|
|
||||||
return true;
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.AppleSonySS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleSonyDS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.DMF:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 21;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleProfile:
|
||||||
|
switch(ImageInfo.sectors)
|
||||||
|
{
|
||||||
|
case 9728:
|
||||||
|
ImageInfo.cylinders = 152;
|
||||||
|
break;
|
||||||
|
case 19456:
|
||||||
|
ImageInfo.cylinders = 304;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ImageInfo.heads = 4;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleWidget:
|
||||||
|
ImageInfo.cylinders = 608;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleHD20:
|
||||||
|
ImageInfo.cylinders = 610;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool? VerifySector(ulong sectorAddress)
|
public override bool? VerifySector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
public string driveSerialNumber;
|
public string driveSerialNumber;
|
||||||
public string driveFirmwareRevision;
|
public string driveFirmwareRevision;
|
||||||
public XmlMediaType xmlMediaType;
|
public XmlMediaType xmlMediaType;
|
||||||
|
// CHS geometry...
|
||||||
|
public uint cylinders;
|
||||||
|
public uint heads;
|
||||||
|
public uint sectorsPerTrack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -451,6 +451,36 @@ namespace DiscImageChef.DiscImages
|
|||||||
ImageInfo.imageApplicationVersion = "6";
|
ImageInfo.imageApplicationVersion = "6";
|
||||||
ImageInfo.imageApplication = "Apple DiskCopy";
|
ImageInfo.imageApplication = "Apple DiskCopy";
|
||||||
|
|
||||||
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.AppleSonyDS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.DMF:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 21;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -269,7 +269,11 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
sectorCache.Add(sectorAddress, sector);
|
sectorCache.Add(sectorAddress, sector);
|
||||||
|
|
||||||
return sector;
|
ImageInfo.cylinders = pHdr.cylinders;
|
||||||
|
ImageInfo.heads = pHdr.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = (uint)((pHdr.sectors / pHdr.heads) / pHdr.cylinders);
|
||||||
|
|
||||||
|
return sector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||||
|
|||||||
@@ -293,7 +293,11 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
ImageInfo.imageSize = qHdr.size;
|
ImageInfo.imageSize = qHdr.size;
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSector(ulong sectorAddress)
|
public override byte[] ReadSector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -336,7 +336,11 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.imageSize = qHdr.size;
|
ImageInfo.imageSize = qHdr.size;
|
||||||
ImageInfo.imageVersion = string.Format("{0}", qHdr.version);
|
ImageInfo.imageVersion = string.Format("{0}", qHdr.version);
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSector(ulong sectorAddress)
|
public override byte[] ReadSector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -299,7 +299,11 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||||
ImageInfo.imageSize = qHdr.image_size;
|
ImageInfo.imageSize = qHdr.image_size;
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSector(ulong sectorAddress)
|
public override byte[] ReadSector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -311,6 +311,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
decodedDisk = new byte[ImageInfo.sectors * ImageInfo.sectorSize];
|
decodedDisk = new byte[ImageInfo.sectors * ImageInfo.sectorSize];
|
||||||
stream.Read(decodedDisk, 0, (int)(stream.Length - header.dataOffset));
|
stream.Read(decodedDisk, 0, (int)(stream.Length - header.dataOffset));
|
||||||
|
|
||||||
|
ImageInfo.cylinders = header.cylinders;
|
||||||
|
ImageInfo.heads = header.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = header.sectorsPerTrack;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -579,6 +579,10 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
||||||
DicConsole.VerboseWriteLine("TeleDisk comments: {0}", ImageInfo.imageComments);
|
DicConsole.VerboseWriteLine("TeleDisk comments: {0}", ImageInfo.imageComments);
|
||||||
|
|
||||||
|
ImageInfo.heads = header.sides;
|
||||||
|
ImageInfo.sectorsPerTrack = spt;
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / header.sides) / spt);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -511,6 +511,10 @@ namespace DiscImageChef.DiscImages
|
|||||||
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
||||||
ImageInfo.imageVersion = string.Format("{0}", footer.version);
|
ImageInfo.imageVersion = string.Format("{0}", footer.version);
|
||||||
|
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -235,7 +235,11 @@ namespace DiscImageChef.DiscImages
|
|||||||
}
|
}
|
||||||
imageStream = stream;
|
imageStream = stream;
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = vHdr.cylinders;
|
||||||
|
ImageInfo.heads = vHdr.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = vHdr.spt;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSector(ulong sectorAddress)
|
public override byte[] ReadSector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -632,7 +632,11 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.imageLastModificationTime = thisDateTime;
|
ImageInfo.imageLastModificationTime = thisDateTime;
|
||||||
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
||||||
|
|
||||||
if(thisFooter.diskType == typeDynamic || thisFooter.diskType == typeDifferencing)
|
ImageInfo.cylinders = (thisFooter.diskGeometry & 0xFFFF0000) >> 16;
|
||||||
|
ImageInfo.heads = (thisFooter.diskGeometry & 0xFF00) >> 8;
|
||||||
|
ImageInfo.sectorsPerTrack = (thisFooter.diskGeometry & 0xFF);
|
||||||
|
|
||||||
|
if(thisFooter.diskType == typeDynamic || thisFooter.diskType == typeDifferencing)
|
||||||
{
|
{
|
||||||
imageStream.Seek((long)thisFooter.offset, SeekOrigin.Begin);
|
imageStream.Seek((long)thisFooter.offset, SeekOrigin.Begin);
|
||||||
byte[] dynamicBytes = new byte[1024];
|
byte[] dynamicBytes = new byte[1024];
|
||||||
|
|||||||
@@ -757,9 +757,13 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
ImageInfo.sectors = ImageInfo.imageSize / ImageInfo.sectorSize;
|
ImageInfo.sectors = ImageInfo.imageSize / ImageInfo.sectorSize;
|
||||||
ImageInfo.driveSerialNumber = Page83Data.ToString();
|
ImageInfo.driveSerialNumber = Page83Data.ToString();
|
||||||
|
|
||||||
// TODO: Separate image application from version, need several samples.
|
// TODO: Separate image application from version, need several samples.
|
||||||
|
|
||||||
return true;
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckBitmap(ulong sectorAddress)
|
bool CheckBitmap(ulong sectorAddress)
|
||||||
|
|||||||
@@ -329,7 +329,9 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
FiltersList filtersList = new FiltersList();
|
FiltersList filtersList = new FiltersList();
|
||||||
|
|
||||||
if(cowD)
|
bool matchedCyls = false, matchedHds = false, matchedSpt = false;
|
||||||
|
|
||||||
|
if(cowD)
|
||||||
{
|
{
|
||||||
int cowCount = 1;
|
int cowCount = 1;
|
||||||
string basePath = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath());
|
string basePath = Path.GetFileNameWithoutExtension(imageFilter.GetBasePath());
|
||||||
@@ -374,7 +376,7 @@ namespace DiscImageChef.DiscImages
|
|||||||
|
|
||||||
extents.Add(currentSector, newExtent);
|
extents.Add(currentSector, newExtent);
|
||||||
currentSector += newExtent.sectors;
|
currentSector += newExtent.sectors;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -393,15 +395,21 @@ namespace DiscImageChef.DiscImages
|
|||||||
Regex RegexType = new Regex(TypeRegEx);
|
Regex RegexType = new Regex(TypeRegEx);
|
||||||
Regex RegexExtent = new Regex(ExtentRegEx);
|
Regex RegexExtent = new Regex(ExtentRegEx);
|
||||||
Regex RegexParent = new Regex(ParentRegEx);
|
Regex RegexParent = new Regex(ParentRegEx);
|
||||||
|
Regex RegexCylinders = new Regex(DDBCylindersRegEx);
|
||||||
|
Regex RegexHeads = new Regex(DDBHeadsRegex);
|
||||||
|
Regex RegexSectors = new Regex(DDBSectorsRegEx);
|
||||||
|
|
||||||
Match MatchVersion;
|
Match MatchVersion;
|
||||||
Match MatchCid;
|
Match MatchCid;
|
||||||
Match MatchParentCid;
|
Match MatchParentCid;
|
||||||
Match MatchType;
|
Match MatchType;
|
||||||
Match MatchExtent;
|
Match MatchExtent;
|
||||||
Match MatchParent;
|
Match MatchParent;
|
||||||
|
Match MatchCylinders;
|
||||||
|
Match MatchHeads;
|
||||||
|
Match MatchSectors;
|
||||||
|
|
||||||
StreamReader ddfStreamRdr = new StreamReader(ddfStream);
|
StreamReader ddfStreamRdr = new StreamReader(ddfStream);
|
||||||
|
|
||||||
while(ddfStreamRdr.Peek() >= 0)
|
while(ddfStreamRdr.Peek() >= 0)
|
||||||
{
|
{
|
||||||
@@ -413,50 +421,68 @@ namespace DiscImageChef.DiscImages
|
|||||||
MatchType = RegexType.Match(_line);
|
MatchType = RegexType.Match(_line);
|
||||||
MatchExtent = RegexExtent.Match(_line);
|
MatchExtent = RegexExtent.Match(_line);
|
||||||
MatchParent = RegexParent.Match(_line);
|
MatchParent = RegexParent.Match(_line);
|
||||||
|
MatchCylinders = RegexCylinders.Match(_line);
|
||||||
|
MatchHeads = RegexHeads.Match(_line);
|
||||||
|
MatchSectors = RegexSectors.Match(_line);
|
||||||
|
|
||||||
if(MatchVersion.Success)
|
if(MatchVersion.Success)
|
||||||
{
|
{
|
||||||
uint.TryParse(MatchVersion.Groups["version"].Value, out version);
|
uint.TryParse(MatchVersion.Groups["version"].Value, out version);
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "version = {0}", version);
|
DicConsole.DebugWriteLine("VMware plugin", "version = {0}", version);
|
||||||
}
|
}
|
||||||
else if(MatchCid.Success)
|
else if(MatchCid.Success)
|
||||||
{
|
{
|
||||||
cid = Convert.ToUInt32(MatchCid.Groups["cid"].Value, 16);
|
cid = Convert.ToUInt32(MatchCid.Groups["cid"].Value, 16);
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "cid = {0:x8}", cid);
|
DicConsole.DebugWriteLine("VMware plugin", "cid = {0:x8}", cid);
|
||||||
}
|
}
|
||||||
else if(MatchParentCid.Success)
|
else if(MatchParentCid.Success)
|
||||||
{
|
{
|
||||||
parentCid = Convert.ToUInt32(MatchParentCid.Groups["cid"].Value, 16);
|
parentCid = Convert.ToUInt32(MatchParentCid.Groups["cid"].Value, 16);
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "parentCID = {0:x8}", parentCid);
|
DicConsole.DebugWriteLine("VMware plugin", "parentCID = {0:x8}", parentCid);
|
||||||
}
|
}
|
||||||
else if(MatchType.Success)
|
else if(MatchType.Success)
|
||||||
{
|
{
|
||||||
imageType = MatchType.Groups["type"].Value;
|
imageType = MatchType.Groups["type"].Value;
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "createType = \"{0}\"", imageType);
|
DicConsole.DebugWriteLine("VMware plugin", "createType = \"{0}\"", imageType);
|
||||||
}
|
}
|
||||||
else if(MatchExtent.Success)
|
else if(MatchExtent.Success)
|
||||||
{
|
{
|
||||||
VMwareExtent newExtent = new VMwareExtent();
|
VMwareExtent newExtent = new VMwareExtent();
|
||||||
newExtent.access = MatchExtent.Groups["access"].Value;
|
newExtent.access = MatchExtent.Groups["access"].Value;
|
||||||
if(!embedded)
|
if(!embedded)
|
||||||
newExtent.filter = filtersList.GetFilter(Path.Combine(Path.GetDirectoryName(imageFilter.GetBasePath()), MatchExtent.Groups["filename"].Value));
|
newExtent.filter = filtersList.GetFilter(Path.Combine(Path.GetDirectoryName(imageFilter.GetBasePath()), MatchExtent.Groups["filename"].Value));
|
||||||
else
|
else
|
||||||
newExtent.filter = imageFilter;
|
newExtent.filter = imageFilter;
|
||||||
uint.TryParse(MatchExtent.Groups["offset"].Value, out newExtent.offset);
|
uint.TryParse(MatchExtent.Groups["offset"].Value, out newExtent.offset);
|
||||||
uint.TryParse(MatchExtent.Groups["sectors"].Value, out newExtent.sectors);
|
uint.TryParse(MatchExtent.Groups["sectors"].Value, out newExtent.sectors);
|
||||||
newExtent.type = MatchExtent.Groups["type"].Value;
|
newExtent.type = MatchExtent.Groups["type"].Value;
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "{0} {1} {2} \"{3}\" {4}", newExtent.access, newExtent.sectors, newExtent.type, newExtent.filter, newExtent.offset);
|
DicConsole.DebugWriteLine("VMware plugin", "{0} {1} {2} \"{3}\" {4}", newExtent.access, newExtent.sectors, newExtent.type, newExtent.filter, newExtent.offset);
|
||||||
|
|
||||||
extents.Add(currentSector, newExtent);
|
extents.Add(currentSector, newExtent);
|
||||||
currentSector += newExtent.sectors;
|
currentSector += newExtent.sectors;
|
||||||
}
|
}
|
||||||
else if(MatchParent.Success)
|
else if(MatchParent.Success)
|
||||||
{
|
{
|
||||||
parentName = MatchParent.Groups["filename"].Value;
|
parentName = MatchParent.Groups["filename"].Value;
|
||||||
DicConsole.DebugWriteLine("VMware plugin", "parentFileNameHint = \"{0}\"", parentName);
|
DicConsole.DebugWriteLine("VMware plugin", "parentFileNameHint = \"{0}\"", parentName);
|
||||||
hasParent = true;
|
hasParent = true;
|
||||||
}
|
}
|
||||||
}
|
else if(MatchCylinders.Success)
|
||||||
|
{
|
||||||
|
uint.TryParse(MatchCylinders.Groups["cylinders"].Value, out ImageInfo.cylinders);
|
||||||
|
matchedCyls = true;
|
||||||
|
}
|
||||||
|
else if(MatchHeads.Success)
|
||||||
|
{
|
||||||
|
uint.TryParse(MatchHeads.Groups["heads"].Value, out ImageInfo.heads);
|
||||||
|
matchedHds = true;
|
||||||
|
}
|
||||||
|
else if(MatchSectors.Success)
|
||||||
|
{
|
||||||
|
uint.TryParse(MatchSectors.Groups["sectors"].Value, out ImageInfo.sectorsPerTrack);
|
||||||
|
matchedSpt = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(extents.Count == 0)
|
if(extents.Count == 0)
|
||||||
@@ -671,7 +697,20 @@ namespace DiscImageChef.DiscImages
|
|||||||
else
|
else
|
||||||
ImageInfo.imageVersion = string.Format("{0}", version + 3);
|
ImageInfo.imageVersion = string.Format("{0}", version + 3);
|
||||||
|
|
||||||
return true;
|
if(cowD)
|
||||||
|
{
|
||||||
|
ImageInfo.cylinders = vmCHdr.cylinders;
|
||||||
|
ImageInfo.heads = vmCHdr.heads;
|
||||||
|
ImageInfo.sectorsPerTrack = vmCHdr.spt;
|
||||||
|
}
|
||||||
|
else if(!matchedCyls || !matchedHds || !matchedSpt)
|
||||||
|
{
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] ReadSector(ulong sectorAddress)
|
public override byte[] ReadSector(ulong sectorAddress)
|
||||||
|
|||||||
@@ -325,6 +325,311 @@ namespace DiscImageChef.ImagePlugins
|
|||||||
|
|
||||||
DicConsole.VerboseWriteLine("Raw disk image contains a disk of type {0}", ImageInfo.mediaType);
|
DicConsole.VerboseWriteLine("Raw disk image contains a disk of type {0}", ImageInfo.mediaType);
|
||||||
|
|
||||||
|
switch(ImageInfo.mediaType)
|
||||||
|
{
|
||||||
|
case MediaType.ACORN_35_DS_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 5;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_35_DS_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_525_DS_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_525_SS_DD_40:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_525_SS_DD_80:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_525_SS_SD_40:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.ACORN_525_SS_SD_80:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple32DS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 13;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple32SS:
|
||||||
|
ImageInfo.cylinders = 36;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 13;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple33DS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.Apple33SS:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleSonyDS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.AppleSonySS:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_35_DS_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_35_DS_DD_11:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 11;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_35_SS_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_35_SS_DD_11:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 11;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_525_ED:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.ATARI_525_SD:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.CBM_35_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.CBM_AMIGA_35_DD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 11;
|
||||||
|
break;
|
||||||
|
case MediaType.CBM_AMIGA_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 22;
|
||||||
|
break;
|
||||||
|
case MediaType.DMF:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 21;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_ED:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 36;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 18;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_35_SS_DD_9:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_DS_DD_8:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_DS_DD_9:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_HD:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_SS_DD_8:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.DOS_525_SS_DD_9:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_54:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_59:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_66:
|
||||||
|
ImageInfo.cylinders = 35;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 9;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_69_8:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_70:
|
||||||
|
ImageInfo.cylinders = 40;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_78:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 16;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_99_15:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_99_26:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.ECMA_99_8:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.FDFORMAT_35_DD:
|
||||||
|
ImageInfo.cylinders = 82;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 10;
|
||||||
|
break;
|
||||||
|
case MediaType.FDFORMAT_35_HD:
|
||||||
|
ImageInfo.cylinders = 82;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 21;
|
||||||
|
break;
|
||||||
|
case MediaType.FDFORMAT_525_HD:
|
||||||
|
ImageInfo.cylinders = 82;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 17;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM23FD:
|
||||||
|
ImageInfo.cylinders = 32;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM33FD_128:
|
||||||
|
ImageInfo.cylinders = 73;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM33FD_256:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM33FD_512:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 1;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM43FD_128:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM43FD_256:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM53FD_1024:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM53FD_256:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 26;
|
||||||
|
break;
|
||||||
|
case MediaType.IBM53FD_512:
|
||||||
|
ImageInfo.cylinders = 74;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 15;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_35_TD:
|
||||||
|
ImageInfo.cylinders = 240;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 38;
|
||||||
|
break;
|
||||||
|
case MediaType.NEC_525_HD:
|
||||||
|
ImageInfo.cylinders = 77;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 8;
|
||||||
|
break;
|
||||||
|
case MediaType.XDF_35:
|
||||||
|
ImageInfo.cylinders = 80;
|
||||||
|
ImageInfo.heads = 2;
|
||||||
|
ImageInfo.sectorsPerTrack = 23;
|
||||||
|
break;
|
||||||
|
// Following ones are what the device itself report, not the physical geometry
|
||||||
|
case MediaType.Jaz:
|
||||||
|
ImageInfo.cylinders = 1021;
|
||||||
|
ImageInfo.heads = 64;
|
||||||
|
ImageInfo.sectorsPerTrack = 32;
|
||||||
|
break;
|
||||||
|
case MediaType.PocketZip:
|
||||||
|
ImageInfo.cylinders = 154;
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 32;
|
||||||
|
break;
|
||||||
|
case MediaType.LS120:
|
||||||
|
ImageInfo.cylinders = 963;
|
||||||
|
ImageInfo.heads = 8;
|
||||||
|
ImageInfo.sectorsPerTrack = 32;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||||
|
ImageInfo.heads = 16;
|
||||||
|
ImageInfo.sectorsPerTrack = 63;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
42
DiscImageChef.Helpers/CHS.cs
Normal file
42
DiscImageChef.Helpers/CHS.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : CHS.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// 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 <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2017 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
using System;
|
||||||
|
namespace DiscImageChef.Helpers
|
||||||
|
{
|
||||||
|
public static class CHS
|
||||||
|
{
|
||||||
|
public static uint ToLBA(uint cyl, uint head, uint sector, uint maxHead, uint maxSector)
|
||||||
|
{
|
||||||
|
return maxHead == 0 || maxSector == 0 ? (cyl * 16 + head) * 63 + sector - 1 : (cyl * maxHead + head) * maxSector + sector - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -54,6 +54,7 @@
|
|||||||
<Compile Include="Extents\ExtentsByte.cs" />
|
<Compile Include="Extents\ExtentsByte.cs" />
|
||||||
<Compile Include="Extents\ExtentsSByte.cs" />
|
<Compile Include="Extents\ExtentsSByte.cs" />
|
||||||
<Compile Include="CountBits.cs" />
|
<Compile Include="CountBits.cs" />
|
||||||
|
<Compile Include="CHS.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -82,7 +83,7 @@
|
|||||||
<inheritsSet />
|
<inheritsSet />
|
||||||
<inheritsScope />
|
<inheritsScope />
|
||||||
</TextStylePolicy>
|
</TextStylePolicy>
|
||||||
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="True" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" SpacingAfterMethodDeclarationName="False" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="False" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="False" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" SpaceAfterControlFlowStatementKeyword="False" scope="text/x-csharp">
|
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="True" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" SpacingAfterMethodDeclarationName="False" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="False" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceAfterControlFlowStatementKeyword="False" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="False" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" scope="text/x-csharp">
|
||||||
<inheritsSet />
|
<inheritsSet />
|
||||||
<inheritsScope />
|
<inheritsScope />
|
||||||
</CSharpFormattingPolicy>
|
</CSharpFormattingPolicy>
|
||||||
|
|||||||
@@ -124,8 +124,8 @@ namespace DiscImageChef.PartPlugins
|
|||||||
valid &= entry.lba_start != 0 || entry.lba_sectors != 0 || entry.start_cylinder != 0 || entry.start_head != 0 || entry.start_sector != 0 || entry.end_cylinder != 0 || entry.end_head != 0 || entry.end_sector != 0;
|
valid &= entry.lba_start != 0 || entry.lba_sectors != 0 || entry.start_cylinder != 0 || entry.start_head != 0 || entry.start_sector != 0 || entry.end_cylinder != 0 || entry.end_head != 0 || entry.end_sector != 0;
|
||||||
if(entry.lba_start == 0 && entry.lba_sectors == 0 && valid)
|
if(entry.lba_start == 0 && entry.lba_sectors == 0 && valid)
|
||||||
{
|
{
|
||||||
lba_start = CHStoLBA(start_cylinder, entry.start_head, start_sector);
|
lba_start = Helpers.CHS.ToLBA(start_cylinder, entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||||
lba_sectors = CHStoLBA(end_cylinder, entry.end_head, entry.end_sector) - lba_start;
|
lba_sectors = Helpers.CHS.ToLBA(end_cylinder, entry.end_head, entry.end_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack) - lba_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For optical media
|
// For optical media
|
||||||
@@ -247,8 +247,8 @@ namespace DiscImageChef.PartPlugins
|
|||||||
ebr_entry.start_sector != 0 || ebr_entry.end_cylinder != 0 || ebr_entry.end_head != 0 || ebr_entry.end_sector != 0;
|
ebr_entry.start_sector != 0 || ebr_entry.end_cylinder != 0 || ebr_entry.end_head != 0 || ebr_entry.end_sector != 0;
|
||||||
if(ebr_entry.lba_start == 0 && ebr_entry.lba_sectors == 0 && ext_valid)
|
if(ebr_entry.lba_start == 0 && ebr_entry.lba_sectors == 0 && ext_valid)
|
||||||
{
|
{
|
||||||
ext_start = CHStoLBA(start_cylinder, ebr_entry.start_head, start_sector);
|
ext_start = Helpers.CHS.ToLBA(start_cylinder, ebr_entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||||
ext_sectors = CHStoLBA(end_cylinder, ebr_entry.end_head, ebr_entry.end_sector) - ext_start;
|
ext_sectors = Helpers.CHS.ToLBA(end_cylinder, ebr_entry.end_head, ebr_entry.end_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack) - ext_start;
|
||||||
}
|
}
|
||||||
ext_minix |= (ebr_entry.type == 0x81 || ebr_entry.type == 0x80);
|
ext_minix |= (ebr_entry.type == 0x81 || ebr_entry.type == 0x80);
|
||||||
|
|
||||||
@@ -364,8 +364,8 @@ namespace DiscImageChef.PartPlugins
|
|||||||
mnx_entry.start_sector != 0 || mnx_entry.end_cylinder != 0 || mnx_entry.end_head != 0 || mnx_entry.end_sector != 0;
|
mnx_entry.start_sector != 0 || mnx_entry.end_cylinder != 0 || mnx_entry.end_head != 0 || mnx_entry.end_sector != 0;
|
||||||
if(mnx_entry.lba_start == 0 && mnx_entry.lba_sectors == 0 && mnx_valid)
|
if(mnx_entry.lba_start == 0 && mnx_entry.lba_sectors == 0 && mnx_valid)
|
||||||
{
|
{
|
||||||
mnx_start = CHStoLBA(start_cylinder, mnx_entry.start_head, start_sector);
|
mnx_start = Helpers.CHS.ToLBA(start_cylinder, mnx_entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||||
mnx_sectors = CHStoLBA(end_cylinder, mnx_entry.end_head, mnx_entry.end_sector) - mnx_start;
|
mnx_sectors = Helpers.CHS.ToLBA(end_cylinder, mnx_entry.end_head, mnx_entry.end_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack) - mnx_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For optical media
|
// For optical media
|
||||||
@@ -404,14 +404,6 @@ namespace DiscImageChef.PartPlugins
|
|||||||
return any_mnx;
|
return any_mnx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint CHStoLBA(ushort cyl, byte head, byte sector)
|
|
||||||
{
|
|
||||||
#pragma warning disable IDE0004 // Remove Unnecessary Cast
|
|
||||||
return (((uint)cyl * 16) + (uint)head) * 63 + (uint)sector - 1;
|
|
||||||
#pragma warning restore IDE0004 // Remove Unnecessary Cast
|
|
||||||
}
|
|
||||||
|
|
||||||
static string DecodeMBRType(byte type)
|
static string DecodeMBRType(byte type)
|
||||||
{
|
{
|
||||||
switch(type)
|
switch(type)
|
||||||
|
|||||||
@@ -92,14 +92,14 @@ namespace DiscImageChef.PartPlugins
|
|||||||
|
|
||||||
Partition part = new Partition
|
Partition part = new Partition
|
||||||
{
|
{
|
||||||
Start = CHStoLBA(entry.dp_scyl, entry.dp_shd, entry.dp_ssect),
|
Start = Helpers.CHS.ToLBA(entry.dp_scyl, entry.dp_shd, entry.dp_ssect, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack),
|
||||||
Type = string.Format("{0}", (entry.dp_sid << 8) | entry.dp_mid),
|
Type = string.Format("{0}", (entry.dp_sid << 8) | entry.dp_mid),
|
||||||
Name = StringHandlers.CToString(entry.dp_name, Encoding.GetEncoding(932)),
|
Name = StringHandlers.CToString(entry.dp_name, Encoding.GetEncoding(932)),
|
||||||
Sequence = counter,
|
Sequence = counter,
|
||||||
Scheme = Name
|
Scheme = Name
|
||||||
};
|
};
|
||||||
part.Offset = part.Start * imagePlugin.GetSectorSize();
|
part.Offset = part.Start * imagePlugin.GetSectorSize();
|
||||||
part.Length = CHStoLBA(entry.dp_ecyl, entry.dp_ehd, entry.dp_esect) - part.Start;
|
part.Length = Helpers.CHS.ToLBA(entry.dp_ecyl, entry.dp_ehd, entry.dp_esect, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack) - part.Start;
|
||||||
part.Size = part.Length * imagePlugin.GetSectorSize();
|
part.Size = part.Length * imagePlugin.GetSectorSize();
|
||||||
|
|
||||||
if((entry.dp_sid & 0x7F) == 0x44 &&
|
if((entry.dp_sid & 0x7F) == 0x44 &&
|
||||||
@@ -116,13 +116,6 @@ namespace DiscImageChef.PartPlugins
|
|||||||
return partitions.Count > 0;
|
return partitions.Count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint CHStoLBA(ushort cyl, byte head, byte sector)
|
|
||||||
{
|
|
||||||
#pragma warning disable IDE0004 // Remove Unnecessary Cast
|
|
||||||
return (((uint)cyl * 16) + (uint)head) * 63 + (uint)sector - 1;
|
|
||||||
#pragma warning restore IDE0004 // Remove Unnecessary Cast
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct PC98Table
|
struct PC98Table
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user