Since there are so many versions of BIOS, including buggy one, the general idea is the assume the minimum condition necessary to boot the OS (or boot manager).
This include:
1. The MBR, at least 512 bytes, is loaded from the booting media
2. The MBR is executed at linear address 00007C00 in real address mode, while CS:IP is not necessary to be exactly 0000:7C00 - use a far jump to fix that.
3. DL holds the drive ID of the boot media, which can be use for subsequent INT 0x13 functions
4. BIOS services are callable (ie. it won't crash by doing INT 0x13), but may return fail or "feature not supported"
5. The stack may be barely enough to handle IRQ, the MBR should setup its own stack asap with sane size.
6. It's preferably to disable interrupt until the OS setup proper handler.
The above 6 points is sufficient for most boot sequence, and the OS should assume nothing else and (re-)initialize all things it use.
nixeagle wrote:
information on what the BIOS is supposed to initialize various registers
Basically, DL holds the boot media handle, all other registers are irrelevant.