public DiskGeometry(int cylinders, int heads, int sectors, SectorGeometry sectorGeometry) { Cylinders = cylinders; Heads = heads; Sectors = sectors; SectorGeometry = sectorGeometry; }
/// <summary> /// Create a new, empty sector. /// </summary> /// <param name="geometry"></param> /// <param name="cylinder"></param> /// <param name="head"></param> /// <param name="sector"></param> public DiskSector(SectorGeometry geometry, int cylinder, int head, int sector) { _header = new ushort[geometry.HeaderSize]; _label = new ushort[geometry.LabelSize]; _data = new ushort[geometry.DataSize]; _cylinder = cylinder; _head = head; _sector = sector; _modified = true; }
/// <summary> /// Create a new DiskSector populated from the specified stream. /// </summary> /// <param name="geometry"></param> /// <param name="inputStream"></param> /// <param name="cylinder"></param> /// <param name="head"></param> /// <param name="sector"></param> public DiskSector(SectorGeometry geometry, Stream inputStream, int cylinder, int head, int sector) { // // Read in the sector from the input stream. // byte[] header = new byte[geometry.HeaderSizeBytes]; byte[] label = new byte[geometry.LabelSizeBytes]; byte[] data = new byte[geometry.DataSizeBytes]; // // Bitsavers images have an extra word in the header for some reason. // ignore it. // TODO: should support different formats ("correct" raw, Alto CopyDisk format, etc.) // inputStream.Seek(2, SeekOrigin.Current); if (inputStream.Read(header, 0, header.Length) != header.Length) { throw new InvalidOperationException("Short read while reading sector header."); } if (inputStream.Read(label, 0, label.Length) != label.Length) { throw new InvalidOperationException("Short read while reading sector label."); } if (inputStream.Read(data, 0, data.Length) != data.Length) { throw new InvalidOperationException("Short read while reading sector data."); } _header = GetUShortArray(header); _label = GetUShortArray(label); _data = GetUShortArray(data); _cylinder = cylinder; _head = head; _sector = sector; _modified = false; }