Ejemplo n.º 1
0
 public DiskGeometry(int cylinders, int heads, int sectors, SectorGeometry sectorGeometry)
 {
     Cylinders      = cylinders;
     Heads          = heads;
     Sectors        = sectors;
     SectorGeometry = sectorGeometry;
 }
Ejemplo n.º 2
0
        /// <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;
        }
Ejemplo n.º 3
0
        /// <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;
        }