Vintage Computer FestivalVCF West 2026live demo & talk
An AI writes INS8070 machine code for a 1983 educational computer
VECTOR GRAPHICS ON A 1983 MICROCOMPUTER
Claude (Anthropic) hand-writes INS8070 machine code that turns a Philips
MasterLab MC6400 (1983) into a real-time vector-graphics engine — rotating
3-D wireframes and a playable arcade shooter on an analog oscilloscope, driven by a home-made
R-2R DAC. Every program built and debugged on real hardware, all in under 1 KB.
A first: as far as we know, the first expansion-port peripheral —
and the first graphics — ever built for the MasterLab. A home-made R-2R DAC turns the
machine’s untouched expansion bus into an X-Y vector display.
The showcase: a fully interactive vector-arcade shooter —
turret, descending aliens, flashing WIN / lose — played from the console’s own
SA/SB buttons, with a per-wave difficulty ramp, all in 1 KB of RAM.
01THE MACHINE
Philips MasterLab MC6400 (1983, Hamburg) — the top of Philips’s “6000”
series and a serious “learn microprocessors” trainer. A National Semiconductor
INS8070 (SC/MP III), just 1 KB of SRAM (0x1000–0x13FF), a 4 KB
masked-ROM monitor, an 8-digit red LED, a hex keypad, three F-LEDs (F1/F2/F3) and two console
buttons (SA/SB) — and, unusually, a real expansion bus. Unlike its bytecode-interpreting
rivals it is programmed directly in INS8070 machine code, so it is genuinely fast:
~147,000 instructions/second.
The vector display (2026) — a home-made R-2R DAC on the expansion bus (three
74HC374 latches, double-buffered) turns two bytes into two analog voltages (X, Y) that drive an
oscilloscope in X-Y mode. The CPU streams only the endpoints of a wireframe; the beam
is the pen.
The home-made R-2R DAC on the MC6400 expansion bus: 74HC374 latches → two
analog axes → an X-Y scope — the first peripheral ever built for the MasterLab’s bus.
02SEEN IN ACTION
The full rig: the MC6400 (right) with the R-2R DAC on its expansion bus, driving a
Tektronix 2335 analog scope (left) — a solid, rotating 3-D cube, computed live in
under 1 KB.
Why it’s hard: 1 KB of RAM, no floating
point, no compiler — every rotation, projection and line is fixed-point INS8070 machine code
hand-placed within a kilobyte, streamed to the scope fast enough to beat the phosphor’s fade.
▶ Try it at the table! The MC6400 + scope are running right
here — watch the cube, torus and sphere tumble, then play the vector shooter with the SA/SB
buttons.
03THE TRICK — MAKING A STEP-DAC DRAW LINES
A digital DAC can only step between voltages — so a plain DAC drew only a scatter of
bright dots (the vertices). The beam snapped between them faster than the phosphor could light,
and the connecting lines were simply invisible. The fix is not more code — it is one
resistor and one capacitor per axis:
stream only VERTICES: E000 ← X thenE001 ← commit (X,Y on one clock edge)
plain step-DAC → beam snaps between vertices, faster than the phosphor lights → only DOTS
add a matched RC per axis → each step becomes a ramp→ the beam is dragged vertex→vertex →LINES
The matched RC low-pass (“slew-limit”) turns every instantaneous jump into a smooth
ramp, so the beam is dragged from vertex to vertex and actually draws the edge; double-buffering
the DAC (X and Y committed on the same edge) makes that ramp a straight diagonal instead of an L-shaped
jog. With the RC in place the dots become solid, continuous wireframes — an analog fix for
a digital-graphics problem. (An analog CRT scope is essential — DSOs render X-Y
vectors poorly.)
04THE PROGRAMS
CUBE · TORUS · SPHERE — rotating 3-D wireframes,
each drawn as a single continuous stroke (a retrace-minimising path for the cube; an
Eulerian circuit of the mesh for the torus and sphere), so the pen never lifts. Fixed-point
rotation uses the INS8070’s hardware 16-bit MPY (and DIV for the cube’s
perspective). About 0.7 KB each.
★ VECTOR SHOOTER — a wholly
original, playable arcade game: a turret fires at a descending grid of hexagonal aliens;
clear the wave for a flashing vector “WIN”, get overrun for a big
“X”, then the next wave drops in. Played from the hex keypad or the console
SA/SB buttons (both = fire); F1/F2/F3 show an aliens-remaining bar; selectable
3/6/9 aliens × speed, with a per-wave difficulty ramp — all in 1 KB.
CubeTorusSphere
▶ Watch it live.
A YouTube demo of the MC6400 drawing solid 3-D vector wireframes on the Tektronix 2335. youtu.be/bAo9eb0MnI4
05HOW CLAUDE BUILT IT
Hand-wrote raw INS8070 machine code — the MasterLab is programmed directly in
machine language; no compiler, no OS.
Built a from-scratch Python toolchain: asm8070.py (a two-pass
INS8070 assembler), ins8070.py (a cycle-accurate simulator
with a virtual DAC + keypad, validated against the real monitor ROM), and
render.py (an X-Y scope renderer that models the analog beam →
PNG/GIF) — so a program is seen before any hardware.
Diagnosed “dots, not lines” as an analog problem, not a software one —
deriving the RC slew-limit fix.
Modeled the INS8070 gotchas that bite: A is the low byte of EA (so
LD A clobbers a 16-bit result), and unsigned compares via the
carry flag (branches only test A).
Verified in the simulator, then on a real MC6400 + Tektronix 2335 — iterating
with Michael over photos of the live scope.
Learned the machine from its 1983 German manual (which we translated to English) and used
Thorsten Brehm’s MasterLab emulator as a reference oracle.
Beyond the demos: the interactive vector shooter on the 2335 — turret, a
bullet in flight, and a wave of hexagonal aliens, played from the MC6400’s SA/SB buttons.