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
|
||||
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,
|
||||
#endregion IBM non standard floppy formats
|
||||
|
||||
|
||||
@@ -264,6 +264,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.sectors = (ulong)(fdihdr.cylinders * fdihdr.heads * fdihdr.spt);
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
ImageInfo.sectorSize = (uint)fdihdr.bps;
|
||||
ImageInfo.cylinders = (uint)fdihdr.cylinders;
|
||||
ImageInfo.heads = (uint)fdihdr.heads;
|
||||
ImageInfo.sectorsPerTrack = (uint)fdihdr.spt;
|
||||
|
||||
anexImageFilter = imageFilter;
|
||||
|
||||
|
||||
@@ -368,6 +368,42 @@ namespace DiscImageChef.ImagePlugins
|
||||
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
||||
DicConsole.VerboseWriteLine("2MG comments: {0}", ImageInfo.imageComments);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -125,6 +125,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.sectors = 560;
|
||||
ImageInfo.mediaType = MediaType.Apple33SS;
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
ImageInfo.cylinders = 35;
|
||||
ImageInfo.heads = 2;
|
||||
ImageInfo.sectorsPerTrack = 16;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -243,6 +243,19 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.sectorSize = 256;
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -176,27 +176,43 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.mediaType = MediaType.AppleProfile;
|
||||
else
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.cylinders = 152;
|
||||
ImageInfo.heads = 4;
|
||||
ImageInfo.sectorsPerTrack = 16;
|
||||
break;
|
||||
case profile10Name:
|
||||
if(ImageInfo.sectors == 0x4C00)
|
||||
ImageInfo.mediaType = MediaType.AppleProfile;
|
||||
else
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.cylinders = 304;
|
||||
ImageInfo.heads = 4;
|
||||
ImageInfo.sectorsPerTrack = 16;
|
||||
break;
|
||||
case widgetName:
|
||||
if(ImageInfo.sectors == 0x4C00)
|
||||
ImageInfo.mediaType = MediaType.AppleWidget;
|
||||
else
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.cylinders = 304;
|
||||
ImageInfo.heads = 4;
|
||||
ImageInfo.sectorsPerTrack = 16;
|
||||
break;
|
||||
case priamName:
|
||||
if(ImageInfo.sectors == 0x022C7C)
|
||||
ImageInfo.mediaType = MediaType.PriamDataTower;
|
||||
else
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
// This values are invented...
|
||||
ImageInfo.cylinders = 419;
|
||||
ImageInfo.heads = 4;
|
||||
ImageInfo.sectorsPerTrack = 85;
|
||||
break;
|
||||
default:
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -713,6 +713,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
mapVersion = 1;
|
||||
isHdd = true;
|
||||
|
||||
ImageInfo.cylinders = hdrV1.cylinders;
|
||||
ImageInfo.heads = hdrV1.heads;
|
||||
ImageInfo.sectorsPerTrack = hdrV1.sectors;
|
||||
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
@@ -775,6 +779,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
mapVersion = 1;
|
||||
isHdd = true;
|
||||
|
||||
ImageInfo.cylinders = hdrV2.cylinders;
|
||||
ImageInfo.heads = hdrV2.heads;
|
||||
ImageInfo.sectorsPerTrack = hdrV2.sectors;
|
||||
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
@@ -967,6 +975,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
isHdd = true;
|
||||
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;
|
||||
// "CHCD"
|
||||
@@ -1417,6 +1428,18 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.driveModel = idnt.Value.Model;
|
||||
ImageInfo.driveSerialNumber = idnt.Value.SerialNumber;
|
||||
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;
|
||||
if(!ImageInfo.readableMediaTags.Contains(MediaTagType.ATA_IDENTIFY))
|
||||
|
||||
@@ -441,6 +441,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
foo.Close();
|
||||
*/
|
||||
|
||||
ImageInfo.cylinders = header.tracks;
|
||||
ImageInfo.heads = header.sides;
|
||||
ImageInfo.sectors = ImageInfo.sectors / (uint)(header.tracks * header.sides);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -410,6 +410,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
if(!string.IsNullOrEmpty(ImageInfo.imageComments))
|
||||
DicConsole.VerboseWriteLine("CopyQM comments: {0}", ImageInfo.imageComments);
|
||||
|
||||
ImageInfo.heads = header.heads;
|
||||
ImageInfo.cylinders = header.imageCylinders;
|
||||
ImageInfo.sectorsPerTrack = header.sectorsPerTrack;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -490,6 +490,76 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace DiscImageChef.DiscImages
|
||||
return false;
|
||||
break;
|
||||
case kAppleIIDisk:
|
||||
if(header.srcSize != kAppleIIDisk)
|
||||
if(header.srcSize != kApple800KSize)
|
||||
return false;
|
||||
break;
|
||||
case kMacHiDDisk:
|
||||
@@ -395,13 +395,41 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
||||
ImageInfo.sectorSize = sectorSize;
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
||||
if(header.srcCmp == kNoCompress)
|
||||
ImageInfo.imageVersion = "1.4";
|
||||
else
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -238,6 +238,41 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageComments = StringHandlers.CToString(comment, Encoding.GetEncoding(932));
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -516,6 +516,64 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
DicConsole.VerboseWriteLine("DiskCopy 4.2 image contains a disk of type {0}", ImageInfo.mediaType);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
public string driveSerialNumber;
|
||||
public string driveFirmwareRevision;
|
||||
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.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;
|
||||
}
|
||||
|
||||
|
||||
@@ -269,6 +269,10 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
sectorCache.Add(sectorAddress, sector);
|
||||
|
||||
ImageInfo.cylinders = pHdr.cylinders;
|
||||
ImageInfo.heads = pHdr.heads;
|
||||
ImageInfo.sectorsPerTrack = (uint)((pHdr.sectors / pHdr.heads) / pHdr.cylinders);
|
||||
|
||||
return sector;
|
||||
}
|
||||
|
||||
|
||||
@@ -293,6 +293,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.imageSize = qHdr.size;
|
||||
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -336,6 +336,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageSize = qHdr.size;
|
||||
ImageInfo.imageVersion = string.Format("{0}", qHdr.version);
|
||||
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -299,6 +299,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.mediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.imageSize = qHdr.image_size;
|
||||
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -311,6 +311,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
decodedDisk = new byte[ImageInfo.sectors * ImageInfo.sectorSize];
|
||||
stream.Read(decodedDisk, 0, (int)(stream.Length - header.dataOffset));
|
||||
|
||||
ImageInfo.cylinders = header.cylinders;
|
||||
ImageInfo.heads = header.heads;
|
||||
ImageInfo.sectorsPerTrack = header.sectorsPerTrack;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -579,6 +579,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
if(!string.IsNullOrEmpty(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;
|
||||
}
|
||||
|
||||
|
||||
@@ -511,6 +511,10 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.imageSize = ImageInfo.sectors * sectorSize;
|
||||
ImageInfo.imageVersion = string.Format("{0}", footer.version);
|
||||
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -235,6 +235,10 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
imageStream = stream;
|
||||
|
||||
ImageInfo.cylinders = vHdr.cylinders;
|
||||
ImageInfo.heads = vHdr.heads;
|
||||
ImageInfo.sectorsPerTrack = vHdr.spt;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -632,6 +632,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageLastModificationTime = thisDateTime;
|
||||
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
||||
|
||||
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);
|
||||
|
||||
@@ -759,6 +759,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
// TODO: Separate image application from version, need several samples.
|
||||
|
||||
ImageInfo.cylinders = (uint)((ImageInfo.sectors / 16) / 63);
|
||||
ImageInfo.heads = 16;
|
||||
ImageInfo.sectorsPerTrack = 63;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -329,6 +329,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
FiltersList filtersList = new FiltersList();
|
||||
|
||||
bool matchedCyls = false, matchedHds = false, matchedSpt = false;
|
||||
|
||||
if(cowD)
|
||||
{
|
||||
int cowCount = 1;
|
||||
@@ -393,6 +395,9 @@ namespace DiscImageChef.DiscImages
|
||||
Regex RegexType = new Regex(TypeRegEx);
|
||||
Regex RegexExtent = new Regex(ExtentRegEx);
|
||||
Regex RegexParent = new Regex(ParentRegEx);
|
||||
Regex RegexCylinders = new Regex(DDBCylindersRegEx);
|
||||
Regex RegexHeads = new Regex(DDBHeadsRegex);
|
||||
Regex RegexSectors = new Regex(DDBSectorsRegEx);
|
||||
|
||||
Match MatchVersion;
|
||||
Match MatchCid;
|
||||
@@ -400,6 +405,9 @@ namespace DiscImageChef.DiscImages
|
||||
Match MatchType;
|
||||
Match MatchExtent;
|
||||
Match MatchParent;
|
||||
Match MatchCylinders;
|
||||
Match MatchHeads;
|
||||
Match MatchSectors;
|
||||
|
||||
StreamReader ddfStreamRdr = new StreamReader(ddfStream);
|
||||
|
||||
@@ -413,6 +421,9 @@ namespace DiscImageChef.DiscImages
|
||||
MatchType = RegexType.Match(_line);
|
||||
MatchExtent = RegexExtent.Match(_line);
|
||||
MatchParent = RegexParent.Match(_line);
|
||||
MatchCylinders = RegexCylinders.Match(_line);
|
||||
MatchHeads = RegexHeads.Match(_line);
|
||||
MatchSectors = RegexSectors.Match(_line);
|
||||
|
||||
if(MatchVersion.Success)
|
||||
{
|
||||
@@ -456,6 +467,21 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("VMware plugin", "parentFileNameHint = \"{0}\"", parentName);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -671,6 +697,19 @@ namespace DiscImageChef.DiscImages
|
||||
else
|
||||
ImageInfo.imageVersion = string.Format("{0}", version + 3);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -325,6 +325,311 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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\ExtentsSByte.cs" />
|
||||
<Compile Include="CountBits.cs" />
|
||||
<Compile Include="CHS.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
@@ -82,7 +83,7 @@
|
||||
<inheritsSet />
|
||||
<inheritsScope />
|
||||
</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 />
|
||||
<inheritsScope />
|
||||
</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;
|
||||
if(entry.lba_start == 0 && entry.lba_sectors == 0 && valid)
|
||||
{
|
||||
lba_start = CHStoLBA(start_cylinder, entry.start_head, start_sector);
|
||||
lba_sectors = CHStoLBA(end_cylinder, entry.end_head, entry.end_sector) - lba_start;
|
||||
lba_start = Helpers.CHS.ToLBA(start_cylinder, entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||
lba_sectors = Helpers.CHS.ToLBA(end_cylinder, entry.end_head, entry.end_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack) - lba_start;
|
||||
}
|
||||
|
||||
// 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;
|
||||
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_sectors = CHStoLBA(end_cylinder, ebr_entry.end_head, ebr_entry.end_sector) - ext_start;
|
||||
ext_start = Helpers.CHS.ToLBA(start_cylinder, ebr_entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||
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);
|
||||
|
||||
@@ -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;
|
||||
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_sectors = CHStoLBA(end_cylinder, mnx_entry.end_head, mnx_entry.end_sector) - mnx_start;
|
||||
mnx_start = Helpers.CHS.ToLBA(start_cylinder, mnx_entry.start_head, start_sector, imagePlugin.ImageInfo.heads, imagePlugin.ImageInfo.sectorsPerTrack);
|
||||
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
|
||||
@@ -404,14 +404,6 @@ namespace DiscImageChef.PartPlugins
|
||||
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)
|
||||
{
|
||||
switch(type)
|
||||
|
||||
@@ -92,14 +92,14 @@ namespace DiscImageChef.PartPlugins
|
||||
|
||||
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),
|
||||
Name = StringHandlers.CToString(entry.dp_name, Encoding.GetEncoding(932)),
|
||||
Sequence = counter,
|
||||
Scheme = Name
|
||||
};
|
||||
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();
|
||||
|
||||
if((entry.dp_sid & 0x7F) == 0x44 &&
|
||||
@@ -116,13 +116,6 @@ namespace DiscImageChef.PartPlugins
|
||||
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)]
|
||||
struct PC98Table
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user