1984 · Mastertronic

About this page

This minisite was contributed by air. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/squirm with me to Gold.

Footprint

Every byte of the C64's 64 KB, one pixel each, 512 to a row. Lit pixels are what this game is: its code, graphics, level data, sound, text, tables and variables, exactly where they sit in memory. Dim areas are screen and working memory; dark is unused.

Status

Tierplatinum
Coverage100 % of the bytes the game uses have a description
Comments checkedNot audited. No audit has checked every comment, and the last sample of 60 comments had 6 wrong, so between 5 and 20 % of the listing’s comments are likely wrong. How listings are checked
Build analysedMastertronic's original cassette of 1984 (1C 0003), a TAP of version 1 from the Ultimate Tape Archive on the Internet Archive, uta_Squirm_1984_Mastertronic_9165, MD5 3c85ddc4f4c605755f15d552e3e53457; loaded with the KERNAL's own tape routines (orientation.md)
Copyagent-draft
Toolsemulator: VICE 3.10, the vice-mcp release v3.14.0, v3.14.0-linux-x86_64-gui.zip, disassembler: regenerator2000 0.9.20 (cargo install --locked from crates.io), host: Linux x86_64, Ubuntu 24.04, no display (cloud container), node: 22
Modelclaude-opus-5-5[1m]
Kit version0.0.268

How the listing was checked

Every step that measured the Source tab’s comments or made them more accurate, in the order it happened, with the models that did it. Accuracy of the Source explains each step and what the row above makes of them.

StepByWhat it foundOf the listing
Researchclaude-opus-5-5[1m]Looked the game up online (its manual, reviews or wiki pages) before reading its code.
Annotationclaude-opus-5-5[1m]Wrote the listing’s comments. 100 % of the program is described, in 338 comments.
Sample 1claude-opus-5-5[1m]6 of 60 comments wrong, so between 5 and 20 % of the listing is likely wrong. All 6 were then corrected.
60 of the listing's 337 comments, checked by a fresh agent that wrote none of them; all six wrong in a detail, none in the main claim
Port checkclaude-opus-5-5[1m]Checked a page’s port or widget against the game; how many comments it corrected was not recorded.
the page's sound players, run against the game's own sound code in the kit's 6502 for every button, each write to the sound chip compared jiffy by jiffy (test_sound.js)
Port checkclaude-opus-5-5[1m]Checked a page’s port or widget against the game; how many comments it corrected was not recorded.
the page's machine, which runs the game's own code for every widget: the first frame of play it draws compared pixel by pixel with VICE's (test_frame.js)
Play tabclaude-opus-5-5[1m]Ported the whole game to JavaScript for the Play tab and corrected 0 comments it showed wrong.
the whole game ported routine by routine and held in lockstep with the game's own code from the hand-over; the port showed no comment wrong

likely wrong the sample’s range corrected right, or likely right not yet measured

Contributors

Other places to love this game

What the game does, and where we found it

Read this before annotating code. What the game is documented to do, with verification status against the binary. Statuses: open (documented, not found yet), traced (in the code, could not be exercised; say what was tried), confirmed (in the code, consistent with the emulator), live (observed directly), differs (the code does something else). "Absent" is not a status.

Sources:

Features

FeatureStatusWhere
A maze on one screen, seen from above; a new maze each levellivethree maze screens at $16D2, $1A1A, $1D62, chosen in turn by $2682 ($390E)
The player moves like Pac-Man: keeps going until the stick turns it or a wall stops itlive$306E with $3014/$2FF9
Joystick in port 1liveevery read is $DC01
Keyboard controlliveno routine of its own: $DC01 reads keyboard row 7 as well as port 1, so 1, ←, CTRL, 2 and SPACE act as up, down, left, right and fire ($306E); each moved the player, and SPACE started a game
The Queen Squirm lays eggs; collect them for 10 points eachlivethe worm at $2648 and the one at $2676 leave an egg ($46) where their tail was; an egg under the player adds 1 to the tens digit ($3C04)
255 eggs complete a level (the review); 250 or 200 (MobyGames)live (255)$3C09: the count $2690 reaching $FF; with the count poked to 254, one egg ended the level
A rising tone with each eggconfirmed$3C0F writes the egg count to voice 1's pitch
Guard squirms; touching a squirm or the queen costs one of three livesconfirmed$3C2C: the head $43 or a body $44 under the player
Guards eat the eggsconfirmeda worm may step onto an egg ($3C93), and the guards' tails leave a space
Guards respawn at random if eaten by the queendiffersa worm whose four tries in one step are all blocked has its head put back on its own start cell ($3377); nothing is random, and no worm eats another
Exits at each end of the maze lead to the other sideliveno code of its own: positions are screen addresses, so a step left from column 0 lands on column 39 of the row above ($304E), and the mazes leave those cells open; left from the start cell (12, 0) arrived at (11, 39)
Bonus run after the eggs: limited time, eat the squirms for points, no going back over your own pathlive$3780: the timer counts 900 down once an interrupt, 901 interrupts in all; bodies 100, heads 200, eggs 10; the player leaves character $00, a wall, behind it
From level 2, bonus treasures worth a random 10 or 100confirmed$39DF; the value depends on $2684 at the moment of collection, which steps 1, 2, 3 every pass: nothing, 10 or 100
A title theme that "almost feels like it plays at random"confirmed$3BB2: 100 steps of two tables on voices 1 and 2, high byte of the pitch only
Glow worm; lights go out (MobyGames)differsnot in this version: nothing darkens the maze. Its colour RAM is written in play only by colour_maze ($35E8) as a level starts, the walls' colours $D022/$D023 only by new_game ($3B5C) and the death flash ($3AD0-$3AF2), and the five worms are the only creatures ($2648-$267F). The C16 review names both as additions of that version
Two players taking turns (MobyGames)differsone player only: the score is one row of digits on the top line ($0414), the lives one byte ($2685, written only at $3B9D and $3C34), and the title starts one game on fire
Fire for a second speed (the C16 review)differsfire alone stops the player ($3060); the game's speed is step_delay, which only the level cycle changes ($3A72)
U and B keys to pick the level (the C16 review)differsnot in this version: the only key read through the KERNAL is F1 ($C5, read once at $3C67), and $DC01 sees only keyboard row 7, which holds neither U nor B; every game starts on level 1 ($3BEB)
A life for each level completed (the C16 review)differsnot in this version: lives are set to 3 at $3B9D and only lowered ($3C34); the references search finds no other write

Beyond the documentation

Open questions

None that the code leaves open. The rows marked differs come from descriptions of the Commodore 16 conversion or from MobyGames' description, which mixes the two versions.

The symbol map for this game is symbols.json; the listing behind the Source tab is listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.