/// <summary> /// Frees all sectors available for directory store /// </summary> public virtual void FreeSectorsOnDirectoryTrack() { BAMentry trk = SectorsMap[Directory.Track]; for (byte sector = Directory.Sector; sector <= diskStructure[Directory.Track]; ++sector) { trk.SetFlag(sector); } }
/// <summary> /// Binary sectors map /// </summary> /// <param name="firstTrack"></param> /// <param name="lastTrack"></param> /// <returns></returns> protected byte[] RawMap(byte firstTrack, byte lastTrack) { int nTracks = lastTrack - firstTrack + 1; byte[] ret = new byte[nTracks * EntrySize]; for (int j = 0; j < nTracks; ++j) { int offset = j * EntrySize; BAMentry be = SectorsMap[j + firstTrack - 1]; ret[offset] = be.FreeSectors; Array.Copy(be.flags, 0, ret, offset + 1, EntrySize - 1); } return(ret); }
/// <summary> /// First free sector in track /// </summary> /// <param name="track"></param> /// <returns>-1 if no sector available</returns> public int GetAFreeSector(byte track) { int ret = -1; BAMentry trk = SectorsMap[track]; if (trk.FreeSectors > 0) { for (int j = 0; j < diskStructure[track]; ++j) { if (trk.GetFlag(j)) { ret = j; break; } } } return(ret); }