8086 Boot code
Let's walk through 8086 Boot code at B400. This walkthrough is
a bit less detailed that the "canonical" z80 one, which is
contains comments that are common to all CPUs.
This assembles the boot binary. It requires the 8086 assembler
(B20) and cross compilation setup (B200). It requires some
constants to be set. See doc/bootstrap.txt for details.
In general, this code works like the Z80 boot code. We only
document when it differs.
RESERVED REGISTERS:
* AX is the Work register
* SP points to PSP TOS
* BP points to RSP TOS
* DX hold IP (Interpreter Pointer)
* BX holds PSP's Top Of Stack value
Master Boot Record
So far, the only platform where the 8086 boot code is used is
the PC/AT and this has the peculiarity of booting through the
Master Boot Record (MBR), which you can see in
arch/8086/pcat/mbr.fs. This is loaded at $7c00 on boot and
does:
1. skip the next few bytes because it's the BIOS Parameter Block
(BPB) and having values other than 0 there messes boot.
2. Set all segments to $800.
3. DX holds the boot drive no. Push it to SP so it can be popped
at Collapse OS init.
4. Read Collapse OS binary from boot drive to memory through
INT13h.
5. Jump to Collapse OS's address 0.
5. Have the proper $aa55 signature at the end of the 512 bytes
block.
driveno in stable ABI
We use byte $03 in stable ABI to store the boot drive no. On
startup, this boot drive has been placed on SP's TOS be the MBR
and we write it to $03 so that PC/AT floppy drivers pick it up.
This page generated at 2024-11-24 21:05:03 from documentation in CollapseOS snapshot 20230427.