x86 Bare-Metal Project

Project SigmaBoot ALPHA

A tiny operating system kernel focused on clarity: Multiboot startup, VGA terminal, PS/2 keyboard input, lock-state LEDs, and release-ready CI.

Warning: Experimental alpha software. Features and behavior may change without notice.

kernel.iso boot preview
PROJECT SIGMABOOT
Kernel booted successfully.
Keyboard input is ready (IRQ1 interrupt-driven, US scancodes).
Type below:
> hello world
LOCKS  CAPS:OFF  NUM:ON  SCRL:OFF
        

Core Features

Boot Path

Multiboot-compliant startup via GRUB with clean assembly handoff into C kernel entry.

VGA Terminal

Text rendering, color controls, tab/newline/backspace support, and scroll-safe output zone.

Keyboard

IRQ1 interrupt-driven PS/2 input, US scancode translation, lock key behavior, and LED synchronization.

Status Bar

Persistent bottom-row lock-state display with CAPS/NUM/SCRL and live uptime (`T+Xs`).

Build and Run

Use the ISO directly. Do not extract it to boot.

Local Commands

make -C kernel all
        make -C kernel iso
        qemu-system-i386 -cdrom kernel/build/kernel.iso

Boot From Release Asset

qemu-system-i386 -cdrom kernel.iso

For hardware, write kernel.iso directly to USB with Rufus or Balena Etcher.

Release Pipeline

GitHub Actions builds kernel.bin, kernel.elf, and kernel.iso, then attaches downloadable artifacts to each published release.

Open Latest Release

Roadmap

Done: VGA terminal, keyboard lock LEDs, lock status bar, and IRQ1 interrupt-driven input (IDT + PIC remap).

Done: CI build artifacts, release asset pipeline, and project website/docs with GitHub Pages deployment.

Done: exception ISRs with a fault diagnostics screen (vector/name/error code/EIP/CS/EFLAGS).

Done: PIT timer IRQ0 and uptime display integrated into the status bar.

Done: tiny command shell (`help`, `clear`, `version`, `locks`, `uptime`).

Done: Multiboot memory map viewer command (`memmap`) for boot-time physical layout visibility.

Done: early physical memory manager groundwork with bitmap frame tracking and `pmm` stats.

Done: heap allocator groundwork (`kmalloc`/`kfree`) backed by PMM frames with `heap` stats.

Done: dynamic shell command buffer migrated to heap-backed allocation with growth and history.

Next: migrate additional kernel buffers/subsystems to heap-backed allocations.