1.6 KiB
Platform specific information
8086
Default memory map
16-bit mem map (seg:off) 0x0000:0x0000 -> 0x0000:0x0500 BIOS stuff 0x0000:0x0500 -> 0x0000:0x2100 root 0x0000:0x2100 -> 0x0000:0x3300 fat 0x0000:0x3300 -> 0x0000:0x6c00 14,25kb free space 0x0000:0x6c00 -> 0x0000:0x7c00 IDT and GDT (256 desc. eatch) 0x0000:0x7c00 -> 0x0000:0x7e00 bootsector 0x0000:0x7e00 <- 0x0000:0xffff ~32,5kb stack for boot 0x1000:0x0000 -> 0x9000:0xffff 576kb free space 0xa000:0x0000 -> …………. VGA mem etc.
Restart code
To restart the segment loaded from the bootsector: 68007C ; push 7C00 C3 ; ret
For an intersegment restart: 6A00 ; push 0 68007C ; push 7C00 CF ; iret
Testing notes
Making blank floppy disk images
dd if=/dev/zero of=$filename.img count=1440 bs=1k
Changing floppies inside of qemu
While qemu is running it is possible to change floppies To achieve this you first must enter the qemu monitor by pressing: Ctrl-Alt-Shift-2
You then may change the floppy by typing: change $drivename $filename
for example to use the file blank_floppy.img in the A drive: change floppy0 blank_floppy.img
Building binaries for testing
stage0_monitor
There are literally hundreds of ways of building the root bootstrap binary. All that is required is a simply hex compiler written in any language on any system available to the user. This repository contains a hex compiler written for linux in hex and assembly as well as a platform independent C implementation. Then to complete the build process write to the master boot record of a floppy disk. Or should you desire simply use qemu to boot the compiled file directly.