Software

I’ve been coding my whole life. Here’s some different software projects I’ve released:

gvsong

I created a music engine for the Game Boy Advance, called gvsong. It is a chiptune synthesizer that uses sink to write music patterns.

Watch a demo video of it running in a GBA emulator.

gvsong

gvasm

In my quest to make Game Boy Advance homebrew games, I created an assembler specifically for coding in ARM/Thumb assembly.

It’s called gvasm. It supports pool literals, compile-time scripting, register renaming, and a bunch of other features!

gvasm

whisky

I spent a couple months searching through hundreds of thousands of functions to find the best hash functions with fewest operators.

The result is the whisky library.

These functions are useful for random number generation, hash tables, checksums, or procedural game development.

whisky

sink

Sink is a scripting language I’ve been working on for a while now. It’s a minimalistic garbage-collected language designed for embedding into larger programs, with support for a REPL ideal for debug consoles.

It is currently in beta, and I am working hard to reach version 1.0. I’m really happy with it and think it’s a great little language.

There is also an online demo that you can play with.

sink

polybooljs

The polybooljs library is the result of my research into polygon clipping algorithms. It can clip polygons against each other using boolean operations (union, intersection, xor, difference), and can handle coincident edges.

I updated and ported the library to TypeScript – it’s faster and uses ES modules:

polybooljs

sndfilter

I’ve been reimplementing sound effects in clean C99 code. It’s actually pretty hard to find easy to use libraries that do things like reverb, dynamic range compression, or equalization filters. Well, not anymore!

sndfilter on GitHub

sndfilter

midimap

The midimap program will intercept MIDI messages on Mac OSX, and manipulate them according to a script.

Some example use cases include: playing a chord when hitting a single key, mapping a sustain pedal to a key, stopping devices from sending reset commands, and printing out intercepted messages.

midimap

simple-js-synth

I built a basic three oscillator synthesizer using WebAudio, intended to be used as a simple drop-in synth for music experiments.

simple-js-synth

spline

Implementation of Catmull-Rom splines in C and JavaScript.

The library takes a list of points (2D, 3D, or 4D) and returns a smooth curve that passes through the points.

spline on GitHub

spline

nvqm

I put together a library for numeric, vector, quaternion, and matrix operations, with implementations in C99, JavaScript, TypeScript, and Sink:

nvqm on GitHub


Tools

I make random tools for my own use. You can check them out if you want, though they aren’t really intended for others to use.

For example, Time Sink is a simple web app that uses my scripting language sink to create one second looping GIFs.

Tools