Carl
Projects

Things I'm building.

Personal projects spanning developer tools, retro-tech experiments, and ambient AI workflows. Most are open source. The ones with live demos let you poke at them in your browser.

Active 2026

6502 Simulator

A 6502 microcomputer with a VIC video chip and a real 6522 VIA timer — runs in your terminal and in your browser, same code.

6502 Simulator screenshot

A working 6502 microcomputer simulator on a path toward a teaching tool. CPU, RAM, ROM, VIC video chip, and a 6522 VIA peripheral wired to a memory-mapped bus with hardware-realistic chip-select decoding — demos written here are intended to transfer to real silicon unmodified. Built in Go on top of foxpro-go (a from-scratch homage to FoxPro for DOS) and 6502-netsim-go (a transistor-level Visual6502 port). Same source compiles as a TUI and as a WebAssembly app.

Go WebAssembly tcell 6502 Retro-tech
Active 2026

go6asm

A ca65-compatible 6502 cross-assembler, linker and static analyzer — runs in your browser, no install.

A from-scratch assembler for the NMOS 6502, deliberately a strict subset of cc65's ca65 syntax — and byte-identical to ca65/ld65 for that subset, checked by a differential fuzzer that diffs thousands of generated programs against the real toolchain on every run. It assembles, links to a target's memory map, and statically traces every path the CPU can take to flag mistakes (writing ROM, touching unmapped memory, a stray BRK) before the code ever runs. A progressive-disclosure mode lets a beginner write only instructions while it supplies the boilerplate, then shows exactly what it filled in. The same Go core runs as a CLI and as a WebAssembly playground — it's the assembler the 6502 Simulator's demos are written in.

Active 2026

Merlin Emulator

A faithful emulator of Merlin — The Electronic Wizard (Parker Brothers, 1978) — running the original TI MP3404 ROM on a from-scratch TMS1100 interpreter written in Go.

Merlin Emulator screenshot

Nothing here re-creates Merlin's six games. The 1978 program is executed one instruction at a time, and the light-show, the tones, and all six games emerge from running the real chip's code. The same pure-Go core runs three ways — a browser build (Go → WebAssembly, audio via an AudioWorklet), a CLI for tracing and debugging, and a dependency-free package anywhere Go runs. The interpreter is verified bit-for-bit against a C++ reference across 200,000 instructions.

Go WebAssembly TMS1100 Emulator Retro-tech
Active 2026

Merlin on the Commodore 64

A 6502 assembly TMS1100 interpreter that runs the original Merlin MP3404 ROM on a Commodore 64.

Merlin on the Commodore 64 screenshot

A target-port of the Merlin emulator idea: instead of rewriting Merlin's six games for the C64, the 6502 program emulates the TMS1100 well enough for the original ROM to run. The port is tested in lockstep against the trusted Go core by assembling the C64 program, running it in a neutral 6502 emulator, and comparing every TMS1100 instruction boundary. The result is intentionally honest about the tradeoff: real engine, real ROM, slower than the original toy on stock C64 speed.

6502 Commodore 64 TMS1100 Emulator Assembly
Active 2026

u64shell

A DOS-style TUI that mirrors a real Commodore 64 Ultimate's screen live and remote-controls it — in your terminal or your browser, from one codebase.

u64shell screenshot

Reconstructs the C64's display from device memory about once a second — text (hi-res, extended-background, and multicolor character modes), bitmap modes, hardware sprites, and the border — and composites it into a live Screen window, alongside a Text Screen, a Sprite Inspector, and a command window (RESET, TYPE, RUN, POKE, PEEK…). Built on foxpro-go over the u64ctl core. The same Go source runs as a terminal TUI (Unicode half-blocks) and as a WebAssembly app drawing real pixels on an HTML canvas; a small broker serializes device access across tools and proxies the calls, so the browser build has no CORS problem.

Go WebAssembly TUI Commodore 64 Retro-tech
Active 2026

u64ctl

A CLI, an MCP server, and a WebAssembly library for controlling an Ultimate 64 over its REST API.

The device core beneath u64shell: a typed operations layer with a separate render layer, so one set of logic drives every front-end. Read, write, and disassemble memory; assemble-and-run 6502 source (via go6asm); upload and run programs and cartridges — .prg, .crt, raw ROM .bin wrapped on the fly as Ultimax or standard 8K/16K carts, and .t64 tapes; inject keystrokes; and drive machine control (reset, reboot, pause, menu, power). An MCP server exposes the same operations to Claude, and a network-included WebAssembly build proves the core runs anywhere.

Go CLI MCP WebAssembly 6502 Commodore 64
Active 2026

Apple Intelligence Foundation Server

Local HTTP server that exposes Apple Intelligence on-device foundation models behind a simple API.

Lets any tool on your Mac talk to Apple Intelligence as if it were a hosted LLM endpoint — useful for automations, scripts, and editors that already speak HTTP+JSON. Keeps inference fully on-device.

Swift Apple Intelligence Local-first AI HTTP
Active 2026

Asciimator

Browser-based ASCII animation editor built around fast iteration, direct manipulation, and shareable output.

Asciimator screenshot

A direct-manipulation editor for ASCII animation that emphasizes immediacy: edit, scrub, share. Frame buffer, timeline, and export pipeline all designed to keep the loop between idea and result as short as possible.

Web app Editor Animation
Working 2025

Wordclock

A clock that tells time in words on an illuminated grid — half hardware, half software, all charm.

Wordclock screenshot

A typographic word clock — letters arranged in a fixed grid, lit selectively to spell out the current time as a phrase ("IT IS HALF PAST THREE"). The gallery shows physical builds and color schemes; the repo has the firmware and a browser-based simulator.

Hardware LEDs Web Typography
Active 2026

foxpro-go

A from-scratch Go TUI framework that channels FoxPro for DOS — windows, menus, drop shadows, drag-to-move.

The retro-DOS-flavored TUI library that powers 6502 Sim TUI and other tools. Built on tcell, with a wasm bridge that renders the cell grid to a browser canvas. Provides PixelContent overlays so windows can host pixel buffers (used by the 6502 sim for graphics-mode framebuffers).

Go TUI Library WebAssembly
Working 2026

Claude Usage TRMNL

E-ink dashboard for Claude Code usage limits, using a small local script and a TRMNL private plugin.

Claude Usage TRMNL screenshot

Pairs a tiny local script with a TRMNL private plugin to surface live Claude Code usage on an e-ink panel. The "ambient awareness without checking a tab" pattern, applied to AI-coding budget tracking.

Tinkering

Smaller things I've built.

Weekend builds, embedded experiments, and small standalone hacks — mostly MicroPython on ESP32-class boards, with a few retro-era pieces in the mix. Each one is a working repository with notes and photos.