예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }