DISK
ORGANIZATION
The purpose of FMS is to organize the 720 data sectors available on an 810 diskette into a system of named data files. FMS has three primary data structures that it uses to organize the disk: the Volume Table of Contents, the Directory, and Data Sectors. The Volume Table of Contents is a single disk sector which keeps track of which disk sectors are available for use in data files. The Directory consists of directory sectors. It is used to associate file names with the location of the files' sectors on the disk. Each Directory entry contains a file name, a pointer to the first data sector in the file, and some miscellaneous information. The Data sectors contain the actual data and some control information that link one data sector to the next data sector in the file. Figure 2-1 illustrates the relation between the Directory and the Data files.
Disk Directory
The Directory starts at disk sector $169 and continues for eight contiguous
sectors, ending with sector $170. These sectors were chosen for the directory
because they are in the center of the disk and therefore have the minimum
average seek time from any place else on the disk. Each directory sector
has space for eight file entries. Thus, it is possible to have up to 64
files on one disk.
A Directory entry is 16 bytes in size, as
illustrated by Figure 2-2. The directory entry flag field gives specific
status information about the current entry. The directory count field is
used to store the number of sectors currently used by the file. The last
eleven bytes of the entry are the actual file name. The primary name is
left justified in the primary name field. The name extension is left justified
in the extension field. Unused filename characters are blanks ($20). The
Start Sector Number field points to the first sector of the data file.
Data Sectors
A Data Sector is used to contain the file's data bytes. Each 128 byte
data sector is organized to hold 125 bytes of data and three bytes of control
information as shown in Figure 2-3. The data bytes start with the first
byte (byte 0) in the sector and run contiguously up to, and including,
byte 124. The control information starts at byte 125.
The sector byte count is contained in byte
127. This value is the actual number of data bytes in this particular sector. The value may range from zero (no data) to 125 (a full sector). Any data sector in a file may be a short sector (contain less than 125 data bytes).
The left six bits of byte 125 contain the file number of the file. This
number corresponds to the location of the file's entry in the Directory.
Directory entry zero in Directory sector $169 has the file number of zero.
Entry one in Directory sector $169 has the file number one - and so forth.
The file number value may range from zero to 63 ($3F). The file number is
used to insure that the sectors of one file do not get mixed up with the
sectors of another file.
The right two bits of byte 125 (and all eight bits of byte 126) are
used to point to the next data sector in the file. The ten bit number
contains the actual disk sector number of the next sector. Its value ranges
from zero to 719 ($2CF). If the value is zero, then there are no more
sectors in the file sector chain. The last sector in the file sector chain
is the End-Of-File sector. The End-Of-File sector may or may not contain
data, depending upon the value of the sector byte count field.
Volume Table Of Contents
(VTOC)
The VTOC sector is used to keep track of which disk sectors are available
for data file usage. The VTOC sector is located at sector $168. Figure
2-4 illustrates the organization of the VTOC sector. The most important
part of the VTOC is the sector bit map.
The sector bit map is a contiguous string
of 90 bytes, each of which contains eight bits. There are a total of 720
(90 x 8) bits in the bit map — one for each possible sector on an 810 diskette.
The 90 bytes of bit map start at VTOC byte ten ($0A). The leftmost bit
($80 bit) of byte $0A represents sector zero. The bit just to the right
of the leftmost bit ($40 bit) represents sector one. The rightmost bit
(bit $01) of byte $63 represents sector 719.
The fact that FMS interprets the bit map as
representing sectors zero through 719 is a bug. The Atari 810 disk drive
will not accept commands for sector zero. It will accept commands for sector
720. In other words, the bit map is skewed by one. The problem cannot be
fixed now because there are already tens of thousands of diskettes whose
bit maps are to be interpreted as representing sectors zero through 719,
and because some savvy applications writers have taken advantage of this
feature. (A bug which generates useful side effects is known in the programming
profession as a feature.) Sector 720 can never be used by FMS and is therefore
available for miscellaneous purposes.
Return to Table of Contents | Previous Chapter | Next Chapter