← Sunil Khorwal

Systems & OS Engineering

I explore low-level systems programming by building directly on bare metal — no OS, no runtime, no abstractions. Here are some of my systems projects:

mini-os — Custom 32-bit Operating System

A minimal 32-bit operating system written entirely from scratch in x86 NASM assembly and C. It boots directly from raw disk sectors, transitions the CPU from 16-bit Real Mode to 32-bit Protected Mode, and renders output directly by writing to VGA memory.

Bootloader (boot.asm)

Written in NASM, the 512-byte boot sector loads at 0x7C00. It uses BIOS interrupt int 0x13 to read 5 kernel sectors into memory at 0x1000, sets up a Global Descriptor Table (GDT), and performs a far jump into 32-bit Protected Mode.

Kernel (kernel.c)

The C kernel runs with no standard library. It writes directly to the VGA text buffer at 0xB8000, where each character is two bytes: the ASCII value followed by a color attribute byte (0x0F = white on black). The kernel then enters an infinite halt loop via __asm__("hlt").

Toolchain & Build

Built with a cross-compilation toolchain: i686-elf-gcc and i686-elf-ld with a custom linker.ld script to produce a flat binary. The Makefile concatenates the boot sector and kernel binary into a single os-image.bin, run using qemu-system-i386.

Read the full technical write-up in the blog post →