1986 · Micro Power
The copy is a single program file of 29,175 bytes. It unpacks itself and starts the game straight into play, with no title screen, menu, or trainer ($484D). Its memory still holds the original release's loading picture ($0400) and a small loader routine that printed "PLEASE WAIT -- STILL LOADING" ($7F00).
The steward later supplied the original disk.10 Its boot program shows a title screen, plays a title tune, offers to load a saved position, and then loads the game in three parts. Stopped as it hands over to the game at $484D, the disk's memory matches the program file in every byte the listing holds, apart from zero page and a scratch area at $FF70, which hold whatever each loader left there.

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.
| What | Bytes | Of 64 KB |
|---|---|---|
| Program | 58,309 | 89.0 % |
| Code | 18,873 | 28.8 % |
| Graphics | 13,133 | 20.0 % |
| Level data | 11,385 | 17.4 % |
| Sound | 4,387 | 6.7 % |
| Text | 1,944 | 3.0 % |
| Tables | 6,767 | 10.3 % |
| Variables | 1,820 | 2.8 % |
| Screen, bitmap, colour, stack, I/O | 5,504 | 8.4 % |
| ROM the game runs under | 1,328 | 2.0 % |
| Unused | 395 | 0.6 % |
| Tier | silver (claimed) |
|---|---|
| Coverage | 100 % of the bytes the game uses have a description |
| Build analysed | single packed program file, 29,175 bytes, SHA-256 8d143c7ac59882fe54844aa41d9996679e35bb100932e80f851191a3afb889bb |
| Copy | agent-draft |
| Tools | emulator: release v3.13.1, v3.13.1-linux-x86_64-gui.zip (vice-mcp), disassembler: regenerator2000 0.9.20, host: Linux 6.18 (Ubuntu 24.04 cloud container, no display), x86_64 Intel Xeon, browser: Chromium via Playwright 1.56.1, headless |
| Model | claude-opus-5-5 (Claude Code, lead and seven annotation subagents) |
| Kit version | 0.0.44 |
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:
:, /, RETURN, U, P, I, C, E, H, F0) are for the BBC Micro version and do not match the C64's reader at $8F3C; the C64 keys below are read from that code.reference/splinx-programmer.png).| Feature | Status | Where |
|---|---|---|
| Joystick in control port 2: left, right, up, down, fire | confirmed (left, right, fire live) | $8F3C |
Keys Z left, X right, ; up, / down, RETURN jump | traced | $8FD5-$9013 |
| F1 moves the pocket selector | live | $A530 |
| F3 puts an item in a pocket or drops a marker, or takes one out | confirmed (MARKER 4 shown live) | $A575, $A60C |
| F5 picks up the object in front, or uses the held item | traced | $A929, $BACC |
| F7 with a direction throws the held item | traced | $A7D7 |
| S opens the Splinx Programmer | live | $AF58 |
| A scrolling cavern map | live | $8C32, map $E000 |
| Ladders to climb | live (seen); climbing traced | $9D15 |
| Four pockets for items | traced | $3E-$41 |
| Score, six digits | live (000000) | $A50D |
| Figures beside the score are lives | live (five at the start, four after a death) | $94AC |
| Splinx follows the Doctor | live | $B3EF |
| Splinx programmer: modes, ten-step program, commands | confirmed (cursor live) | $AF58-$B16C, $B1A0 |
| Splinx battery drains and is recharged | traced | $B1EA, command 9 |
| Markers 1-4 placed in the mines for Splinx | confirmed | $A575, $42-$45 |
| Pick up, use, throw and drop items | traced | $A929, $BACC, $A6CB |
| Push buttons | traced: the code lock's three buttons | $BE29 |
| Robots and monsters that kill | traced: controllers (shock), madrag (bite), baby madrag | $CE5A, $B96F, $B902 |
| Death by falling too far | traced: a drop of $60 or more | $CD62 |
| Death on stalagmites | live | $CA67 |
| Oxygen needed outside | traced; live: no drain in the start cavern | $CA90 |
| Spikes | confirmed as the stalagmites: the game's own message says STALAGMITE, and the only terrain deaths are tiles $74/$51 (every $E8 writer was read); the steward confirmed descriptions' "spikes" mean these | |
| Forced regeneration | live (key R) | $9051 |
| Explosions | traced | $C09A-$C260 |
| Heatonite mining, TIRU, recovering the plans | traced: the end bonus asks whether production was halted and whether the CAPSULE (TIRU plans) was brought back | $9102-$920F, $B9B6 |
| The Master takes the TIRU crystal at the end; escape bonus 4096 | traced: object $0C goes after the CRYSTAL, from the Doctor or a pocket; the end bonus is 1024, doubled for the CRYSTAL and doubled for Splinx, 4096 with both, as the forum said. That $0C is the Master is not shown by the code | $B48A, $9163, $928C |
| Escape by TARDIS or escape pod, Time Lords' rating | traced | $9102 |
| Save to cassette or disc | traced; the game ends after saving | $94FF |
| Load saved games | traced: start-up restores a saved block in $7800; nothing in the program loads it | $49C6 |
| Music, five tunes by area | confirmed (live: music plays) | $74EA |
$0450, the lift only at a height difference of 8.See facts.md, Open questions.
How to get from the contributor's own copy to the analysed state. Someone else must be able to follow this exactly.
One program file, Doctor_Who_and_the_Mines_of_Terror.prg, 29,175 bytes, SHA-256 8d143c7ac59882fe54844aa41d9996679e35bb100932e80f851191a3afb889bb. It loads at $0801 to $79F6 and starts with a BASIC line SYS 2061. It is a single packed file, so it is not the publisher's release as it came off the disk: someone packed the game into one file. Whether any code beyond the packing was changed (a trainer, a removed protection) is examined in the sweep; no intro, menu or trainer appears on the screen.
LOAD"MINES",8,1 and RUN.$484D, and a moment later play is on screen: the Doctor and Splinx the cat beside the TARDIS in a cavern, score 000000, six figures beside the score.work/ (never committed):entry.vsf: stopped on the game's first instruction, $484D (a stopping checkpoint on $484D set before the depacker runs).play-start.vsf: a few seconds into play, no input yet.On 3 October 2026 the steward supplied an image of the original disk (.g64, 286,164 bytes, titled DWMT DISK MASTER). Autostarted, its BASIC boot program DWMT shows the title screen (SCR), asks LOAD A SAVED POSITION (Y/N)?, plays the title tune (THEME) until space is pressed, then loads P2, P3 and P1 and types SYS18509. A stopping checkpoint on $484D set before space is pressed catches the hand-over; there its memory equals the listing everywhere the listing has bytes, except zero page and $FF70-$FFFF. Snapshot work/dw-disk-entry.vsf.
The start-up at $484D blanks the screen, stops CIA1 timer A, sets $01 to $35 (RAM at $A000 and $E000, I/O at $D000), and writes its own hardware vectors: IRQ $FFFE = $8010, NMI $FFFA = $800F. During play those vectors read $8010 and $800F and $01 reads $35. The KERNAL's RAM vector $0314 still holds $0888, which the game does not use while the KERNAL is banked out. Program-counter samples during play fall between $8000 and $CDFF.
The start-up copies blocks from $4B00 upwards onto the screen at $0400, so the hand-over image holds data the running game has since overwritten; entry.vsf is the image the listing is built from unless the comparison in the sweep says otherwise.
release v3.13.1, v3.13.1-linux-x86_64-gui.zip, on Linux x86_64 in a cloud container with no display. check-emulator: 56 of 57, failed pause-at-instruction; stops are made with pause() from vice.py.
The BASIC line jumps to $080D, which masks interrupts, blanks the screen, banks all RAM in, copies the decruncher into the stack page and zero page and runs it from $0100. It builds a 52-entry table of lengths and offsets at $0334-$03CF and unpacks the game backwards through memory; the table layout is the one Exomizer uses, which is a resemblance, not an identification. When it finishes it restores $01 to $37, waits for the raster to pass the bottom of the screen, calls the KERNAL's IOINIT ($FDA3), turns the screen on, enables interrupts and jumps to $484D. The game is one load: nothing is read from disk after this.
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.