A web-based IDE for writing TRS-80 assembly language programs, with a built-in emulator, debugger, and paint program.
An interpreter for the Forth programming language, in Z80 assembly.
A virtual TRS-80 machine online, with a personal library of tapes and floppies.
A web app to decode and explore damaged TRS-80 program cassettes.
A tablet that does nothing but run ShaderToy shaders. Brad Grantham and I wrote an FPGA-based RISC-V MIMD GPU and a shader compiler. Our first failed project!
A emulator for the CP/M operating system that proxies file requests to the host operating system.
A new ROM for the Apple IIe that compiles BASIC instead of interpreting it. Runs about 10× faster than the original.
A Raspberry Pi-based slideshow program to display our 25,000 family photos on a kitchen monitor, with Ken Burns effects, crossfades, photo rotation, rating, and email. Also controls Sonos systems and displays the name of the playing song.
A tablet that does nothing but run mid-80's SGI demos. Brad Grantham and I wrote the graphics pipeline, including an FPGA-based graphics processor.
A Java-based typesetting program to print my great-uncle's memoirs, including support for fine typography, ligatures, kerning, automatic hyphenation, table of contents, index, photos, cross-references, footnotes, and right-to-left text.
A photographer's foldable LED ring light built out of acrylic and LED strips. This gives nice even lighting for headshots.
A surface-mount version of the Z80 computer we built 20 years ago. Now runs CP/M! Uses an ARM for disk and serial I/O and a Propeller for VGA and sound output.
A system to use a 2D laser cutter as a lathe. A stepper motor holds a wooden dowel horizontally and turns it as the laser cuts outlines from different points of view. Uses a web-based printer driver.
A laser-cut pendulum clock made out of acrylic, with a web-based simulator. A python program computes the shapes of each tooth as well as the size and position of all gears.
A ray-tracer in assembly for the IBM 1401, a decimal variable-word-length machine from 1959. Prints the result to a line printer. Takes 30 minutes to draw two spheres!
A cocktail-style arcade cabinet for my living room built into an IKEA coffee table, using MAME and a Raspberry Pi. Uses a custom-built menu to choose the games.
A web-based Turbo Pascal compiler. I wrote this so that I could run my graphics programs from 1989. Includes a mini-IDE in the style of Turbo Pascal 3.0.
A TRS-80 Model III emulator written in Go that uses a web page for its interface. Supports cassette and floppy (read-only).
I printed a book of my writings, which involved processing all the blog posts and stories into PDF format and generating an O'Reilly-style engraving for the cover.
A Python program that generates a pattern to laser cut a jigsaw puzzle of a picture of my son.
I taped a key chain (spy) camera to a model rocket and got some good footage of lift-off, despite it getting stuck in a tree (twice).
Learn poems by erasing one word at a time. This is an online version of what a poetry teacher did on a whiteboard.
A Java program to generate the cover for a technical book I wanted to print. Uses the gear shapes from my pendulum clock.
A 2D plotter that uses a magnifying glass and the sun's light to burn a pattern into a piece of wood. The software compensates for the Earth's rotation during the burn!
I modified the Java compiler to support Python-style list comprehensions.
An algorithm for combining bracketed pictures to form a single image that looks like what the eye sees.
A visual representation of crime in San Francisco, based on data scraped from public sources and overlaid on an old stitched-together map.
A Markov Chain program with a twist: it smoothly interpolates between different source materials.
A program to evolve walking robots as simple spring-mass systems. It's crazy how evolution will just cheat whenever it can.
Brad Grantham and I designed and built a Z80 computer using home-made printed circuit boards, a crappy drawing program, a custom logic analyzer, and a co-processor that ran 20 times faster than the CPU.
A design for a low-end graphics co-processing chip, along with an assembler and a simulator.
One of the world’s first real-time ray tracers, on UNC’s Pixel-Planes graphics computer, fitting in 208 bits of memory.
A bowling strike animation inspired by the cover of The RenderMan Companion book.
Brad Grantham and I ported the recently-open-sourced BSD UNIX to the 68020-based Macintosh II. This later became the NetBSD/Mac port.
Brad Grantham and I challenged each other to write the shortest ASCII ray tracer. You learn a lot about C writing these.
My early computer graphics videos, filmed on my dad’s Super-8 camera.