1985 · Datasoft
The pages describe the Datasoft release on disk, the copy that prints V 1 BY SES on the V key ($84E8). The game is one load. Everything except the scenes' pictures is in memory from the moment the loader hands over at $0800, and the addresses on these pages are those of that load. The Source tab's listing is built from memory saved in scene 1, after the start-up check at $0800 has wiped itself.
A second disk, the U.S. Gold release, was run to its own hand-over and compared byte for byte. It is a different build: about 23,000 bytes between $0800 and $FFFF differ, spread over the whole program. Its music driver differs in 71 bytes, and 2,144 of the 2,247 bytes at $C029-$C8EF, where this build keeps its tunes, differ too, so its music is not the music on the Music tab. Nothing else about the U.S. Gold build was analysed, and no claim on these pages is about it except where the C64-Wiki is quoted.
No game image is hosted here.
The game shows no names on screen. That the SES of its version line is Scott Spanburg is an inference, and the music driver names John A. Fitzpatrick in text nobody sees ($BA34). The roles below come from the sources named beside them.
The write-up, facts and symbol map are available under CC BY-SA 4.0; code is under MIT.
| Tier | silver |
|---|---|
| Coverage | 100 % of the bytes the game uses have a description |
| Comments checked | Not audited. No audit has checked every comment, and the last sample of 60 comments had 3 wrong, so between 2 and 14 % of the listing’s comments are likely wrong. How listings are checked |
| Build analysed | Datasoft disk, version line "V 1 BY SES" ($84E8); one load, scene pictures read from disk |
| Copy | agent-draft |
| Tools | host: Linux 6.18 x86_64, cloud container with four cores and no display, emulator: VICE, release v3.13.1, v3.13.1-linux-x86_64-gui.zip (vice-mcp), disassembler: regenerator2000 0.9.20, python: 3.11.15, widget tests: node 22.22.2: the music port checked register for register against the game's driver in kit/cpu/cpu6502.js (tests/music.js); the jump, the infinite-lives cheat and the tune commands run on snapshots in kit/c64/machine.js, subagents: one checking agent for the 60-verify sample, claude-opus-5-5[1m] |
| Model | claude-opus-5-5[1m] |
| Kit version | 0.0.107 |
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.
| Step | By | What it found | Of the listing |
|---|---|---|---|
| Research | claude-opus-5-5[1m] | Looked the game up online (its manual, reviews or wiki pages) before reading its code. | |
| Annotation | claude-opus-5-5[1m] | Wrote the listing’s comments. | |
| Sample 1 | claude-opus-5-5[1m] | 3 of 60 comments wrong, so between 2 and 14 % of the listing is likely wrong. All 3 were then corrected. 40 hand-written and 20 template comments; 1 and 2 wrong | |
| Audit 1 | claude-opus-5-5[1m] | Checked 58 of 1,303 comments and corrected 58. the 58 comments one template wrote, all rewritten | |
| Annotation | claude-opus-5-5[1m] | Wrote the listing’s comments. 100 % of the program is described, in 1,303 comments. 22 October 2026: effect_scripts' last pointer, $CC43-$CC44, typed as a word like the twenty before it |
likely wrong the sample’s range corrected right, or likely right not yet measured
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:
$84C0.The wiki describes more than one release. Where it says "the standard game" or "the original", it means the Datasoft release, which is the build analysed here (orientation.md); several of its US Gold notes turn out to be true of this build too.
| Feature | Status | Where |
|---|---|---|
| Two Goonies on screen; fire swaps which one the stick moves (one player) | confirmed | goonie_waiting $0B62 swaps the two types |
| Joystick: left and right walk, down climbs down, up jumps or climbs, up-left and up-right jump diagonally | confirmed | goonie_active $0AF9 copies up onto the fire bit; move_object $0CFD |
| Title: F1 back to the title, F3 one or two players, F7 or fire starts | confirmed | handle_keys $1634 |
| In game: space pauses, S music on and off, F1 quits to the title, F7 restarts at scene 1 | confirmed | handle_keys $1634; new_game $0868 |
| Two players take turns | differs | there are no turns: F3 sets two players at once, the second Goonie on the joystick in port 2 ($08D0, read_stick $172B). The wiki gives this mode to the US Gold release only |
| Eight single-screen scenes; in scenes 1 to 7 both Goonies must reach the exit | confirmed | each scene's exit routine tests both Goonies (s1_exit $8013 and the rest) |
| Scene 8: both Goonies reach the treasure | confirmed | s8_exit $9DBE, at the top of the ship by the chest |
| 1,000 points per scene solved | confirmed | every exit adds 1 to the thousands digit |
| 5,000 points for each Goonie left at the end | differs | 5,000 for each life left and one more (ending_start $A4E1); live: the ending entered with 5 lives shows 30000 (reference/ending.png) |
| Points for tasks within a scene | confirmed | facts.md, "Scoring" |
| Scene 4 gives three extra Goonies | confirmed | s4_exit $181B, at most nine |
| Starts with 8 lives (the wiki's standard game; 5 in US Gold) | differs | this build starts with 5 (new_game $0868); live: LIVES 5 on every scene snapshot |
| US Gold: F7 skips ahead a scene per press | differs | here F7 always starts at scene 1: $12BC, the scene new_game starts at, is written only at the cold start ($0846, to 0), the one writer opcodes.py --refs $12BC finds (the indexed stores that could reach it keep their indexes to 0-5) |
| US Gold: the life counter is not capped | differs | here the only award, scene 4's, stops at nine (s4_exit) |
| Scene 1: the money press distracts Mama Fratelli; tipping the water tank puts out the fire and opens the tunnel | confirmed | s1_press $7D41, fratelli_s1 $7B09, s1_tank $7E6C, s1_fire $7CF3 |
| Scene 1: push the armchair under the attic ladder | confirmed | the crate the Goonies push along the top floor, s1_crate $7C05 |
| Scene 2: take the key, ride the float across the lake, exit lower left | confirmed | s2_key $774E, s2_float $76A4, s2_exit $763F |
| Scene 2: rocks, pots and bats | confirmed | the weights that drop onto the top ledge (s2_frame $7313), their drips (s2_drip_hit), and the flier (s2_spawn_flier $869A) |
| Scene 3: close two vents to burst the pipe; shots and acid drops | confirmed | s3_vents $8E53, gunman_type7 $8AEA, s3_acid $8CBD |
| Scene 4: open the floors so rolling rocks reach the lever; three planks; the bell releases bats | confirmed | s4_frame $17A3, s4_rock_steer $1A41, s4_planks $1948, s4_bell $18E9 |
| Scene 5: pile five eggs; the bird drops them; bones open and shut the lava bridges; trampoline | confirmed | s5_egg_pile $E08A, bird_type9 $8845, s5_bones $E0B7; the trampoline is not a routine of its own: it is in the scene's rectangles |
| Scene 6: dissolving red platforms, levers that open doors | confirmed | s6_pads $F16E and s6_platforms $F413 (the pads choose which platforms are solid), s6_door $F32B |
| Scene 7: the flipper drains the pond and pulls the octopus down; the box under the flipper | confirmed | s7_flipper $96EE, s7_octopus $962A, s7_crate_rect $97D6, crate_type13 $9823 |
| Scene 8: porthole levers, ropes, the lift; Mama Fratelli leaves her post for the coins | confirmed | s8_portholes $A0B6, s8_lift $A049, s8_chest $9F0B, mama_type14 $9E62 |
| Scene 8: the tasks are fixed to one Goonie each | open | no routine tests which Goonie does what: the levers, the lift and the chest accept either. In scene 8 the second Goonie is a different, taller figure (shapes 49-56, s8_start $9D63); whether the fixed roles come from that, through the scene's rectangles, has not been checked |
| Music: a conversion of "The Goonies 'R' Good Enough" | open | the four tunes are in memory ($C02E); which is the song has not been established by ear or by note |
handle_keys $1634, read_stick $172B).game_start $0800). Then, every pass, the active Goonie's routine reads the CPU port's direction register and wrecks the game unless it holds $EF, the value the copy-protected loader leaves there (goonie_active, $0B2D). Live: with $00 set to $2F the screen was corrupted within four passes.RTI (setup_scene $1098).demo_read $F7DF, make_random_table $880D).dev_source, $F84D), unused routines (unused_handler $0BF5, unused_near_goonie $0C04), and 166 bytes nothing reaches (unused_7F63).Every byte of the C64's 64 KB, one pixel each, 512 to a row. Lit pixels are code, graphics, sound, text, tables and variables; dim areas are screen and working memory.
The symbol map is symbols.json; the listing behind the Source tab is listing.json.