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(); }