1987 · System 3
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.
| 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 80 comments had 5 wrong, so between 3 and 14 % of the listing’s comments are likely wrong. How listings are checked |
| Build analysed | System 3's original disk, as a G64 bit image (C64 Preservation Project, verified dump) |
| Copy | agent-draft |
| Tools | emulator: release v3.13.2, v3.13.2-linux-x86_64-gui.zip, disassembler: regenerator2000 0.9.20 (cargo install from crates.io), host: Linux x86_64, Ubuntu 24.04, no display (cloud container), node: 22.22.0 |
| Model | claude-opus-5-5[1m] |
| Kit version | 0.0.119 |
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] | 7 of 80 comments wrong, so between 4 and 17 % of the listing is likely wrong. All 7 were then corrected. 60 hand-written and 20 template comments; 12 others sharing their errors corrected with them | |
| Sample 2 | claude-opus-5-5[1m] | 5 of 80 comments wrong, so between 3 and 14 % of the listing is likely wrong. All 5 were then corrected. 60 hand-written and 20 template comments the first sample left out; 3 others sharing their errors corrected with them | |
| Annotation | claude-opus-5-5[1m] | Wrote the listing’s comments. 100 % of the program is described, in 1,115 comments. the unused byte at $E76F between tune patterns $13 and $14 typed and described; the RAM under the I/O area above $D3FF excluded as the emulator's power-on pattern |
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:
reference/).| Feature | Status | Where |
|---|---|---|
| Three karateka fight at once in one arena; the first to six points wins the round | confirmed | round_over ($13CB) ends the round at six dots or when TIME runs out; round_end ($11E3) ranks by dots, then the round's points |
| The fighter with the fewest points drops out | confirmed | only a human placed last alone drops out; a tie for last drops nobody (round_result, $11AC); the computer fighters always fight on |
| One player against two computer fighters (F1/F2) | live | F1 (the same key as F2) or fire in port 2 ($18D2); the white fighter is the player |
| Two players, against each other or as a team, against one computer fighter (F3/F4) | confirmed | F3 or fire in port 1 ($18C2); there is no team setting: each fighter scores alone, and a computer fighter attacks the leader of the other two (choose_target, $29BE) |
| Eight joystick directions give eight moves, and eight more with fire; the moves mirror with the fighter's facing | confirmed | joy_moves ($1BBB) and its mirror ($1BDB); forward becomes move $14 near an opponent |
| Moves listed on the wiki: jump up; high punch backward with a turn; punch; walk back or block; walk forward; low punch; shin kick; foot sweep; flying kick; high double kick; head butt; back flip; stomach kick; turning back kick to the face; high face kick; turned foot sweep backward | traced | sixteen move numbers in joy_moves; each move's frames in the script at $1F41; the wiki's names were not matched to move numbers |
| Holding a direction carries the move through; a quick next direction chains moves without a pause | confirmed | frame flags ($211D): bit 3 holds a frame while the move is still requested, bit 4 lets a new request break in (fighter_anim, $1D06) |
Each round is timed (TIME counts down from 30) | live | $011C, BCD, one off every 50 frames (measured) |
| A bonus round after every two rounds: deflect bouncing balls with a shield; all of them deflected gives a 5,000-point survival bonus | live | round 3 was the bonus round (bonus_round, $F2AB); 100 points a deflection; the 5,000 comes for surviving all 64 balls, whether deflected or dodged |
| Belt colour by score: white 0, yellow 8,000, green 16,000, purple 25,000, brown 35,000, black 50,000 | confirmed | belt_scores ($262F), shown under TIME by belt ($263E) |
Level counter (LV) on the score line | live | LV 01 at the start; $010C, one up a round |
| F5/F6 music on and off | confirmed | $186C (F5; F6 is the same key) |
| F7/F8 samples (the digitised shouts) on and off | confirmed | $18A1, $FD51; it also silences the bonus round's sound effects |
| RUN/STOP pauses | live | pause ($10BB) |
| Keys 1 to 5 set the speed; 3 is normal | live | 3 to 7 frames a game step on PAL, 5 for key 3 (step_frames, $15FE, measured) |
| Cheat: pressing RUN/STOP twice when knocked down stands you up again | live | pause clears every fighter's move and does not restore it |
| Easter egg: E and S together drop the fighters' trousers | live | start_move ($1C40) starts move $20 for a fighter with no move to make, on the first two levels only |
Easter egg: * changes the sun's reflection | live | four colour sets (reflection_colours, $178B) |
| Easter egg: D, O and M change the water and sky colours | live | eight sets (sky_water_colours, $179B) |
| The untouched high-score table's names spell a hint: "WHY NOT TRY PRESSING THE ASTERISK KEY OR THE S AND E KEYS TOGETHER AND OTHERS" | live | the initials at $BE80, copied to the table by game_init |
| Background antics: a fish jumps, a spider lets itself down, a bird flies by, the sun glints on the water | live | the antics module ($71C0-$7CFF); each creature put on screen in work/shots/antics-sheet.png; a fourth, a worm, is in "Beyond the documentation" |
| Digitised fighting cries | confirmed | six 4-bit shouts at $BF00-$CFFF, played by sample_play ($0934) |
| Music by Rob Hubbard | confirmed | a three-voice tune and its driver at $E000-$ECE1; the program does not name its composer |
| An attract mode with a demo fight and the TOP 30 SCORES table | live | |
| Gold Edition for three players with a four-player interface | differs | not this release: the code reads two joysticks and has two human flags ($45, $46) |
Found in the code, not in the sources above.
worm_step, $794E), besides the bird (sometimes two on one route), the spider and the fish with its splash.sprite_reflections, $F150; char_fighter_reflection, $F1F9), and the bonus round's balls, whose reflections move down as they rise (refl_offsets, $F79A).$1286). He says "IS OUT" only to a human placed last alone (round_result, $11AC). He stands in the widest gap between the fighters and taps his foot.$1855): a key from each of R/I/P, T/O/@ and X/N/, together changes how the sun's reflection ripples, in four patterns (drift_set, $7665).start_move).sample_start, $0EE3).flash_slot, $F71D), each ball has a rolling spot, the balls come faster and heavier as the round goes on, and a ball that hits the player knocks the shield out of their hands.knock_marks, $3BA3; live).level_defend, $2980; level_attack, $2988).orientation.md).$14, and the low kick, pose $20).$39 in the top rows' character set are for: no traced code puts them on the screen.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.