/// <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; } }
private void FormatEntry(int Sector) { for (var i = 0; i < ClusterPerSector; i++) { var dc = DiskImage.GetDataControllerForWrite(Sector + i); dc.Fill(0xff); } }
private void SetAllocateController() { AllocationController = new DataController[2]; AllocationController[0] = DiskImage.GetDataControllerForWrite(AllocationTableStart); if (DiskType.IsNot2D) { AllocationController[1] = DiskImage.GetDataControllerForWrite(AllocationTableStart + 1); } }
// ファイルエントリ書き出し 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); } }
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); }
// IPLエントリ書き出し public void WriteIplEntry(HuFileEntry fe) { var dc = DiskImage.GetDataControllerForWrite(0); WriteEntry(dc, fe, 0x00, fe.StartCluster * ClusterPerSector, true); }