Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!columbia!rutgers!princeton!allegra!ulysses!mhuxt!ihnp4!inuxc!pur-ee!uiucdcs!uxc.cso.uiuc.edu!hamilton
From: hamilton@uxc.cso.uiuc.edu.UUCP
Newsgroups: comp.sys.amiga
Subject: Re: Sidecar (and Happy New Year to
Message-ID: <172200023@uxc.cso.uiuc.edu>
Date: Thu, 1-Jan-87 16:19:00 EST
Article-I.D.: uxc.172200023
Posted: Thu Jan  1 16:19:00 1987
Date-Received: Sun, 4-Jan-87 21:39:30 EST
References: <10865@sun.uucp>
Lines: 62
Nf-ID: #R:sun.uucp:10865:uxc.cso.uiuc.edu:172200023:000:2230
Nf-From: uxc.cso.uiuc.edu!hamilton    Jan  1 15:19:00 1987


cmcmanis@sun says:

> For what it is worth, once again "No, you cannot boot the workbench from
> any device other than DF0:." 
> To understand why this is so consider that you are not really booting
> at all. After putting in the kickstart (which won't be necessary when
> you put ROM's in your machine) AmigaDOS, is *already* loaded. All the
> startup code apparently does is create a new task, LoadSeg the CLI
> from DF0:, open the console device, open the file s/Startup-Sequence
> connect Startup-Sequence to Input() and the console window to Output()
> and then start multitasking. The problem is of course that magic called
> "install" and KickStart. DF0: is hard coded into kickstart and something
> about the information Install copies to the disk is vital too, although
> I haven't figured out what it is yet. So no, you can't boot from anyone's
> hard disk without getting a hacked kickstart disk. 

    actually, the CLI is also in the kickstart, so it isn't LoadSeg()ed
from df0:.  (i haven't had a chance to play with my 1.2 yet, so i'm
talking about 1.1).  the boot code written by "install" is very simple;
paraphrasing in C:

	long
	boot(a1)
		struct IOExtTD *a1;	/* ->ioreq used to read boot blocks */
	{
		struct Resident *d0, *FindResident();

	#ifdef	KICKBENCH
		/* the KickBench boot block transforms
		 * the disk from type "KICK" to type "DOS"
		 */
		long *a0;

		a1->io_Command = CMD_WRITE;
		a0 = (long *) a1->io_Data;
		*a0 = 0x444F5300L;		/* 'D','O','S','\0' */
		DoIO(a1);
	#endif	/*KICKBENCH*/

		if ((d0 = FindResident("dos.library")) == NULL)
			return(-1L);
		else {
			struct Resident *a0;

			a0 = d0;
			(a0->rt_Init)();	/* <- the real "magic" */
			return(0L);
		}
	}

    df0: is hard-coded into AmigaDos in at least a couple places.
i haven't made a serious effort to redirect it, and offhand, i
suspect it is more difficult than a few simple patches.  however,
this is a perfect application for a KickBench.

	wayne hamilton
	U of Il and US Army Corps of Engineers CERL
UUCP:	{ihnp4,pur-ee,convex}!uiucdcs!uiucuxc!hamilton
ARPA:	hamilton%uiucuxc@a.cs.uiuc.edu	USMail:	Box 476, Urbana, IL 61801
CSNET:	hamilton%uiucuxc@uiuc.csnet	Phone:	(217)333-8703
CIS:    [73047,544]			PLink: w hamilton