Example #1
0
        /// <summary>
        /// Write sector data, including the CRC, to the stream.  The stream must be positioned at the first byte of the sector
        /// payload data.
        /// </summary>
        /// <param name="data">Sector data buffer.</param>
        /// <param name="offset">Offset of the first byte of sector data into the data buffer.</param>
        /// <param name="length">Size of the sector data.</param>
        private void WriteSectorData(byte[] data, int offset, int length)
        {
            Sync();
            var blockId = trackStream.ReadByte();

            if (blockId == -1)
            {
                throw new DiskImageFormatException("Sector data not found after sector address mark");
            }
            if (blockId != DataAddressMark)
            {
                throw new DiskImageFormatException(String.Format("Unexpected block type {0}", blockId));
            }

            var crc = new Crc16Ccitt();

            crc.Add(0xa1);
            crc.Add(0xa1);
            crc.Add(0xa1);
            crc.Add(DataAddressMark);
            for (int i = 0; i < length; i++)
            {
                crc.Add(data[offset + i]);
            }

            trackStream.Write(data, offset, length);
            trackStream.WriteByte((byte)((crc.Crc >> 8) & 0xff));
            trackStream.WriteByte((byte)(crc.Crc & 0xff));
        }
        public void CalculateCrc()
        {
            var data = new byte[] {0xa1, 0xa1, 0xa1, 0xfe, 0x14, 0x00, 0x09, 0x01};
            var crcExpected = (uint) 0xa2f3;

            var crc = new Crc16Ccitt();
            var crcActual = crc.Add(data);
            Assert.AreEqual(crcExpected, crcActual);
        }
Example #3
0
        private uint ComputeCrc()
        {
            var crc = new Crc16Ccitt();

            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.DataAddressMark);
            foreach (byte t in data)
            {
                crc.Add(t);
            }
            return(crc.Crc);
        }
        private uint ComputeCrc()
        {
            var crc = new Crc16Ccitt();

            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.SyncMark);
            crc.Add(HfeTrack.IdAddressMark);
            crc.Add((byte)Track);
            crc.Add((byte)Head);
            crc.Add((byte)Sector);
            crc.Add(ConvertToEncodedSize(Size));
            return(crc.Crc);
        }
Example #5
0
 private uint ComputeCrc()
 {
     var crc = new Crc16Ccitt();
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.DataAddressMark);
     foreach (byte t in data)
         crc.Add(t);
     return crc.Crc;
 }
 private uint ComputeCrc()
 {
     var crc = new Crc16Ccitt();
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.SyncMark);
     crc.Add(HfeTrack.IdAddressMark);
     crc.Add((byte) Track);
     crc.Add((byte) Head);
     crc.Add((byte) Sector);
     crc.Add(ConvertToEncodedSize(Size));
     return crc.Crc;
 }