Forge

ForgeOS32 — a 16-to-32-bit boot chain in pure Forge

A minimal real-mode → protected-mode boot chain written entirely in Forge — no inline assembly anywhere. It is the reference implementation of the x86_32 raw kernel target and lives in examples/os32/.

Three stages

Stage Source Output Sectors (LBA) Loaded at
1 — boot sector src/boot/boot.dev build/boot.bin 0 0x7C00 (BIOS)
2 — loader src/boot/loader.dev build/loader.raw 1–2 0x9000
3 — kernel src/kernel/kernel.dev build/kernel.raw 3–10 0x100000 (physical)

Build and run

cargo build --release
./examples/os32/build.sh             # assemble build/os32.img
./examples/os32/build.sh run         # ...and boot it in QEMU
qemu-system-x86_64 -accel tcg,thread=multi \
    -drive file=examples/os32/build/os32.img,format=raw,if=ide -nographic

Expected output:

ForgeOS32: loading kernel: ok
ForgeOS32: hello from 32-bit protected mode
conv mem: 0009FC00 B

The machine cli; hlts after printing.

Linker descriptors

A standalone, byte-identical descriptor for the kernel alone lives at examples/targets/x86_32-raw.fld:

./target/release/forgec kernel.dev -o kernel.raw --linker examples/targets/x86_32-raw.fld

Testing

The integration test os32_boot_chain_reaches_kernel boots the full three-stage chain in QEMU and asserts the 32-bit banner; it needs qemu-system-x86_64 on PATH.