Exemplo n.º 1
0
        public void DetectDiskSize(int htMaxTracks)
        {
            DiskImage image = Params.Image;

            if (image.SizeTracks < htMaxTracks)
            {
                int realMaxTrack = image.SizeTracks;
                int prevCylinder = (image.SizeTracks - 1) / 2;
                for (int track = image.SizeTracks; track < htMaxTracks; track++)
                {
                    int cylinder = track / 2;
                    if (cylinder != prevCylinder)
                    {
                        Driver.Seek(DriverHandle, track);
                        if (Aborted)
                        {
                            return;
                        }
                        prevCylinder = cylinder;
                    }
                    if (!ScanFormat(workTrackFormat, track, true))
                    {
                        return;
                    }
                    Log.Info?.Out($"Формат трека {track}: {workTrackFormat.FormatName} | {workTrackFormat.Layout.Cnt} sectors | {workTrackFormat.ToStringAsSectorArray()}");
                    if (workTrackFormat.ContainsSectorsFrom(image.StandardFormat, cylinder))
                    {
                        realMaxTrack = track + 1;
                        image.SetSize(realMaxTrack * Params.SectorsOnTrack);
                        Params.LastSectorNum = image.SizeSectors;
                        ReadTrack(track, Params);
                    }
                }
            }
        }