
softload version 1.10   Mike Stephens, 24 Sep 97
---------------------

Previous versions (including old code in BASIC) expect most of memory to be
in application space when they run. They rely on finding a set of pages
(totalling 4Mb for 4Mb ROM) in a contiguous physical chunk (1 Mb aligned)
*and* mapped contiguously in application space, sufficiently high up. This
is somewhat inflexible, and fails early (eg. should be able to softload on
a machine with 8 Mb as a single 8 Mb SIMM, but can't).

Softload now uses a different strategy. It looks for a set of pages in a
contiguous physical chunk (1 Mb aligned) that aren't locked down. It then
grows a temporary dynamic area with these pages; this allows the kernel to
do all the hard work of rearranging pages, and reclaiming them from other
use if necessary. The only additional requirement therefore is at least
4 Mb in the FreePool.

Because of the requirement for memory in the FreePool, this version should
be run after most of memory has been moved to the FreePool (allowing an
application space slot of, say, 256k). This is achieved either by the
FreePool utility in !Boot.Utils, or by implementing the AppSize command
in BootCmds properly for an OS with a FreePool, and using that.

Softload is also extended to allow soft loading from the machine
ROM itself (eg. for speed) and forced soft unloading (back to hard ROM
without reset) - see below.

Softload now copes with softloading a different ROM over a current softload.
It does this by initially turning the soft load into a forced soft unload.
The reboot(s) will then eventually do an ordinary soft load of the required
new ROM (assuming that the softload command is in the !Boot).

The syntax has been extended with the aim of allowing a simple command
line to be inserted in the !Boot sequence, which soft loads a file only
if present, only if machine has enough memory etc.

usage for version 1.10:

  sofload [-v[erbose]] [-m[inmemory] <minmem>[K|M]] <ROMname> [<ROMname> ...]

  - each <ROMname> is name of a 4Mb ROM file

  - softload tries <ROMnames>'s left to right until a valid file is found
    (or until a special <ROMname> is reached - see below)

  - if <ROMname> appears to be a leaf name, path defaults to <Boot$Dir>.Softload.

  - a special <ROMname> of .rom. or .ROM. means soft load the internal ROM

  - a special <ROMname) of .none. or .NONE. means unload any current soft load

  - verbose sets verbose

  - minmemory sets a minimum fitted machine memory (bytes) below which softload
    will silently do nothing; k or K suffix means kbytes; m or M suffix means
    Mbytes; if minmemory is not specified, softload will give an error if
    attempting to softload below a nominal fitted size of 6 Mb.

Typical usage:

   (1) softload -m 16M 4MEG .NONE.

Only softload if machine has at least 16Mb; softload <Boot$Dir>.Softload.4MEG if
present, otherwise no soft load

   (2) softload -m 16M 4MEG1 4MEG2 .rom.
   
Only softload if machine has at least 16Mb; softload <Boot$Dir>.Softload.4MEG1 if
present, then try <Boot$Dir>.Softload.4MEG2, otherwise soft load the internal ROM.

