public int GetNotGoodBounds(int firstSectorNum, int lastSectorNum, DiskSide side, ref int begin, ref int end)
        {
            int cntr = 0;
            int b    = -1;

            for (int i = firstSectorNum; i < lastSectorNum; i++)
            {
                if (Sectors[i] == SectorProcessResult.Good)
                {
                    continue;
                }
                int track = i / SectorsOnTrack;
                if ((track & 1) == 0 && (side == DiskSide.Side1))
                {
                    continue;
                }
                if ((track & 1) == 1 && (side == DiskSide.Side0))
                {
                    continue;
                }
                if (b < 0)
                {
                    b = i;
                }
                end = i + 1;
                cntr++;
            }
            begin = b;
            return(cntr);
        }
 public void ReadFromXml(XmlTextReader xml)
 {
     Drive              = (Drive)Enum.Parse(typeof(Drive), xml.GetAttribute("Drive"));
     DataRate           = (DataRate)Enum.Parse(typeof(DataRate), xml.GetAttribute("DataRate"));
     Side               = (DiskSide)Enum.Parse(typeof(DiskSide), xml.GetAttribute("Side"));
     ReadMode           = (ReadMode)Enum.Parse(typeof(ReadMode), xml.GetAttribute("ReadMode"));
     SectorReadAttempts = Math.Max(0, int.Parse(xml.GetAttribute("SectorReadAttempts")));
     FirstTrack         = Math.Max(0, int.Parse(xml.GetAttribute("FirstTrack")));
     FirstTrack         = Math.Min(171, FirstTrack);
     LastTrack          = Math.Min(172, int.Parse(xml.GetAttribute("LastTrack")));
     LastTrack          = Math.Max(0, LastTrack);
 }