diff --git a/arch/ibm/decoder.cc b/arch/ibm/decoder.cc index 4b22835a..fb7fbe5b 100644 --- a/arch/ibm/decoder.cc +++ b/arch/ibm/decoder.cc @@ -156,6 +156,13 @@ public: _sector->logicalSide = _sector->physicalHead; if (trackdata.ignore_track_byte()) _sector->logicalTrack = _sector->physicalCylinder; + + for (int sector : trackdata.ignore_sector()) + if (_sector->logicalSector == sector) + { + _sector->status = Sector::MISSING; + break; + } } void decodeDataRecord() override diff --git a/arch/ibm/ibm.proto b/arch/ibm/ibm.proto index f03104f8..cb601c62 100644 --- a/arch/ibm/ibm.proto +++ b/arch/ibm/ibm.proto @@ -3,7 +3,7 @@ syntax = "proto2"; import "lib/common.proto"; message IbmDecoderProto { - // Next: 10 + // Next: 11 message TrackdataProto { message SectorsProto { repeated int32 sector = 1 [(help) = "require these sectors to exist for a good read"]; @@ -20,6 +20,8 @@ message IbmDecoderProto { optional bool ignore_track_byte = 6 [default = false, (help) = "ignore track byte in sector header"]; optional bool swap_sides = 4 [default = false, (help) = "put logical side 1 on physical side 0"]; + repeated int32 ignore_sector = 10 [(help) = "sectors with these IDs will not be read"]; + oneof required_sectors { SectorsProto sectors = 5 [(help) = "require these sectors to exist for a good read"]; SectorRangeProto sector_range = 9 [(help) = "require these sectors to exist for a good read"];