I would assume this also means that the "boot helper" programs (RDBOOT.ABS, RDBOOT.H8T) would employ the same algorithm to locate the start of the ramdisk area.
One drawback is that one can't have part of the ramdisk for HDOS
and part for CP/M. I guess one way around that would be to further
define this "IAMRAMDISK!" sector to contain partitioning
information, so that HDOS and CP/M can locate their designated
areas to use. This might fall to the bootstrap code to handle,
similar to how the various HDD bootstraps do it. The ROM only
locates the "IAMRAMDISK!" sector and loads the bootstrap. The
bootstrap then looks at information like unit number and boot
string and decides what "partition" to actually boot. This
bootstrap need not know whether it is booting HDOS or CP/M - it is
just the same standard boot procedure (load the first 0A00H bytes
of the partition and jump to them). In other words, each partition
(if bootable) looks like the boot sectors of a floppy. The drivers
would also have to consult this "IAMRAMDISK!" sector in order to
locate the partition(s) they are allowed to use. This, again, is
similar to the HDD drivers (at least the MMS style) where the
"magic sector" is read to determine where the partitions exist.
We'll need to make sure all the boot steps honor the partitioning,
if it exists. We can easily create a standalone program (loaded
from VDIP or tape) that assists in creating the partition
information, perhaps making things more convenient. Theoretically,
the same code base could be used for all versions, including .ABS
and .COM (with a little effort).
To view this discussion on the web visit https://groups.google.com/d/msgid/sebhc/7d5cbb3c-c9e7-451d-896b-4e02736897abn%40googlegroups.com.
Ok, so trying to summarize the "rules" so far:
1) The start of ramdisk area is designated by the "IAMARAMDISK!"
(or other key/cookie) block and will be found only on 64K
boundaries. OSes (CP/M 3, MP/M) may not use memory beyond (and
including) this block for their program memory.
2) The "IAMARAMDISK!" block is 512 bytes long (or TBD?).
* I might suggest that this block contain the primary bootstrap, so may begin with a JMP before the cookie and be longer than 512 bytes.
* In fact, the length of this block might be simply defined by (bounded by) the location of the first partition.
3) The key/cookie is followed by a partition table (format TBD, but includes a "type") (and other information?). This might be embedded - at a well-defined location - in the bootstrap code there.
Partitions must begin on 16K boundaries (are defined by a MMU "page" number).
* This effectively means that the primary bootstrap and partition table are in a 16K page that is otherwise not used. This would allow for "after market" primary bootstraps that did fancy things like present a menu and allow the user to choose what to boot.
4) All OS drivers must honor the partition table and only use memory designated as their "type".
5) Boot (ROM, Tape, etc) will load the "IAMARAMDISK!" block (TBD) into 2280H and jump to it.
The bootstrap contained therein is responsible for locating the desired unit/partition (as specified by AIO.UNI and the boot string), loading that partition's bootstrap, and continuing the boot.
* I expect the primary bootstrap to be the same for all OSes. OS-specific bootstraps are put in the target partition to be booted (secondary bootstraps).
I'm envisioning that the "H8-8M-MMU" board can function as a variable-capacity memory solution, providing anywhere from 512K to 32M (in 512K increments). Therefor, I'm thinking we don't want to restrict any of this to merely 512K or 8M, but design it such that any capacity is supported, and even allow for expansion (addition of more memory later, amending the partition table to match).
Does this sound like a starting point?
To view this discussion on the web visit https://groups.google.com/d/msgid/sebhc/221a016e-4ef4-4507-91ad-10717bc68bdfn%40googlegroups.com.