June 16, 2025
Add a proper README in preparation for ship. Also fixed a bug where booting with low memory would triple fault.
Added a basic terminal application. Currently it doesn't have very many applications but the text handling works quite well, with history and line wrap handling. I had to implement more ANSI sequences in my TTY subsystem in order to achieve this, as well as fixing some bugs in the stdlib.
Implemented interfacing with the MPU5060 over I2C and filtering the output to determine attitude (roll, pitch, yaw).
Implemented a PS/2 keyboard driver, from interfacing with the 8042 controller to translating scancodes to keycodes and ASCII codepoints. Currently the last step of translation from keycodes to ASCII is janky and is not pushed to Github.
Added basic UEFI and ACPI table location and parsing. Added an HHDM to simplify memory management when reading system tables and fixed a minor printf bug. Lots of debugging for the paging changes and reading specifications made this take way longer than I thought it would.
Spent a whole ton of time debugging why printing caused my laptop to triple fault. Turns out it failed when trying to write on the bottom 1/4 of the screen since the paging logic had UB due to not zeroing allocated memory for page directories. It was especially annoying to debug since it worked fine on my VM and I had no way of getting information from the system because the printing was broken.
Also added buffering during parsing of ANSI escape sequences so now colors actually work on the real screen and slightly sped up the clock synchronization process.
Implemented TSC as a clocksource, calibrated using the PIT or using CPUID enumerated values if possible. Added (roughly) standardized logging functionality with pretty printing and timestamps.
Refined VMA management and added basic memory allocators
Refine virtual memory layout and fix page tables. Also added primitive VMA allocation and deletion with a basic bump heap allocator.
Fix triple fault, fix/standardize standard lib. Add further documentation on address space structure
Fixed page (un)mapping and finished memory reclaiming. It triple faults on my laptop but it works fine on qemu so something's clearly wrong but debugging is a nightmare.
WIP: Attempted to fix page (un)mapping and reclaim bootloader memory. Unfortunately there seem to be many bugs with (un)mapping (probably TLB related)
Added page mapping functions and mapped memory map pointers
Not a GCC bug but an INCBIN bug. Created and debugged new page tables.
Wrote page allocator and half done replacing Limine's HHDM page tables. Perhaps found a GCC bug??
Amateur x86-64 (for now) kernel built from scratch, booted using Limine.
This was widely regarded as a great move by everyone.