ArtOS is a very basic operating system which started from osdev tutorials but which quickly outgrew them.
The aim of this project is simply to learn. If it becomes something I want others to be able to use I will add the typical sections to this README.
Running DOOM (1993):
DOOM.mp4
p.s. it runs smoothly (easily achiving the hardcoded 35 fps) but the video recording and compression makes it look clunky
Loading Screen and Keyboard:
Splash Screen:
Pixel Mode:
Colours:
Hello World:
- Basics
-
- Boot into hello world
-
- Text mode terminal newline Character
-
- Text mode terminal Scrolling
-
- Colour Art
-
- Serial PORT1 output from kernel
-
- Pixel mode text support
-
- Draw "art" in pixel mode
-
- Replace grub and multiboot with grub2 and multiboot2
- Interrupts and time
-
- Interrupt Service Routines (ISR) are targeted on interrupt using a partially filled Interrupt Descriptor Table
-
- Interrupt Requests (IRQ) can be handled
-
- IRQ0 targets a timer decrementor to allow for scheduling and waiting.
-
- Kernel sleep (block until n ticks occur)
-
- Replace PIC with APIC
-
- Real time clock implemented
-
- Replace PIT with HPET
- User IO
-
- Keyboard
-
- Mouse
-
- Shell environment
- Hardware detection and support
-
- SMBIOS detection
-
- PCI device detection
-
- IDE detection
-
- IDE initialisation (currently supports CD ROM only, see storage)
-
- Initialise frame buffer etc using the multiboot2 data instead of hard coded
-
- Detection and selection of video modes i.e. reconfiguring the VGA hardware
- Storage
-
- Attach a RW storage device in Qemu
-
- Read data from CD ROM using PCI IDE DMA BusMastering
-
- Use data from CD ROM i.e. parse .iso file system
-
- Support virtual attached RW storage
-
- Support path strings or similar filename access
-
- Detect and mount/unmount storage devices on real hardware
-
- USB storage support
- Filesystem
-
- Create a directory tree from iso fs data
-
- Implement a rudimentary filesystem
-
- implement proper pdclib compliant filehandling
- PDCLIB
-
- Implement C standard library for kernel space
-
- Load a file using pdclib
-
- User space functionality (e.g. exit, raise, signal)
- DOOM
-
- Play DOOM for ArtOS!
-
- Play DOOM for ArtOS on real hardware
-
- Loading from CD ROM instead of baked into the binary
-
- Loading from boot USB
-
- Run in user space
-
- Add sound
-
- Add save game support
- Optimisations
-
- Basic SIMD for memcpy, memmove and memset
-
- Advanced SIMD usage (string operations and vector maths)
-
- Ther are many other optimisations to consider
- Path to User Space
-
- Use Paging/virtual memory
-
- Proper handling of a scheduler to allow for sleeping of a task
-
- Implement a standard library for user space
-
- Run an executable
-
- Self hosting compiler
- Misc
-
- Remove resolution specific baked in splash screen with centered graphic (can be scaled) and programatically drawn borders. Bring back the loading bar?
- Stretch goals
-
- higher half and 64-bit support
-
- ARM support (raspberry pi zero?)
-
- Multithreading
-
- Networking
-
- USB support
-
- Window manager and windows
-
- Graphics driver(s)
- i686-elf gcc cross-compiler
- QEMU
- GRUB2
- Multiboot2
- CMake
- Jetbrains CLion
- xorriso
- ventoy
- Public Domain C Library
- DOOM Generic