- x86 64 bit
- Multiboot2 spec. compatible
- VGA/VBE Graphics Drivers, full HD 1080p, 32 bit color support
- Filesystem
- Multi-tasking Kernel
- The only thing that isn't from scratch is the use of GRUB/Multiboot bootloader and the base Doom src which took quite a few tweaks to port
- Built completely freestanding, custom libc, from scratch standard library, etc.
- Custom memory allocator/heap, custom scheduler
- C and C++ Support, Custom Toolchain/Cross Compiler via GCC/Binutils
- Automated Installation and setup!
- Kernel is written in primarily C and Assembly
- I keep saying I will use C++ after being a huge proponent of it for a long time, but then write more C.. wouldn't want to write a 3D engine in C, wouldn't want to write an OS in C++...
- I don't think
- At this point all it could use is some input tweaks for playing DOOM and a USB Keyboard driver for real hardware (works with ps2! luckily my very new z690 mobo has a port suprisingly)
- I want to rewrite it from scratch, learned so much along the way I could do it better the second time around
- double buffering (sorta)
- Port DOOM (as a user mode process) [COMPLETE]
- Cross compiler + C Runtime for easier use of our standard library [COMPLETE]
- UEFI Support to boot on real hardware [COMPLETE]
- now that we have reached user mode a lot of kernel code can be tidied up and moved to userspace, or refactored into a API for usage from user space
- you can tell what was added in the last stage of this project
- I would like to rewrite this someday, learned too many lessons not to
-
VBE Framebuffer, up to 32 bit color, Graphics Driver provides API
-
Serial/COM port support, kernel debugging via serial
-
Kernel / CPU Exception interupt handlers with memory dumps and many features to make development easy
-
Multi-tasking, round robin scheduler
-
Fully implemented from scratch heap and malloc/free
- this has been one of the most fun things I have ever programmed and I have many ideas to improve its efficiency
-
a stdout-type buffer and text renderer
-
custom standard library, with strings, printf, malloc, memory functions, etc. all implemented from scratch
- one for kernel and one for user space, user space has it's own C Runtime
- libc-ish enough that stuff is portable
-
it runs Doom, really well too. and in multi-tasked user space... no cheating!
-
custom initrd filesystem and VFS implementation, with subdirs, etc.
-
A lot more, TODO
THIS MIGHT BE OUT OF DATE IN SOME PLACES - MOST STUFF IS DONE AND WORKING AS OF 5.1.24 IT BOOTS ON REAL MODERN UEFI PCS AND RUNS DOOM, IN USER MODE, LOADED FROM A CUSTOM FILESYSTEM AS AN ELF64 EXECUTABLE BUILT WITH OUR CROSS COMPILER, WITH SUPPORT FOR MULTI TASKING ALL ALONG THE WAY BADA BING BADA BOOM
-
builds on linux/macos, toolchain scripts still work as of 7.28.24
-
writing asm is sorta zen
-
this was my first big C project and first I was missing C++ a lot.. then things started coming along and TLDR: C and I are on good terms now
- when I finally added C++ support thinking I'd want to rewrite/continue with it, I was underwhelmed and went back to C LOL
- I really see the appeal of a "C+" type language now, like C with QoL stuff (auto, function/operator overloads, basic constexpr, etc.), and "classes" that are just structs with functions, etc. without getting into C++ abstractions like streams and templates too much
- it should keep C calling conventions too
- next project ?
- honestly the only thing I consistently miss from C++ is function over-loading, and some of how C++ handles structs (aka lemme stick functions in there so im not prefixing every function like "structname_dothing(example_t* examplestruct)")
- im pretty sure if I switched to like the newest C20 / C23 I would get some of these features (unknown if I would without libc / stdlib though)
- ooh i also miss being able to declare variables inside logical expressions, ie. 'if (int err = get_error(); err > 0 ) { print(err); }' is nice to have
If you want to test your understanding of how a modern computer works, write an OS from scratch. I have been humbled and learned so much about concepts I thought I had down pat. Also you'll never forget the x64 ABI and calling conventions after this too.