From Inside Atari DOS - Chapter 20 - Pages 55 to 56

Chapter Twenty

THE
BOOT PROCESS

When the Atari computer is turned on, the routines in the OS ROM will (under certain conditions) read the first sector from the disk in drive one into memory. It will then examine certain specific locations in this record to decide how to boot the disk. In the following discussion, refer to Figure 20-1. The OS ROM code will load BRCNT consecutive sectors (starting with sector one) onto memory, starting at the address contained in BLDADR. When the OS ROM code has finished this task, it will make a JSR call to the code that is seven bytes into the start of the boot area. In the case of FMS, this is the JMP XBCONT instruction at $706. The XBCONT code will continue the boot load process.

The XBCONT code examines the DFSFLG to see if a DOS.SYS file exists. If the file exists, then the sector number of the first sector in DOS.SYS will be in DFLINK. The routine will then read all the sectors in the chain starting at DFLINK into the memory area pointed to by DFLADR. When the entire DOS.SYS file is read into memory, XBCONT returns to the OS ROM code.

The OS ROM code will eventually vector through the BINTADR so that the FMS can initialize itself. In the DOS 2.0S system, BINTADR points into the DUP.SYS code. DUP.SYS then receives control from the OS ROM rather than the FMS. One of the tasks that DUP.SYS performs during its initialization is to call the FMS initialization routine.

XBCONT

The XBCONT routine ($714) is entered by the OS ROM code during the boot process to allow the boot process to continue in the manner best suited for the code being booted.

Functions:

1) If the DFSFLG indicates that a DOS.SYS file does not exist, then the OS ROM is returned to with the carry set to indicate that the boot has failed.

2) The address contained in DFLADR is moved to the zero page address pointer, ZBUFP, and to the DCB buffer pointer field, DCBBUF.

3) The sector number contained in DFLINK is loaded into the A,Y register pair, the carry is cleared to indicate read, and BSIO is called to read a DOS.SYS sector.

4) The next sector Link is obtained from the link field of the data sector just read.

5) If the sector link value is zero, then the DOS.SYS end-of-file has been reached. The OS ROM will be returned to with the carry clear to indicate that the boot read was good.

6) If the sector link value is not zero, then the zero page buffer pointer and the DCB buffer pointer are incremented by the amount of data in the sector (125 for 810 drives, 253 for 815 drives).

7) The process continues by reading the next sector into memory.

            Sector 1  $700 +-----+
                           |    O-----------+
                           +-----+          |
                           |     |          |
                           |     |          |
                           +-----+          |
                                            |
            Sector 2  $780 +-----+          |
                           |     |          |
                           |     |          |
                           |     |          |
                           |     |          |
                           +-----+          |
                                            |
            Sector 3  $800 +-----+          |
                           |     |          |
                           |     |          |
                           |     |          |
                           |     |          |
                           +-----+          |
+-------------------------------------------+-----------------------+
|    $700    BFLAG         Flag (= 0)                               |
     $701    BRCNT         Number of Consecutive Sectors to Read
     $702    BLDADR        Address to Load Boot Sector at
     $704    BIWTARR       Initialization Address
     $706    JMP XBCONT    Boot Continue Vector
     $709    SABYTE        Number of Sector Buffers to Allocate
     $70A    DRVBYT        Drive Bits
     $70B                  Unused
     $70C    SASA          Buffer Start Address
     $70E    DFSFLG        DOS Flag
     $70F    DFLINK        Sector Pointer to DOS.SYS File
     $711    BLDISP        Displacement in Sector to Sector Link
     $712    DFLADR        Address of Start of DOS.SYS File

Figure 20-1
Boot Records