FROST-x86
- 4 Devlogs
- 2 Total hours
A Custom x86 baremetal OS. Currently has 5 different milestones: Milestone 1- User Shell Milestone 2- Syscalls and ring 0 Milestone 3- UI Milestone 4- Modernize the UI Milestone 5- Drivers and Networking
A Custom x86 baremetal OS. Currently has 5 different milestones: Milestone 1- User Shell Milestone 2- Syscalls and ring 0 Milestone 3- UI Milestone 4- Modernize the UI Milestone 5- Drivers and Networking
July 28, 2026
Paging is broken. :(
Yeah I kinda got too excited..
Four-level page tables PML4, PDPT, PD, PT. Higher half kernel at -2GB. Should work. Doesn’t work.
QEMU triple-faults immediately. Real hardware triple-faults immediately. Something in the table walk is wrong but I don’t know what yet. Probably a physical address somewhere that isn’t actually physical. Or a flag bit I set wrong. Or the TLB flush is in the wrong place. Or all of the above.
I’ve been staring at hex dumps for two hours. The tables look right. They are not right because I crossed referenced the OSDev wiki and my code.
Going to sleep on it. Tomorrow I’ll redo it so I can sleep tomorrow like a baby.
Heres a picture of a cat…
July 27, 2026
(ACTUAL TIME: 2HRS, 12MINS)
PMM is in. Physical memory manager. I can hand out pages now. It feels weirdly powerful for something so boring and confusing.
Limine gives you a memory map. Usable, reserved, ACPI reclaim, whatever. I walk it, find the usable regions, shove them into a bitmap. One bit per page. 0 = free, 1 = used. 128KB of bitmap for 4GB of RAM. Not efficient but it works. pmm_alloc() finds a 0, flips it, returns the address. pmm_free() flips it back. Done.
Took longer than it should have. Off-by-one in the bitmap index, allocated the same page twice, page fault. Fixed it. Classic.
PIT and keyboard work. I can type while the timer ticks. Multitasking is still far but at least the pieces are there.
Next: paging. Four-level page tables. Higher half kernel. The thing I’ve been dreading since devlog 1.
Since AI is a tool now, I’m using it. But vibe coding is wrong and I’m keeping AI work under 30%. So far it’s only cleanup, file fixes, and commentary (because I forget what a certain part does). I check every change. I don’t let it break the rules.
The PMM was different. I wrote one first. Asked Kimi if it was good. It was pure garbage apparently. I’m not familiar with x64 dev, this is all new, and I’m learning while coding. So I let AI rebuild the PMM properly while I studied what it did. I understand it now. It is mine. But I needed the help.
July 26, 2026
GDT and IDT are in. And it runs on real hardware. Not QEMU. My actual laptop. (so happy)
GDT was easy. 64-bit code segment, data segment, TSS later. IDT took longer. Assembly stubs for every vector, actually handling exceptions instead of triple-faulting into a black screen. The page fault handler just dumps registers and hangs but at least I can see where I died.
Real hardware was the test. QEMU lets you get away with everything. Real silicon doesn’t (flashback when I had a full OS ready but it didn’t work on silicon). Limine boots, framebuffer comes up, interrupts fire.
Next: PIT timer. Need a heartbeat before multitasking is even a thought. Then memory map parsing, frame allocator, and then paging. Four levels. Higher half. The thing that actually kills your will to live.
(Ignore broken bezel, I can’t afford a new laptop. This one is like 9 yrs old at this point.)
July 26, 2026
OS dev again.
About a year of 32-bit experience. Paging was already the wall. Now it’s x86_64, four-level page tables, and the will to live is at zero. Time to revive an old project called Frost64. I’m using AI for debugging acceleration, keeping generated code under 30% so I can ship.
I used the Limine barebones template from OSDev Wiki. I AM NOT writing a bootloader from scratch on day one. Framebuffer init, few lines printed. Looks like an OS. Is not an “OS”. But it boots.
GDT — proper 64-bit segments
IDT — so exceptions don’t triple-fault into a black screen (trust me, you don’t want this..)
PIT / APIC timer — timing before multitasking is even a thought
Physical memory map — Limine hands it over, now time to do something with it
Frame allocator — hand out pages somehow
Paging — four levels, higher half, the thing that kills your will to live, it’s not for the weak