Projects
Personal projects
The projects below are personal side projects, built in my free time and separate from any professional or enterprise work.
Full-stack bakery shop web application.
Automated bulk email sender built in Unreal Engine.
House renting app built with React Native.
Django backend for an AI-powered desk assistant.
Ride-hailing Android application.
Football statistics web application built with Flask.
TypeScript backend API for the Gravestellene platform.
Vite + TypeScript frontend for the Gravestellene platform.
AI assistant application built with TypeScript.
Roku channel authentication demo in BrightScript.
Multiplayer web-based Snake game with a backend.
TypeScript SaaS application with frontend and backend.
Virtual appointments using the Twilio Video API.
White-label JavaScript code obfuscation tool.
Admin dashboard template built with React and Tailwind.
Play the accordion online!
Open source notes app
Retro game emulator
Web-based Sokoban
Your new favorite theme
An MVC framework from scratch
A front-end design toolkit
A terminal-based Snake
Socket.io chat app
A schema-based form system
Software
All the software on my site is freeware. Select a category to download what you are looking for.
Games

Bomberman played from a first-person perspective.

An absolutely tiny Windows version of the classic game for 2 to 4 players.

Guide your chicken safely to the landing pad, avoiding dogs, space mines, and rockets launched by homicidal worms.

Cosmo the dragon is rushing through space to rescue his kidnapped son.

A remake of the C64 arcade puzzle game.

Use your control of the four elements to mess around with the poor little fellow stuck on the island.

Try to escape the horror that is the Dimansion.

Just a normal day at the Lab Lab, the new intern is mistaken for Dr. D.N. Turn.

Help a flat-earther teen build a rocket to prove to his teacher that the Earth really is (or isn't) flat.

Short and funny point-and-click adventure inspired by the Screen Antics: Johnny Castaway screen saver.

My version of the classic arcade game.

A princess wakes up in the middle of the night feeling peckish. Will she be able to get a bite to eat?

Infiltrate Spectrum Enterprises as Agent N in this Sierra AGI style adventure.

Solve the toilet paper shortage as the world is suffering through the NOVID-20 pandemic.

A two-player shoot-em-up.

Help a cute little droid save his ship and escape the gravitational pull of a black hole.

My version of the classic puzzle game.
Patches for old DOS games
I like to play around with old DOS games, especially through DOSBox, and sometimes that means fixing bugs in the games themselves.

Fixes a crash at the barfight in 1878.

Infinite lives trainer, with versions for the PC booter and the raw disk image.

Disables the part of the copy protection routine that misfires on NT-based systems.

Fixes a freeze in the intro when digitised sound is enabled.

A wrapper program that fixes the DOSBox INT16 keystroke freeze at the intro screen.

A patch that lets PC Paint run properly in DOSBox.
Tools
Sometimes there is no tool that fits my needs, so I create my own. These are the small utilities I have built and released.
Polls the battery status of your laptop and warns you when it reaches a critical level.
Shows how long your system has been running since the last reboot.
Generates or applies binary patch files, and can even produce self-executing versions.
A tiny note and reminder tool that sits in your taskbar.
Strips trailing spaces from text you copy to the clipboard.
Reroutes file open requests in DOS/DOSBox, for example to switch configuration files.
A 16-bit Windows utility to run an application and power down Windows when it quits.
Changes the default MIDI output device on Windows Vista and later, for use with an external synth.
PC Paint 3.1
After patching version 3.1 of PC Paint to run inside DOSBox, I was allowed to distribute the original program for free.

The original bitmap editor, free to download.
DOS code
Yeah, I know. DOS programming is dead. I used to do a lot of that, though, and many people still do. It'd be a shame to let all my old content go to waste if there's still some people who may find it useful.
Graphics code
Source code demonstrating how to access graphics APIs, make special effects, handle graphics file formats, draw primitives and apply techniques often used in game programming.
Sound code
Source code for the Sound Blaster and other sound cards, from DSP commands and autodetection to DMA mixing, MIDI, FM music and .WAV playback.
Many people have requested a list of the commands for the DSP chip on the Sound Blaster, so here it is.
Source code to detect the base port, DMA channel and IRQ setting of the Sound Blaster family.
Note: This has been expanded to detect the 16bit DMA channel on SB16 and above.
Source code to mix wave files using the Sound Blaster's auto-init DMA facility. Four wave files are included.
Note: This won't work on the original Sound Blaster version 1.0 as it doesn't support auto-init DMA at all.
Source code to play an audio CD using MSCDEX.
Source code to play MIDI music using either an FM sound card such as the AdLib and SoundBlaster cards or a General MIDI (GM) device, such as the Roland cards or the Gravis UltraSound using MegaEM.
Note: The routines have been updated to include a volume control.
Source code to play music using an FM sound card such as the AdLib and SoundBlaster cards.
Note: If you use MicroSoft C, please read the section "Delay routine" above.
Source code that plays a wave file through the Sound Blaster. If you don't need to mix multiple samples, this is the simpler option.
Pascal source code to load and play a .WAV sound file. This will play any standard 8/16 bit uncompressed .WAV files.
Note: This has been expanded to support other IRQ and DMA settings. A small error in the header definition prevented some waves from playing. Thanks to Ed Roberts for telling me.
Source code to load and play a .WAV sound file. This will play standard 8 bit mono uncompressed .WAV files of any length and sample rate.
Source code to record a .WAV sound file. This will record standard 11025Hz, mono, 8bit, uncompressed .WAV files.
Note: A small bug that caused problems when recording more than one wave file after another has been fixed. Thanks to Ed Roberts for telling me.
Miscellaneous code
Source code covering timers, interrupts, serial communication, XMS memory and other useful DOS programming subjects.
A drop-in Turbo Pascal CRT unit without the Pentium II 'Divide by zero' bug.
MilliDelay and MicroDelay routines for C and Pascal.
A unit that enables direct use of XMS (extended) memory in DOS.
Traps cursor key presses and releases for continuous player movement.
Shows how to read information from the mouse.
Sends and receives data through a serial (COM) port.
Intercepts and speeds up the system timer.
Pixel Art
I'm hoping to practice and improve my pixel art skills. To that end, I'm aiming to do at least one of the Pixel Dailies a week, assuming there is a theme that inspires me. I'm not a true artist by any stretch of the imagination, and quality may vary wildly. Consider these experiments and exercises.
My pixel art experiments and exercises.