collapseos/recipes/pcat
Virgil Dupras 5a77b80d3d emul/8086/pcat: fix broken int13h logic
I had forgotten that heads index increment before track index.
2020-10-25 12:21:44 -04:00
..
blk emul/8086/pcat: fix broken int13h logic 2020-10-25 12:21:44 -04:00
Makefile emul/8086: add PC/AT emulator 2020-10-25 10:27:52 -04:00
mbr.fs Move 8086 assembler from B730 to B30 2020-09-21 19:24:54 -04:00
README.md emul/8086: add PC/AT emulator 2020-10-25 10:27:52 -04:00
xcomp.fs

PC/AT

PC-compatible machines need no introduction. They are one of the most popular machines of all time. Collapse OS has a 8086 assembler and has boot code allowing it to run on a PC/AT-compatible machine, using BIOS interrupts in real mode. Collapse OS always runs in real mode.

In this recipe, we will compile Collapse OS and write it to a USB drive that is bootable on a modern PC-compatible machine.

Gathering parts

  • A modern PC-compatible machine that can boot from a USB drive.
  • A USB drive

Build the binary

Running make in this folder with yield:

  • mbr.bin: a 512 byte binary that goes at the beginning of the disk
  • os.bin: 8086 Collapse OS binary
  • disk.bin: a concatenation of the above, with blkfs appended to it starting at 0x2000.

disk.bin is what goes on the drive.

This binary has BLK and AT-XY support, which means you have disk I/Os and can run VE.

Emulation

You can run the built binary in Collapse OS' 8086 emulator using make emul.

The 8086 emulator is barbone. If you prefer to use it on a more realistic setting, use QEMU. The command is:

qemu-system-i386 -drive file=disk.bin,if=floppy,format=raw

Running on a modern PC

First, copy disk.bin onto your USB drive. For example, on an OpenBSD machine, it could look like:

doas dd if=disk.bin of=/dev/sd1c

Your USB drive is now BIOS-bootable. Boot your computer and enter your BIOS setup to make sure that "legacy boot" (non-EFI boot, that is, BIOS boot) is enabled. Configure your boot device priority to ensure that the USB drive has a chance to boot.

Reboot, you have Collapse OS. Boot is of course instantaneous (we're not used to this with modern software...).