Ejemplo n.º 1
0
        private void Dispose(bool disposing)
        {
            if (isDisposed)
            {
                return;
            }

            if (disposing)
            {
                trackStream.Flush();
                trackStream = null;
            }

            isDisposed = true;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initialize (format) a track by writing headers and sectors to it.
        /// </summary>
        /// <param name="diskStream">Stream for writing the disk track.</param>
        /// <param name="trackOffset">Byte offset of the track data in the disk image.</param>
        /// <param name="headId">Side of disk for initializing the track.</param>
        /// <param name="sectors">Collection of sectors to be written to the track.</param>
        /// <returns>The track length in the disk image stream.</returns>
        static internal int InitializeTrack(Stream diskStream, int trackOffset, int headId, IEnumerable <HfeSector> sectors)
        {
            var rawStream   = new HfeRawTrack(diskStream, trackOffset, headId);
            var trackStream = new MfmStream(rawStream);

            trackStream.WriteBytes(0x4e, PreableLength);

            foreach (var sector in sectors)
            {
                // Write gap preceeding sector ID record
                trackStream.WriteBytes(0x4e, 24);
                trackStream.WriteBytes(0x00, 12);
                trackStream.WriteSync();
                trackStream.WriteSync();
                trackStream.WriteSync();

                // Write sector ID record
                var sectorInfo      = sector.GetSectorInfo();
                var encodedIdRecord = sectorInfo.Encode();
                trackStream.Write(encodedIdRecord, 0, encodedIdRecord.Length);

                // Write gap preceeding sector data record
                trackStream.WriteBytes(0x4e, 22);
                trackStream.WriteBytes(0x00, 12);
                trackStream.WriteSync();
                trackStream.WriteSync();
                trackStream.WriteSync();

                // Write sector data record
                var encodedDataRecord = sector.Encode();
                trackStream.Write(encodedDataRecord, 0, encodedDataRecord.Length);
            }

            trackStream.WriteBytes(0x4e, PostambleLength);
            trackStream.Flush();

            return(rawStream.TrackLength - trackOffset);
        }