http://sebastianmihai.com/snowdrop/ [back to main site] [ideo_snowd] Snowdrop OS - a homebrew operating system from scratch, in assembly language * Introduction * Binaries and Sources * Visuals * Organization * Apps * System Calls * Game Development * GUI Framework * BASIC * x86 Assembler * x86 Debugger * Development Log Introduction section Welcome to the pages of Snowdrop OS, my homebrew operating system project. [snowdrop-i] 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: * Boot loader is crammed into 512 bytes; it locates and loads the kernel * Snowdrop OS's kernel provides fundamental services and abstractions to applications * Graphics and GUI framework are the foundations needed to create graphical, mouse-driven applications * Snowdrop's x86 assembler can be used to create low-level applications directly inside Snowdrop OS * BASIC interpreter is great for creating high-level applications quickly * The x86 debugger can be used in conjunction with the assembler * Dynamic data structure libraries for working with linked lists, trees, BSTs, etc. * All applications games, text editor, file manager, tools, test applications 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 [snowdrop_m]