[back to main site]
Snowdrop OS - a homebrew operating system from scratch, in assembly language
The following downloads provide both bootable disk images, as well as all tools and source code needed to build the disk images yourself.

IMG floppy disk image (bootable) - write this bootable image to a real 1.44Mb floppy disk, or mount it as a virtual floppy drive in a virtual machine such as Bochs or VMWare

ISO CD-ROM disk image (bootable) - write this bootable image to a real CD-ROM, or mount it as a virtual drive in a virtual machine such as Bochs or VMWare

source code package - contains everything needed to build Snowdrop OS. Grab this if you wish to inspect the boot loader, kernel, or apps source code, or if you wish to modify Snowdrop OS.

Tested under Windows XP 32bit, Windows 98, Windows 95. All tools required to build Snowdrop OS are included, and no configuration is required. Just download, unzip anywhere, and run "make.bat". See the Building page for more information.

Additionally, the floppy disk image above can be used to create a bootable USB drive. For more information, check the README.txt file in the project root directory.


Requirements for building Snowdrop OS
Works on: Windows XP 32bit, Windows 98, Windows 95
Doesn't work on: Windows 7 64bit

Build process
Building the Snowdrop OS is simple - run the "make.bat" file in the project's root directory, and then locate the generated Snowdrop OS disk images inside the "disk" directory.

The following are created:
  • "output" directory - will contain all generated binaries, such as kernel, apps, and boot loader, as well as static files, such as the kernel configuration file
  • "disk" directory - will contain Snowdrop OS disk images, such as the floppy disk image and the CD-ROM image

Warning: if you have Cygwin installed, the generation of the CD-ROM image may fail (however, the floppy image creation should still succeed). The reason for this is that cygwin1.dll is included with the cdrtools (which create the CD-ROM image from the floppy image) so that it works on systems without Cygwin. The provided cygwin1.dll may conflict with the installed Cygwin.

Source code structure

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

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.

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.

Extending Snowdrop OS

You are encouraged to modify and extend Snowdrop OS with your own system calls (provided by the kernel), or by creating apps for it. I used the Nasm assembler for all the development, but you can use whichever one you prefer.

To extend the Snowdrop kernel:
  • implement your service routine in a separate source file
  • include your source file at the bottom of src\kernel\kernel.asm
  • inspect the kernel_init_interrupts procedure in src\kernel\kernel.asm to see how each interrupt handler is registered, and register your own

Writing your own Snowdrop OS app

Writing your own app targeting Snowdrop OS is very similar to writing a COM program in DOS. The main exception is that you cannot rely on int 21h, which is DOS-specific.

Take a look at the source code of the "hello" app in src\apps\hello.asm. It is the most bare-bones program which fully respects the Snowdrop OS app contract.

Likewise, the "hellogui" app in src\apps\hellogui.asm shows you how to create graphical, mouse-driven applications using Snowdrop OS's GUI framework.

Then take a look at build\assemble.bat to see how to assemble your program using Nasm. The binary has to have a .APP extension in order to be recognized as an app.

Make your own program bootable
You can also decide to have your app run automatically upon booting by specifying its name in the SNOWDROP.CFG kernel configuration file.