Moss is an i386 custom RTOS I'm writing as a hobby! :D I started writing it on 26 Jul 2013, and have been working on it on and off ever since. Thanks to the help from OSDev!
To build, you'll first need an i586 cross-compiler, and all of its handy doodads, in your PATH somewhere. You'll also need to install QEMU, or set up a similar virtual machine like Bochs, to run it (unless you want to boot on actual hardware, which I do not recommend; I'm still working out how to get it to fully boot on my laptop). The Makefile should take care of the rest for you.
Shorter term:
- Proper time and date (probably Epoch-style)
- Proper handling of all keypresses, including multi-byte scancodes
- Memory management
- Paging (does it work yet?)
- Dynamic allocation/freeing
- General code cleanup
- Figure out what the White Rectangle Bug is all about
Longer term:
- Userspace
- Multitasking
- Filesystem
- Command line
- Rudimentary memory management
- kmalloc() implemented as a allocation-by-placement-address pointer-incrementing system
- various tools and such for determining memory layout
- Paging code (4-KiB page size; non-PAE)
- working (and helpful!) page-fault handler
- Some functions helpful for debugging
- Performance boosts everywhere and random minor bugfixes
- Complete rewrite of all existing code (except multiboot)
- Removed Multiboot memory map reading compatability (to be added with memory management)
- Working interrupt handlers
- interrupt handler registration system
- Debugging capabilities, with interrupt #1
- Working IRQs
- Working PIT (Programmable Interval Timer)
- Working interval scheduling handler system
- Rudimentary keyboard input
- (probably buggy) Non-busy-loops when waiting for keypresses
- Working PIT (Programmable Interval Timer)
- CMOS RTC reading (still need sanity checks and such)
- interrupt handler registration system
- Multiboot memory map reading compatability
- Infrastructure for interrupt handlers
- Miscellaneous cleanup
- VGA driver
- scrolling
- colors
- newlines
- integer-printing utility
- status bar
- actual booting code
- variables are lowercase with underscores or camel case (
variableName
) - fields (global variables, when we're using C) begin with an underscore (
_fieldName
) - assembly functions begin with two underscores (
__assemblyFunction
) - functions follow the form
filename_functionNameInCamelCase
- macros follow the form
FILENAME_MACRO_NAME
- constants follow the form
kConstantName