diff --git a/DiscImageChef.CommonTypes/MediaType.cs b/DiscImageChef.CommonTypes/MediaType.cs index 9482a3056..94bb4e634 100644 --- a/DiscImageChef.CommonTypes/MediaType.cs +++ b/DiscImageChef.CommonTypes/MediaType.cs @@ -353,6 +353,10 @@ namespace DiscImageChef.CommonTypes CBM_AMIGA_35_HD, /// 5,25", SS, DD, 35 tracks, GCR CBM_1540, + /// 5,25", SS, DD, 40 tracks, GCR + CBM_1540_Ext, + /// 5,25", DS, DD, 35 tracks, GCR + CBM_1571, #endregion Commodore standard floppy formats #region NEC standard floppy formats diff --git a/DiscImageChef.DiscImages/ZZZRawImage.cs b/DiscImageChef.DiscImages/ZZZRawImage.cs index b97eddc93..e52705aef 100644 --- a/DiscImageChef.DiscImages/ZZZRawImage.cs +++ b/DiscImageChef.DiscImages/ZZZRawImage.cs @@ -85,6 +85,13 @@ namespace DiscImageChef.ImagePlugins // Check known disk sizes with sectors smaller than 512 switch(imageFilter.GetDataForkLength()) { + #region Commodore + case 174848: + case 175531: + case 197376: + case 351062: + case 822400: + #endregion Commodore case 81664: case 116480: case 242944: @@ -115,11 +122,13 @@ namespace DiscImageChef.ImagePlugins stream.Seek(0, SeekOrigin.Begin); string extension = Path.GetExtension(imageFilter.GetFilename()).ToLower(); - if(extension == ".iso" && (imageFilter.GetDataForkLength() % 2048) == 0) - ImageInfo.sectorSize = 2048; - else - { - switch(imageFilter.GetDataForkLength()) + if(extension == ".iso" && (imageFilter.GetDataForkLength() % 2048) == 0) + ImageInfo.sectorSize = 2048; + else if(extension == ".d81" && imageFilter.GetDataForkLength() == 819200) + ImageInfo.sectorSize = 256; + else + { + switch(imageFilter.GetDataForkLength()) { case 242944: case 256256: @@ -145,7 +154,16 @@ namespace DiscImageChef.ImagePlugins case 80384: // T0S0 = 128bps case 325632: // T0S0 = 128bps, T0S1 = 256bps case 653312: // T0S0 = 128bps, T0S1 = 256bps - ImageInfo.sectorSize = 256; + #region Commodore + case 174848: + case 175531: + case 196608: + case 197376: + case 349696: + case 351062: + case 822400: + #endregion Commodore + ImageInfo.sectorSize = 256; break; case 81664: ImageInfo.sectorSize = 319; @@ -249,7 +267,19 @@ namespace DiscImageChef.ImagePlugins ImageInfo.sectorSize = 8192; // Biggest sector size differentTrackZeroSize = true; break; - default: + case 175531: + ImageInfo.sectors = 683; + break; + case 197375: + ImageInfo.sectors = 768; + break; + case 351062: + ImageInfo.sectors = 1366; + break; + case 822400: + ImageInfo.sectors = 3200; + break; + default: ImageInfo.sectors = ImageInfo.imageSize / ImageInfo.sectorSize; break; } @@ -279,6 +309,7 @@ namespace DiscImageChef.ImagePlugins { ImageInfo.sectorSize = 256; ImageInfo.sectors = ImageInfo.imageSize / ImageInfo.sectorSize; + ImageInfo.mediaType = MediaType.GENERIC_HDD; } } @@ -628,6 +659,8 @@ namespace DiscImageChef.ImagePlugins case 737280: return MediaType.DOS_35_DS_DD_9; case 819200: + if(ImageInfo.sectorSize == 256) + return MediaType.CBM_35_DD; return MediaType.AppleSonyDS; case 839680: return MediaType.FDFORMAT_35_DD; @@ -683,7 +716,18 @@ namespace DiscImageChef.ImagePlugins return MediaType.ECMA_184_512; case 654540800: return MediaType.ECMA_184; - default: + #region Commodore + case 174848: + case 175531: + return MediaType.CBM_1540; + case 196608: + case 197376: + return MediaType.CBM_1540_Ext; + case 349696: + case 351062: + return MediaType.CBM_1571; + #endregion Commodore + default: return MediaType.GENERIC_HDD; } } diff --git a/DiscImageChef.Metadata/Dimensions.cs b/DiscImageChef.Metadata/Dimensions.cs index 693b113e4..9088d40bb 100644 --- a/DiscImageChef.Metadata/Dimensions.cs +++ b/DiscImageChef.Metadata/Dimensions.cs @@ -63,6 +63,8 @@ namespace DiscImageChef.Metadata case CommonTypes.MediaType.ATARI_525_ED: case CommonTypes.MediaType.ATARI_525_DD: case CommonTypes.MediaType.CBM_1540: + case CommonTypes.MediaType.CBM_1540_Ext: + case CommonTypes.MediaType.CBM_1571: case CommonTypes.MediaType.ECMA_66: case CommonTypes.MediaType.ECMA_70: case CommonTypes.MediaType.NEC_525_HD: diff --git a/DiscImageChef.Metadata/MediaType.cs b/DiscImageChef.Metadata/MediaType.cs index fd078c22c..e8c7137f5 100644 --- a/DiscImageChef.Metadata/MediaType.cs +++ b/DiscImageChef.Metadata/MediaType.cs @@ -503,9 +503,14 @@ namespace DiscImageChef.Metadata DiscSubType = "Atari double-density"; break; case CommonTypes.MediaType.CBM_1540: + case CommonTypes.MediaType.CBM_1540_Ext: DiscType = "5.25\" floppy"; DiscSubType = "Commodore 1540/1541"; break; + case CommonTypes.MediaType.CBM_1571: + DiscType = "5.25\" floppy"; + DiscSubType = "Commodore 1571"; + break; case CommonTypes.MediaType.CBM_35_DD: DiscType = "3.5\" floppy"; DiscSubType = "Commodore 1581";