예제 #1
0
        /// <summary>
        /// ヘッダを読み込む
        /// </summary>
        void ReadHeader(FileStream fs)
        {
            byte[] header = new byte[0x2b0];
            fs.Read(header, 0, header.Length);

            var dc = new DataController(header);

            this.DiskName  = TextEncoding.GetString(dc.Copy(0, 17)).TrimEnd((Char)0);
            IsWriteProtect = dc.GetByte(0x1a) != 0x00;
            var t = dc.GetByte(0x1b);

            DiskType.SetImageTypeFromHeader(t);
            ImageSize = (long)dc.GetLong(0x1c);

            CurrentHeaderSize = 0;

            for (var i = 0; i < MaxTrack; i++)
            {
                var a = (long)dc.GetLong(0x20 + (i * 4));
                TrackAddress[i] = a;
                if (i == 0)
                {
                    CurrentHeaderSize = a;
                }
            }
        }
예제 #2
0
 public void SetEntryFromSector(DataController dc, int sector, int pos, string Name, string Extension)
 {
     this.Name      = Name;
     this.Extension = Extension;
     EntrySector    = sector;
     EntryPosition  = pos;
     FileMode       = dc.GetByte(pos);
     Password       = dc.GetByte(pos + 0x11);
     Size           = dc.GetWord(pos + 0x12);
     LoadAddress    = dc.GetWord(pos + 0x14);
     ExecuteAddress = dc.GetWord(pos + 0x16);
     DateTimeData   = dc.Copy(pos + 0x18, 6);
     StartCluster   = dc.GetByte(pos + 0x1e);
     StartCluster  |= dc.GetByte(pos + 0x1f) << 7;
 }
예제 #3
0
        private bool ReadSectorHeader(FileStream fs)
        {
            Header = new byte[0x10];
            int s = fs.Read(Header, 0, 0x10);

            if (s < 0x10)
            {
                return(false);
            }
            var dc = new DataController(Header);

            Track          = dc.GetByte(0);
            Side           = dc.GetByte(1);
            Sector         = dc.GetByte(2);
            NumOfSector    = dc.GetByte(3);
            SectorsInTrack = dc.GetWord(4);
            Density        = dc.GetByte(6);
            IsDelete       = dc.GetByte(7) != 0x00;
            Status         = dc.GetByte(8);
            DataSize       = dc.GetWord(0x0e);
            return(true);
        }