Skip to content

artiepoole/ArtOS

Repository files navigation

ArtOS

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.

Progress markers

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:

keyboard_support

Splash Screen:

Splash Screen

Pixel Mode:

Pixel Mode Graphics

Colours:

VGA Text Mode Colours

Hello World:

Hello World

My Goals

  • 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)

Tools