FMS
IN
ITIALIZATION
DUP gets control whenever the system is booted or the RESET key is pressed. DUP will call the FMS initialization routine, DINIT at $7E0.
DINIT
Functions:
1) Determine how many (and what type of) disk drives will be used.Drive Determination
2) Set up a drive table and allocate a drive buffer for each drive.
3) Allocate sector buffers and build the sector buffer table.
4) Clear the FCBs to zero.
5) Set MEMLO.
6) Enter the D: device into the Device Handler Table.
7) Exit to caller via RTS.
The DRVBYT byte at $70A is used to tell FMS how many disk drives will he used and what the drive number of the drives will be. The rightmost bit (bit $01) indicates drive 1. The next left bit ($02) indicated drive 2 — and so forth. If the bit is one, then the drive is to be used. If the drive is zero then the drive is not to be used. The code will allocate up the eight drives, even though the 810 hardware only has switches for drives 1,2,3 and 4.
If DRVBYT indicates that a drive is to be used, then FMS issues a status command to that drive to determine if it is active and what type (810 or 815) of drive it is.
Drive Allocations
The drive determination process sets up two tables (Figure 4-1). The
first table is the DRVTBL. This table is indexed into by the drive number
(minus one). If the value in the table is zero then the drive is not to
be used. If the value is one, then the drive is an active 810 and requires
one drive buffer. If the value is two, then the drive is an 815 and requires
two 128 byte buffers.
The second table is the drive buffer table.
The drive buffer table contains the address of the drive buffer to be used
for each drive. This Drive Buffer will be used to hold the VTOC sector
on the diskette in the drive. The table is separated into two sections:
DBUFAL contains the least significant address byte and DBUFAH which contains
the most significant address byte. The drive buffer table is also accessed
by the drive number (minus one).
When a file is being processed, the Drive
number is obtained from the IOCB Device Number field, ICDNO. The obtained
value is decremented by one and is then used as an index into the Drive
Tables. The Drive Type is copied from the DRVTBL entry to DRVTYP ($12FE)
for easy access by FMS. The Drive Buffer address is copied from the DBUFAL
and DBUFAH table entries to the zero page drive buffer pointer, ZDRVA ($45).
Sector Butter Allocations
The SABYTE at location $709 is used to inform FMS about the number
of 128 areas to he allocated as sector buffers. One 128 buffer is required
for each file which is to he processed concurrently on 810 drives. Two
128 byte buffers are required for each file which is to be processed concurrently
on 815 drives.
The Sector Buffer Allocation table, SECTBL
at $1319, is used to indicate if a buffer is available for allocation to
a file (Figure 4-2). If a buffer is available, the entry is set to zero.
If the buffer is not available, the entry is a minus value. The table is
16 bytes in size and therefore can be used to allocate up to sixteen 128
byte buffers. During the initialization process, entries which are to be
unused are set to a minus value.
The Sector Buffer Address Table is a table
of addresses which point to the individual sector buffers. The table is
divided into two parts: SABUFL contains the least significant address byte,
SABUFH contains the most significant address byte.
When a file is being processed, an available
buffer number is found in SECTBL by search for a zero valued entry. The
located buffer is allocated to the file by entering a minus value ($80)
into the table and placing the corresponding buffer number into the DCB
buffer number field, FCBBUF. When the file processing is done, the buffer
is deallocated by setting the SECTBL entry to zero.
Setting MEMLO
The Atari MEMLO location ($2E7) is set after the FMS buffers have been
allocated. The address of the last sector buffer allocated is incremented
by 128. This value is then placed into MEMLO.
Device Handler Table Entry
The Device Handler Table ($31A) is searched for a “D” entry or the
first (from the top) empty entry. When an appropriate entry is found, FMS
inserts (or reenters) “D” as a DEVICE NAME and sets the DEVICE vector entry
to point to the FMS Device Vector table at DFMSDH ($7CB).
Return to Table of Contents | Previous Chapter | Next Chapter