Exemplo n.º 1
0
        /// <summary>
        /// アロケーションテーブルの開放
        /// </summary>
        /// <param name="StartCluster"></param>
        public void RemoveAllocation(int StartCluster)
        {
            int c = StartCluster;

            while (true)
            {
                var next = GetClusterValue(c);
                var end  = IsEndCluster(c);
                // 0x00 = 既に解放済み
                if (next == 0x00)
                {
                    break;
                }
                SetClusterValue(c, 0x00);
                var FillLength = end ? (next & 0x0f) + 1 : ClusterPerSector;

                for (var i = 0; i < FillLength; i++)
                {
                    DiskImage.GetDataControllerForWrite((c * ClusterPerSector) + i).Fill(0);
                }
                // 0x8x = 最後のクラスタ
                if (end)
                {
                    break;
                }
                c = next;
            }
        }
Exemplo n.º 2
0
 private void FormatEntry(int Sector)
 {
     for (var i = 0; i < ClusterPerSector; i++)
     {
         var dc = DiskImage.GetDataControllerForWrite(Sector + i);
         dc.Fill(0xff);
     }
 }
Exemplo n.º 3
0
 private void SetAllocateController()
 {
     AllocationController    = new DataController[2];
     AllocationController[0] = DiskImage.GetDataControllerForWrite(AllocationTableStart);
     if (DiskType.IsNot2D)
     {
         AllocationController[1] = DiskImage.GetDataControllerForWrite(AllocationTableStart + 1);
     }
 }
Exemplo n.º 4
0
        // ファイルエントリ書き出し
        public void WriteFileEntry(HuFileEntry fe)
        {
            FileEntryNormalize(fe);
            var dc = DiskImage.GetDataControllerForWrite(fe.EntrySector);

            WriteEntry(dc, fe, fe.EntryPosition, fe.StartCluster, false);

            if (fe.IsIplEntry)
            {
                WriteIplEntry(fe);
            }
        }
Exemplo n.º 5
0
        private void FillAllocationTable()
        {
            var dc = DiskImage.GetDataControllerForWrite(AllocationTableStart);

            dc.Fill(0);
            dc.SetByte(0, 0x01);
            dc.SetByte(1, 0x8f);

            switch (ImageType)
            {
            case DiskTypeEnum.Disk2D:
                for (var i = 0x50; i < 0x80; i++)
                {
                    dc.SetByte(i, 0x8f);
                }
                break;

            case DiskTypeEnum.Disk2DD:
                dc.SetBuffer(DiskImage.GetSectorDataForWrite(AllocationTableStart + 1));
                dc.Fill(0);
                for (var i = 0x20; i < 0x80; i++)
                {
                    dc.SetByte(i, 0x8f);
                }
                break;

            case DiskTypeEnum.Disk2HD:
                dc.SetByte(2, 0x8f);
                dc.SetBuffer(DiskImage.GetSectorDataForWrite(AllocationTableStart + 1));
                dc.Fill(0);
                for (var i = 0x7a; i < 0x80; i++)
                {
                    dc.SetByte(i, 0x8f);
                }
                break;
            }
            FormatEntry(CurrentEntrySector);
        }
Exemplo n.º 6
0
        // IPLエントリ書き出し
        public void WriteIplEntry(HuFileEntry fe)
        {
            var dc = DiskImage.GetDataControllerForWrite(0);

            WriteEntry(dc, fe, 0x00, fe.StartCluster * ClusterPerSector, true);
        }