private static void WriteFormattedTrack(Stream s, FormattedTrack track, long sectorDataPosition, DiskImage diskImage)
        {
            if (track is PD765FormattedTrack)
            {
                var pdTrack = (PD765FormattedTrack)track;
                s.WriteByte(pdTrack.DataRate);
                s.WriteByte(pdTrack.RecordingMode);
                s.WriteByte(GetSectorSize(pdTrack.SectorSize, diskImage));
            }
            else
            {
                s.WriteByte(0);
                s.WriteByte(0);
                s.WriteByte(0);
            }

            s.WriteByte((byte)track.Sectors.Count);
            s.WriteByte(track.Gap);
            s.WriteByte(track.Filler);

            foreach (var sector in track.Sectors)
            {
                WriteSectorHeader(s, sector);
            }

            s.Position = sectorDataPosition;

            foreach (var sector in track.Sectors)
            {
                s.Write(sector.Data, 0, sector.Data.Length);
            }
        }
        private void Write(FormattedTrack track, WriteContext context)
        {
            if (track.Size != context.DefaultTrack.Size)
            {
                xml.WriteAttributeString("size", track.Size.ToString());
            }

            if (track.Gap != context.DefaultTrack.Gap)
            {
                xml.WriteAttributeString("gap", track.Gap.ToString("x"));
            }

            if (track.Filler != context.DefaultTrack.Filler)
            {
                xml.WriteAttributeString("filler", track.Filler.ToString());
            }

            if (track is PD765FormattedTrack)
            {
                Write((PD765FormattedTrack)track, context);
            }

            foreach (var sector in track.Sectors)
            {
                Write(sector, track, context);
            }
        }
        private void Write(Sector sector, FormattedTrack track, WriteContext context)
        {
            xml.WriteStartElement("Sector");
            xml.WriteAttributeString("id", sector.Id.ToString());

            if (sector.Size != context.DefaultSector.Size)
            {
                xml.WriteAttributeString("size", sector.Size.ToString());
            }

            Write(sector.Data, GetSectorDataLength(sector.Data, track.Filler));

            xml.WriteEndElement();
        }