[back to main site]
Snowdrop OS - a homebrew operating system from scratch, in assembly language
Snowdrop OS contains several apps that vary in purpose from a simple text editor, file manager, driver test apps, as well as a Tetris clone. Most screenshots on this page are of the apps running in Bochs, a virtual machine I used as the test environment while developing Snowdrop OS.

This list is not comprehensive. Snowdrop OS includes other apps, with new ones created occasionally.


aSMtris


aSMtris is my Tetris clone which I wrote a while ago. It, too, was written in x86 assembly language, designed to run under MS-DOS. It made use of several functions of int 21h, the MS-DOS services interrupt.

Once Snowdrop OS was functional, I added kernel-offered services such as random number generation and delay. This allowed me to port aSMtris to Snowdrop OS, by removing the reliance on MS-DOS int 21h, and replacing those calls with calls to Snowdrop OS interrupts.


apps app


The apps app simply lists the apps available on disk, giving the user a quick way to see what he can run.


Sprites test app


The sprites test app generates sprites from a BMP image, and then moves them across a background. It relies on Snowdrop OS's software sprites library.


Parallel port driver test app


This app outputs bytes to the parallel port, to turn LEDs on and off. Each LED is connected to a parallel port data pin, with a 1,000 Ohm resistor in series.


BMP loading and rendering test app


This app demonstrates how to use Snowdrop OS's graphics routines to load a 256-colour BMP file, and then render it to the screen.


File Manager


Completing the read/write/delete set of workflows in the FAT12 driver has allowed me to create the File Manager app, which provides a UI for the user to list, copy, and delete files on the disk. The File Manager required integer-to-string routines for displaying 32bit numbers, which were interesting to implement.

Unlike many commercial operating systems, the File Manager also
shows the number of available file "slots" on disk.
This is useful because the disk can be considered "full" before
its data area has filled up, since on FAT12, the number of root
file entries on a disk is limited.


anisprt app


This very simple app shows how to animate a single sprite from a BMP frame strip.

Storks


Storks is a simple matching game; you control the titulary stork, trying to deliver the correct baby bundles to the forest tree inhabitants whose wishes are displayed as "wish bubbles" above their hollows.

I have developed Storks to showcase all capabilities of the game development infrastructure I added to Snowdrop OS: BMP support, sprites, sound, enhanced keyboard support, graphics mode text.

Text Editor


Similarly, support for file writing in the FAT12 driver has opened the door for the Text Editor. For the first time, files could be created on the disk from within Snowdrop OS!


No Snakes!


Adding in the serial port driver inspired me to make a small multiplayer game.

No Snakes! is a two-player game, played over the serial port. It follows a client-server model, whereby it runs in server mode on one computer and in client mode on the other. In client mode, the game sends the direction chosen by the player, and receives the current positions of each snake, as well as whether the game is over.

In server mode, the game enforces game rules, updating snake positions and determining the winner and the loser.

This is my first multiplayer game, and my approach was to test client and server separately as much as possible. Both client and server were required for testing towards the end, which is when I switched to using two older laptops.


Presenter


I had a guest lecture ahead of me, and decided to use Snowdrop OS to give my presentation. I thought that the students may find it more interesting that way, compared to seeing a run-of-the-mill PowerPoint slide show.

The Presenter app was relatively easy to create, using the text editor app as a starting point.


mousegui app


This 320x200 (mode X) graphical app tests the mouse driver. It initializes the mouse driver with a 320-wide and 200-tall bounding rectangle, which the driver uses to keep the pointer within the bounds of the screen automatically, moving it based on deltas (x and y) received from the PS/2 controller via hardware interrupt requests.

sndtest app


This app demonstrates how to interact with Snowdrop OS's sound driver, which produces sound over the IBM PC internal speaker.