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