[back to main site]
Snowdrop OS - a homebrew operating system from scratch, in assembly language

Introduction section


Welcome to the pages of Snowdrop OS, my homebrew operating system project.


Snowdrop OS was born of my childhood curiosity around what happens when a PC is turned on, the mysteries of bootable disks, and the hidden aspects of operating systems. It is a 16-bit real mode operating system for the IBM PC architecture. I designed and developed this homebrew OS from scratch, using only x86 assembly language.

I have created and included a number of utilities, including a file manager, text editor, graphical applications, BASIC interpreter, x86 assembler and debugger. I also ported one of my DOS games to it. After all, what kind of an operating system doesn't have games?

The Snowdrop OS and the apps are distributed as both a floppy disk (1.44Mb) image, as well as a CD-ROM image. The images contain the following, all programmed from scratch:
  • a boot loader which loads the kernel into memory
  • a kernel which sets up interrupt vectors to be used by user apps, and then loads the startup app
  • user apps, including a shell (command line interface), utilities, test apps, and aSMtris, my Tetris clone
Snowdrop OS can also be installed to a hard disk - prompting the user to do so during boot - if it detects one.

I hope that Snowdrop can serve other programmers who are looking to get a basic understanding of operating system functions. Like my other projects, the source code is fully available, without any restrictions on its usage and modification.


Source code browser


Some interesting areas in the source code are:

Versions


v1 - initial version, single tasking, shell, aSMtris
v2 - PS/2 mouse driver and mouse test apps
v3 - basic multi-tasking support and virtual display support
v4 - FAT12 driver write/delete, file manager, text editor
v5 - serial port driver, formatting utilities, file copy support
v6 - multiplayer snake game (over serial port)
v7 - slide show presentation app
v8 - "keep memory" task lifetime mode, for custom services
v9 - parallel port driver, BMP image support, sprites
v10 - system timer frequency change
v11 - animated sprites, sound driver (internal speaker)
v12 - keyboard driver
v13 - more sprites functionality, Storks game
v14 - kernel config, program arguments, file utilities
v15 - 16x2 LCD controller app, text editor fixes
v16 - GUI framework
v17 - Snowmine (Minesweeper-like game)
v18 - BASIC interpreter and linker
v19 - install to hard disk
v20 - BASIC and text editor improvements
v21 - integration of BASIC and GUI framework
v22 - x86 assembler, multi-disk support, file view utilities
v23 - x86 debugger
v24 - service loading
v25 - dynamic memory and data structures
v26 - installer improvements, pseudo-mouse driver
v27 - kernel and inter-task messaging
v28 - GUI higher resolution, draw application, desktop application
v29 - data compression, Hangman game
v30 - pseudo-mouse driver improvements
v31 - runtime libraries (RTL), BASIC interpreter RTL