Skip to main content
Articles / 2026

2026

35 articles published in 2026

February (15)

Anatomy of a Retro BIOS

Designing firmware for emulated retro computers—reset vectors, service calls, UART I/O, toolchains, and the boot theatre that makes it feel real.

Deep Dive: Audio Bus Architecture

Centralizing modem, line, backend, and peripheral audio in a single bus system, after a demo where the volume knob only worked on half the sounds.

Deep Dive: Building a Canada Goose Simulator

A deadpan text adventure about mild chaos, built on a time budget: 79 tests, procedural honk audio, and a migration ending instead of a game over screen.

Deep Dive: Audio Sonification for Code Visualization

Mapping code history onto sixteen oscillators: why a harmonic series turned to mud, how gain has to follow perception, and the double-ramp bug behind the pulsing.

Deep Dive: Custom Canvas Charts for 30fps Animation

Chart.js redraws the full scene on every update, which is right for a dashboard and wrong for playback. Replacing it with a Canvas 2D renderer.

Deep Dive: Balancing a Goose Game

The iteration that turned a text adventure into something playable: balance tuning, achievement scaffolding, and the 1081-line manual that made it legible.

Assemblers, Memory Maps, and Madness

Building cross-assemblers for retro CPUs in Rust, migrating to Pest parsers, and discovering why load addresses matter more than you think.

Deep Dive: Simulating DATAPAC, Canada's Forgotten Internet

Rebuilding the DATAPAC PAD experience in code: the command loop, X.25 NUAs, and five period-authentic hosts behind a 300-baud prompt.

Deep Dive: Lazy Loading 42 Backends with Dynamic Imports

Shrinking the emulator's main bundle from 1.1MB to 104KB by lazy-loading backends, and hiding the fetch inside the dial tone.

Deep Dive: Worker Heartbeats and Job Recovery

JetStream redelivered the message and the work was still lost. Moving job ownership out of the queue and into the database.

Inside Five CPU Emulators

Five classic CPU cores in Rust, compiled to WebAssembly: 8008, 8080, 8088, Z80, and 6502, and the edge cases that keep emulation honest.

Video Chips and Serial Streams: Rendering C64 Graphics Over a Modem

Emulating the VIC-II's text mode and forwarding its screen memory as ANSI escape sequences over a serial connection.

Serving Gopherspace from a Rust Backend

Building a Gopher server that serves RFC 1436 content through a modern API layer, so the emulator's BBS has something to browse.

Deep Dive: The Microservices Migration

A BBS emulator that outgrew localStorage: gRPC services, NATS messaging, a gateway, and the question of whether any of it was necessary.

Server-Backed Backends and Peripherals Go Physical

Migrating backends to server APIs with NATS pub/sub, adding microservices, and building the peripheral slot system alongside the Canada Goose game.

January (20)

Identity, SEO, and a Lot of Polish

Identity got real: guest sessions, passkeys, and a server‑backed auth surface, plus gopher content routing, Z‑Machine version wiring, and a formatting sweep.

Building a Code Evolution Analyzer in a Weekend

A quick script turned into two days of yak-shaving through collection speed, chart performance, and an audio bug that took hours to find and one line to fix.

Deep Dive: Passkey Authentication for a Retro BBS

Passkeys in a 300‑baud world: the smallest WebAuthn flow, the server state it requires, and how I kept it in tune with emulator.ca's identity model.

CC-40 Completion and IVR Launch

Shipping the TI CC-40 backend with authentic CALL commands and audio, plus a full IVR phone tree system.

Storage Peripherals and Audio Realism

Floppy, hard drive, and cassette peripherals with Kansas City Standard encoding, plus a peripheral audio bus that makes the machine feel physical.

Deep Dive: Kansas City Standard Cassette Storage

Building a Kansas City Standard cassette peripheral: FSK at 2400/1200 Hz, tape transport simulation, and why saving 8 KB takes five minutes.

Deployment Prep and Backend Growth

Kubernetes/K3s deployment configs, CI/CD scaffolding, schema-driven API generation, and the Star Trek BASIC backend.

Three Languages, One Weekend (Sort Of)

Building BASIC, Forth, and Scheme interpreters in Rust, running them in browser workers, and what the contrast between them revealed.

The Big web/ Move and Parser Migrations

Moving the web app under web/, migrating three parsers to Pest and Pratt, and getting the Z-Machine opcode engine executing.

Deep Dive: CTS Flow Control in the Serial/Modem System

Why you can't just shovel bytes through a virtual modem: RTS/CTS backpressure, buffer gates, and the timing budget that makes dial-up feel like dial-up.

Deep Dive: The Z-Machine Interpreter

Building a Z-Machine transpiler in Rust: opcode decoding, Z-strings, branch offsets, and the constraints that make Infocom's bytecode tick.

Z-Machine Foundations and Storage Sync

Z-Machine decoder work, text handling, and SAVE/RESTORE, plus content-addressable storage with S3 sync.

The Dungeon Gets Real

Turning the dungeon crawler demo into a persistent roguelike: progression gates, deterministic daily seeds, and meta-unlocks across five pull requests.

Emulation Milestones and TypeScript Migration

Intel 8088 demos, Zig-based 6502 experiments, and migrating the frontend to TypeScript for better type safety.

Deep Dive: PETSCII and the VIC-II Text Adapter

Translating PETSCII screen memory into ANSI terminal output: character maps, colour approximation, and the minimal contract a terminal-based VIC‑II can keep.

Big Repo Restructure and Backend Migration

Splitting the repository into cores, languages, assemblers, and BIOS so the directory layout matches the dependency graph.

Build System Groundwork and Modem Plumbing

Making the WASM build honest about its dependencies, loading backends on dial, and giving the modem one source of truth for pacing.

Deep Dive: Bell 212A and V.32bis Handshakes

Simulating Bell 212A and V.32bis handshakes: phase modulation, training sweeps, and why the negotiation audio has the shape it does.

Deep Dive: Bell 103 Audio Modem and FSK Implementation

Implementing the 1962 modem standard behind 300 baud dialup: FSK modulation, Goertzel demodulation, and the two-band split that makes full duplex work.

A Small Day That Mattered

Nine small bugs in the CRT, modem, and BBS paths, cleared before they had a chance to compound.