~/wiseowl/articles

Articles

Long-form technical writing. Each article aims to be the definitive resource on its topic — not a tutorial, but a complete explanation of how something actually works.

12 articles

smalltalk-from-scratch · Part 1 smalltalklanguage-designretrocomputing DRAFT
The Object at the End of the Universe

Smalltalk-80's object model is the most consistent in computing history. Understanding it — metaclasses, live images, and all — is the first step toward building one from scratch.

smalltalk-from-scratch · Part 2 smalltalklanguage-designcompiler DRAFT
The Compiler That Couldn't Run Its Own Output

To build a Smalltalk-80 VM you need a compiler. But Smalltalk bytecode is useless without a running Smalltalk. The escape: a JSON intermediate representation and an empirically-discovered grammar.

smalltalk-from-scratch · Part 3 smalltalklanguage-designvirtual-machine DRAFT
Building a Universe from a Blueprint

The cold-start loader reads a JSON description of every Smalltalk class and builds a complete, correctly-linked heap from scratch. The garbage collector tells you when you got it wrong.

smalltalk-from-scratch · Part 4 smalltalklanguage-designinterpreter DRAFT
The Machine That Runs the Machine

The Smalltalk-80 bytecode interpreter: execution contexts, method lookup through the metaclass chain, non-local block returns, and the BlockClosure bug that took weeks to find.

smalltalk-from-scratch · Part 5 smalltalklanguage-designbootstrap DRAFT
The Ghost in the Source File

The Smalltalk-80 file-out is not a complete description of a running system. Some globals only ever existed interactively — they're not in any source file, but the code that uses them was written assuming they exist.

smalltalk-from-scratch · Part 6 smalltalklanguage-designgraphics DRAFT
First Pixels

Getting a Smalltalk-80 system to display something requires implementing BitBlt, the 1980 graphics primitive at the foundation of everything visible. Then saving the live heap so you never have to do cold start again.

smalltalk-from-scratch · Part 7 smalltalklanguage-designgraphics DRAFT
Forty Years of BitBlt

The decision to replace Smalltalk-80's 1980 display model with GPU-accelerated rendering: deleting Form, BitBlt, and Pen from the codebase and building Wise Owl Smalltalk on SDL2 and SkiaSharp.

apple-panic-series · Part 1 apple-ii6502copy-protection
The Disk That Couldn't Be Copied
intermediate

How the Disk II's radical hardware design made Apple II copy protection possible — and what a flux-level disk image reveals about a 1981 floppy that defeated nearly every copy tool of its era.

apple-panic-series · Part 2 apple-ii6502copy-protection
Reading Code That Lies
advanced

Disassembling the Apple Panic boot loader reveals self-modifying code, a mathematically elegant GCR table corruption, a custom post-decode permutation, and a per-track marker scheme that makes the disk illegible unless you already know the key.

apple-panic-series · Part 3 apple-ii6502copy-protection
The Bug Was in Our Own Code
advanced

Sector 1 fails its checksum every time. Three theories, each plausible, each wrong. The real cause turns out to be a fundamental property of how WOZ files represent circular disk tracks — and it was in our own bit-stream reader the whole time.

apple-panic-series · Part 4 apple-ii6502copy-protection
Forty-Five Kilobytes
intermediate

What a recursive-descent disassembler finds in 27KB of 1981 Apple II game code: an XOR sprite engine, speaker timing loops, enemy AI state machines with three behavioral trees, BCD scoring, 104 subroutines, and a memory layout where every byte has a reason.

apple-panic-series · Part 5 apple-ii6502copy-protection
nibbler: A WOZ Disk Analysis Toolkit
intermediate

Every nibbler command demonstrated against Apple Panic — actual outputs, what each line means, and how to read the results. The reference guide for analysing a copy-protected Apple II WOZ disk image from first scan to disassembled source.