[back to main site]
Snowdrop OS - a homebrew operating system from scratch, in assembly language
I have iterated multiple times, making improvements in every version. Here are the released Snowdrop OS versions:

version 1 - initial version, single tasking, shell, aSMtris
version 2 - PS/2 mouse driver and mouse test apps
version 3 - basic multi-tasking support and virtual display support
version 4 - FAT12 driver write/delete, file manager, text editor
version 5 - serial port driver, formatting utilities, file copy support
version 6 - multiplayer snake game (over serial port)
version 7 - slide show presentation app
version 8 - "keep memory" task lifetime mode, for custom services
version 9 - parallel port driver, BMP image support, software sprites
version 10 - system timer frequency change
version 11 - animated sprites, sound driver (internal speaker)
version 12 - keyboard driver

I programmed Snowdrop OS exclusively in assembly language for two reasons:
  • it keeps the process of creating binaries extremely simple, only requiring the assembly step
  • assembler is one of my favourite hobby programming languages, giving me a break from the high level software I write for my day-to-day job

I've made sure to comment my source code well, focusing on the more algorithmically-complex pieces. Other than the boot loader, where I was strapped for space, I kept the code on the verbose side, as opposed to the efficient/minimalistic side. If you run across a confusing piece of code, send me an email to the address on the homepage of this website.

The source code package (found on the Downloads page) contains four subdirectories inside the src directory:
  • apps - contains source code for user apps, such as aSMtris, etc. (one file per app)
  • kernel - the entry point is in the kernel.asm file; it inlines all other files in this directory. These files make up Snowdrop OS's kernel. The kernel provides access via interrupts to the functionality defined in most files in this directory
  • loader - the Snowdrop OS boot loader. It is responsible for loading the kernel from disk, and then transferring control to it
  • static - static files, copied verbatim to the generated disk image

Also, I've kept a day-by-day (or rather, evening-by-evening) development log describing various issues I ran into. It doesn't have much technical value, but could be an interesting read. I've included it in here, in the "Development log" section below.

Regarding the tools I've used (Nasm, cdrtools, etc.), I've used an online meta virus scanner to scan the Snowdrop OS package for possible viruses in the tools I downloaded, of the 55 scanners, one lesser-known scanner reported a possible threat. Given that industry-recognized ones like Bitdefender, AVG, Symantec, Kaspersky, etc. detected nothing, I believe that the threat report is a false positive. Regardless, I suggest you always work in a virtual machine when you work with tools whose origin is hard to verify.