ie: how the "boot" ROM routines work;
what parameters are picked up from the disk;
where are they located;
what functions served by the boot sector code vs
the DOS itself;
differences between the boot sectors on a DOS disk
and on a "boot" disk;
and anything other tidbits!
Thanks
Dick Curzon
Digital Equipment of Canada
PO Box 13000
Kanata Ontario K2K 2A6
Canada.
(DEC E-NET) KAOA01::CURZON
(UUCP) {decvax, ucbvax, allegra}!decwrl!kaoa01.dec.com!curzon
(ARPA) curzon%kaoa0...@decwrl.ARPA
References: Atari Personal Computer System Operating System Manual
Inside ATARI DOS, Compute Books
The OS ROM reads the first sector of the disk into the cassette buffer at
0x400. The Control info is as follows:
Flags Moved to 0x240, but otherwise unused for booting.
#sectors The number of sectors to read
loadaddr The memory address (low,high) to place #sectors
read. Saved in 0x242
initaddr The initialization address when the boot is complete.
Saved in DOSINI (0xC). Also called during system
reset.
<Boot code>
This first sector, which has been temporarily saved in the cassette buffer
is moved into the address specified by loadaddr. The remaining number of
records specified are then read in. Control is then passed to (loadaddr+6)
to continue the boot process. The boot process must return the carry reset
to indicate success. Then a JSR is done through initaddr and then a JMP to
DOSVEC is done. (my comment: One would assume that the boot code would set
up DOSVEC, since it is not mentioned in the boot process above).
Pressing system reset causes the JSR DOSINI and JMP DOSVEC to be done.
You may observe that the most simple of boot programs can simply set up
memory as is needed, with the first 6 bytes correctly set, then write memory
directly to disk, sector by sector. My suspicion is that is the technique
normally used by games and such that do not require a file system on the
disk.
DOS 2.0S uses this process in a specific way. The first 3 disk sectors hold
the boot code. This boot code knows how to process files in the file system
on the disk and hence do the actual load of DOS.SYS. The boot record actually
looks like the following (DOS 2.0S. I don't know about others)
Flags as before
#sectors
loadaddr
initaddr
JMP XBCONT Jump to the DOS.SYS boot code
<Here begins DOS II specific configuration info>
SABYTE number of sector buffers to allocate
DRVBYT drive bits. See your DOS II manual
<unused>
SASA buffer start addr
DFSFLG DOS flag, set when DOS.SYS has been written
DFLINK sector pointer to the first sector of the
DOS.SYS file. Handy since it eliminates
processing of the directory.
BLDISP used when a 256 byte sector drive is used.
DFLADR Address to start loading DOS.SYS
Actually, the boot process is very clean and easy to understand. I am
continually amazed at how cleanly the ATARI 8 bit OS is built. I have
left out much detail from the two quoted references for brevity. Anyone
actually interested in using such facilities would be well advised to get
the above referenced documentation, or equivalent.
The major piece of information I do not have is if (how?) DOS 2.5, DOS 4.0,
Sparta DOS, etc., have modified the extended boot procedure used by DOS 2.0S
after the ROM boot procedures have loaded the primary boot code? Anyone
care to add some info here?
Daryl Monge UUCP: ...ihnp4!ihelp!dlm
AT&T CIS: 72717,65
Bell Labs
Naperville, Il.