@database "system-startup"
@master "AMIDEV:NDK/Autodocs/system-startup.doc"

@Node Main "system-startup.doc"
@toc "Autodocs/AG/INDEX/Main"
    @{" --Background-- " Link "--Background--"}
    @{" ROM-Updates() " Link "ROM-Updates()"}
@EndNode

@Node "--Background--" "System-Startup/--Background--"

@{b}   NAME@{ub}
	System-Startup - the initial boot process of AmigaDos

@{b}   Background@{ub}
	System-Startup is to AmigaDos what "init" is to Unix. It is
	the initial process that is taking control as soon as all
	essential system libraries are initialized. As part of its
	job, it also updates system components from disk if newer
	replacements are available there, see @{"ROM-Updates" Link "system-startup/ROM-Updates()"}.

	The System-Startup module has been factored out from the
	dos.library and is now a process and a module of its own.
	The function it performs were previously executed by
	the boot shell through CliInit(), a private and now obsolete
	LVO of the dos.library.

@{b}    STARTUP MECHANISM@{ub}
	The system-startup process is as follows:

	1) System-Startup completes building the dos.library.
	2) System-Startup initializes intuition provisionally
	3) System-Startup mounts all volumes collected recorded
	   in @{"ExpansionBase" Link "INCLUDE:libraries/expansionbase.h/Main" 42} left there by auto-bootable controllers.
	4) If a newer file system has been loaded from the RDB,
	   this file system is placed in the FileSystem.resource, then
	   adds this as "filesystem" to the resident list.
	5) System-Startup then continues to mount some important RAM-based
	   handlers, namely PRT:, PAR:, SER: and PIPE:.
	6) System-Startup starts the file system of the boot volume
	7) System assigns are made, namely, L:, FONTS:, DEVS:, LIBS:
	   S:, C:, SYS: and ENVARC:. The latter is a "late assign".
	8) All remaining file systems are started.
	9) System-Startup mounts RAW: and CON: and adds the con-handler
	   to the resident list.
	10)Unless disabled by the boot menu, System-Startup looks for
	   @{"ROM-Updates" Link "system-startup/ROM-Updates()"} on file systems, see section @{"ROM-Updates" Link "system-startup/ROM-Updates()"}.
	11)As part of this update process, any provisional version
	   of intuition is shutdown and replaced by the final version.
	12)If the boot monitor is AGA-based, graphics and intuition are
	   "enlightened", i.e. AGA modes are enabled. This does not
	   happen by default for backwards compatibility.
	13)All rom-modules flagged as RTF_AFTERDOS are initialized.
	14)System-Startup reads DEVS:System-Configuration, the legacy
	   intuition preferences.
	15)System-Startup opens the boot console, and the
	   Startup-Sequence.
	16)Unless flagged as silent in Expansion, the boot console
	   is forced open.
	17)If flagged by Expansion, the SysLog module is loaded and
	   initialized.
	18)If flagged by Expansion, the "debug" and "interactive"
	   shell variables are set.
	19)The boot shell is initialized through System().
	20)System-Startup dies down as the shell takes over now.

@{b}    SEE ALSO@{ub}
    	 @{"ROM-Updates" Link "system-startup/ROM-Updates()"}
@EndNode

@Node "ROM-Updates()" "System-Startup/ROM-Updates"

@{b}   NAME@{ub}
	System-Startup ROM Updates - update ROM modules from disk

@{b}   FUNCTION@{ub}
	The ROM-Updates mechanism is part of System-Startup and is
	able to replace some system-modules by corresponding RAM
	versions if available on disk. ROM-Updating can be disabled
	from the Boot-Menu through setting a flag in @{"ExpansionBase" Link "INCLUDE:libraries/expansionbase.h/Main" 42}.
	Note that ROM-Updates does not enforce a reboot.

	A RAM-module replaces a ROM-Module if the version of the RAM
	module is strictly larger than that of the ROM-Module. That is,
	a V48 module can replace a V47 module. The only exception is
	intuition, which can always be downgraded to V40.

	The search path for ROM-Updates is as follows:

	- the boot volume. If a replacement module is found there,
	  it is used. If, however, the boot volume contains a non-
	  loadable (probably empty) dummy file of the name of a ROM
	  component, scanning is aborted and the ROM module is not
	  updated.
	- any other mounted volume, in the order they appear in the
	  @{"DosList" Link "INCLUDE:dos/dosextens.h/Main" 377}. The only exception is the intuition.library in
	  version 40, which is *only* scanned for on the boot volume.
	- the file system is upgraded automatically from the RDB if
	  a new version exists there. It is not upgraded from file.

@{b}    UPGRADABLE MODULES@{ub}
@{b}    	At the time of writing, the following ROM-Modules are upgradable@{ub}
	from disk:
	- "filesystem" aka "FFS", taken from the RDB if a newer version
	  is available there.
	- "con-handler", taken from "L:".
	- "ram-handler", taken from "L:".
	- "shell", "BootShell" and "CLI, all taken from "L:Shell-Seg".
	- "intuition", taken from "LIBS:", with
	  the option for downgrading to V40.
	- "console.device", taken from "DEVS:"
	- "gadtools.library", taken from "LIBS:"
	- "syslog", taken from "L:"
	- "mathffp.library", taken from "LIBS:"
	- "mathieeesingbas.library", taken from "LIBS:"
	- "audio.device", taken from "DEVS:"
	- "workbench.library" and "icon.library" are already RAM-based
	  but use the same search path.

@EndNode

