[comp.sys.atari.8bit] Booting up without AUTORUN.SYS

elk@buengc.BU.EDU (Edward L. Bayiates) (03/23/88)

Does anyone know how to set up a disk that will boot up without DOS
and without an AUTORUN.SYS?  I am interested in writing games for
the 800XL and want disks to self boot, etc.

Thanks in advance,

elk@buengc.bu.edu       ENGEDEC@BUACCA.BU.EDU

cfchiesa@bsu-cs.UUCP (Christopher Chiesa) (03/26/88)

In article <284@buengc.BU.EDU>, elk@buengc.BU.EDU (Edward L. Bayiates) writes:
> Does anyone know how to set up a disk that will boot up without DOS
> and without an AUTORUN.SYS?  I am interested in writing games for
> the 800XL and want disks to self boot, etc.
> 

Yes...  To make a long story short, whatever is in Sector 1 of the disk is 
loaded into memory at hex 0700; the first 14 bytes or so contain information
about how many subsequent sectors to load, where to place them in memory, and
where to begin execution when said sectors have been loaded.  

If no one else posts the fine points, I can dig them up for you and post to 
the net if there appears to be sufficient interest.

(This sure beats arguing about piracy, doesn't it!?  :-)  )

Chris Chiesa
 
-- 
<><><><><><><><><><><><><><><><><><><><><><><><><><><><> Chris Chiesa <><><><><>
<> {ihpn4|seismo}!{iuvax|pur-ee}!bsu-cs!cfchiesa                              <>
<> cfchiesa@bsu-cs.UUCP                                                       <>
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

swklassen@trillium.waterloo.edu (Steven W. Klassen) (03/27/88)

In article <2466@bsu-cs.UUCP> cfchiesa@bsu-cs.UUCP (Christopher Chiesa) writes:
>If no one else posts the fine points, I can dig them up for you and post to 
>the net if there appears to be sufficient interest.
>
Please post this information.  I am interested and I am sure that others
are as well!

Steven W. Klassen
Computer Science Major
University of Waterloo

arthur@pnet02.cts.com (Arthur L. Rubin) (03/30/88)

As far as I know, the only way to create a boot disk is to create your own (or
modify an existing) DOS in order that it contain the program to be run.
Arthur L. Rubin
4519 Richard Drive
Los Angeles, CA  90032-1227

Phone: (213)221-5033 (home w/o answering machine)
Phone (213)221-1962 (home)
Phone: (818)287-1422 or (213)450-2412 (work)

MCI Mail:  ARUBIN 216-5888
Telex (WUI/MCI):  6502165888 "6502165888 MCI"

CompuServe:  70707,453

DELPHI: RUNNINGTRTLE

UUCP: [ ihnp4 hplabs!hp-sdd sdcsvax nosc ] !crash!gryphon!pnet02!arthur
ARPA: crash!gryphon!pnet02!arthur@nosc
INET: arthur@pnet02.cts.com

cfchiesa@bsu-cs.UUCP (Christopher Chiesa) (03/31/88)

In article <3055@gryphon.CTS.COM>, arthur@pnet02.cts.com (Arthur L. Rubin) writes:
> As far as I know, the only way to create a boot disk is to create your own (or
> modify an existing) DOS in order that it contain the program to be run.
> Arthur L. Rubin
> 4519 Richard Drive
> Los Angeles, CA  90032-1227

Actually, Arthur, it's not necessary to do that.  Keep an eye on this news-
group for the next few days and all shall be revealed.  Hope you will find 
the information helpful!

-- 
UUCP: <backbones>!{iuvax,pur-ee,uunet}!bsu-cs!cfchiesa 
cfchiesa@bsu-cs.UUCP                                           

flex@cup.portal.com (04/01/88)

Hmmm, didn't know that there were any Atari 8-biters left out there...!

Anyways, concerning creating Boot Load Disk programs. The best place for a
technical reference is The Atari Technical Reference Notes -- a collection of
usage notes written by the creators of the Operating System themselves. This
pre-dates the acclaimed De Re Atari and of course OSS's Inside Atari DOS. In
fact these reference notes were internal Atari Corp documents, later released
to the public. 

Oh well, here's the "Great Secret". Heh.
    
The normal Atari disk format (single density) consists of 720 sectors, of
which only 719 is used by DOS (a boo-boo, but dats another story!). When the
Atari is Cold-Booted connected to a disk, the OS will attempt (among other
things) to "boot" from the disk drive. The OS will read in Disk Sector #1 into
its Cassette Buffer at $0400 (yea crazy, but so what.)

Of this 128 byte record, only the first SIX bytes have any initial signi-
ficance: 

 BYTE #1    Boot Flag     Thrown away by the OS due to meaness, stored at 
                          DFLAGS $0240 for fun while its at it.

 BYTE #2    Rec to read   The number of sequential disk sectors (records)
                          to read in after this initial read. DBSECT $0241

 BYTE #3,4  Load Address  Where to move this boot sector (#1) in memory
                          following the Lo,Hi 6502 word address format.
                          Saved in BOOTAD $0242.

 BYTE #5,6  Init Address  The Initialization Address (Lo,Hi) for this prog.
                          Saved in DOSINI $C

So after the Atari looks at these first SIX bytes of Disk BOOT Sector (#1)
then it goes like how you expect. This first record (#1) is moved to the
address specified by BOOTAD. Then the OS will read in sequentially (like
Disk Sector #2 and on...) the number of sectors (also called records) as
specified by DBSECT. As one can figure out, DBSECT is decremented
internally by one till a BEQ state exists. So an initial value of ZERO for
DBSECT allows 256 sectors to be read in. Remember this is jus a boot load,
and a small program can be read in to read in additional disk sectors in
any order, to any address. This is called a multi-boot process.

As a side note, you may be a wonderin how in the world one can write a
program to read in additional disk sectors after the inital boot process,
without DOS present?

Well, how da ya think the OS can read in the boot sector in the first
place...? Yup, there is a Resident Disk Handler in the OS that is a low-
level access of a disk (lower than CIO... actually called SIO for Serial
Input/Output, but dats still another story).

So dats about it. The OS reads in the required amount of sectors and
stores it anywhere in memory, as specified by BOOTAD. When Atari DOS 2.0
gets booted in, the BOOTAD is set at $700. But as you have seen, it can
be anywhere in memory a programmer chooses.

Oh yea. After the initial boot disk load ends, what happens? Well, FIRST
the OS will AUTOMATICALLY jsr to BOOTAD+6. This "feature" to befuddle the
masses is called a multi-stage boot. Jus do a CLC/RTS combo to get it
outta here correctly. After this, the OS will then jsr to DOSIN.
And dat is where your boot loaded program should be!

Opps, in the jsr to DOSIN coding, a RTS will push the OS to JMP to
DOSVEC ($A), so ya better set DOSVEC in ya code to an address. However,
a RTS in your DOSIN coding ain't necessary.

If anyone has anymore questions about this, or about Atari 8-bits in
general, jus leave a note!