1989 · Taito America
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 60 comments had 6 wrong, so between 5 and 20 % of the listing’s comments are likely wrong. How listings are checked |
| Build analysed | North East Crackers crack distributed by c64.com (disk name C64.COM); game file ALIEN, entry $8000; NTSC-only loader |
| Copy | agent-draft |
| Tools | emulator: release v3.13.2, v3.13.2-linux-x86_64-gui.zip (VICE x64sc, NTSC, true drive emulation), disassembler: regenerator2000 0.9.20, host: Linux x86_64, Ubuntu 24.04.5 cloud container, four cores, no display, python: 3, node: 22, browser: Chromium 1194 via Playwright 1.56.1 (preinstalled in the container) |
| Model | claude-opus-5-5 |
| Kit version | 0.0.124 |
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 | Looked the game up online (its manual, reviews or wiki pages) before reading its code. | |
| Annotation | claude-opus-5-5 | Wrote the listing’s comments. 100 % of the program is described, in 1,026 comments. one agent | |
| Sample 1 | claude-opus-5-5 | 6 of 60 comments wrong, so between 5 and 20 % of the listing is likely wrong. All 6 were then corrected. stratified: 45 of 651 hand-written and 15 of 375 generated comments | |
| Audit 1 | claude-opus-5-5 | Checked part of the 1,026 comments and corrected a number not recorded. the families of the sample's errors: the eight edge-walk routines and the music source's block descriptions | |
| Audit 2 | claude-opus-5-5 | Checked part of the 1,026 comments and corrected 6. the Qix's movement routines, qix_reset to pixel_op, checked against the port |
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 in the emulator), differs (the code does something else). "Absent" is not a status.
Sources:
d64_Qix_1989_Taito (its MobyGames description only; no file was downloaded), archive.org, read 10 October 2026: developed by Taito America, published by Taito, 1989; slow and fast draw, Sparx, the Fuse.tim-follin-qix-c64, a recording of the C64 music credited to Tim Follin and dated July 1989, archive.org, read 10 October 2026. Only its catalogue record was read.| Feature | Status | Where |
|---|---|---|
| The player's marker (the Stix) moves along the edges; holding fire and pushing away from the edge starts a slow draw (IIGS manual) | live | from play-round1.vsf: fire and up for 120 frames drew a line about 30 pixels long, the marker a white diamond |
| Releasing fire while drawing starts a fast draw (IIGS manual) | live | fire for 10 frames then up alone for 110 drew about 58 pixels, the marker red |
| A closed shape is filled and claimed; a slow draw scores twice a fast draw (IIGS manual; the demonstration says SLOW 500, FAST 250) | confirmed | finish_line, fill_find_side, fill_column; score_fill halves the pixel count and doubles it unless the line ended with fire released |
| Required claim: 65 % on level 1, rising with the level (IIGS manual) | live | lvl_tables at $11F9: 65 % on levels 1-4, 70 % on 5-6, 75 % on 7-8, 80 % from 9; claim_check compares; a poked 1 % requirement ended the level at a 6 % claim |
| 1,000 bonus points per percent claimed over the requirement (IIGS manual) | confirmed | claim_check adds $03E8 per percent over |
| Three lives per player (IIGS manual) | live | lives ($026E) = 3 at the start of a game, from $1567; at most 5 ($1566) |
| A life is lost when the Qix touches an unfinished line, or a Fuse, Sparx or Spritz touches the marker (IIGS manual) | confirmed | pixel_op (Qix on colour 1), place_enemy_sprite (walkers on the marker), fuse_advance, roam_probe (a roamer on the line) all set the hit flag $1E; check_death runs life_lost |
| Sparx travel the edges; two new Sparx each time the timer runs out ("the line disappears"); on higher levels Sparx follow the marker up its line once the alarm rings (IIGS manual) | confirmed | three walker pairs (walker_pair_a/b/c) released by timer runs per level (lvl_tables); pair B chases up the line from level 3 (chaser_b1_step); sound 5 when they speed up (timer_bar_empty) |
| The Sparx timer shrinks during play; the IIGS manual puts it above the play area | live (C64 differs in layout) | on the C64 it is the vertical bar to the right of the play area, between the field and the panel; it shrinks from the top |
| The Fuse travels along the line being drawn when the marker stops (archive description) | confirmed | fuse_tick starts it when the marker stops while drawing; fuse_advance burns the line to colour 2 behind it and kills at the marker |
| Spritz: a sub-virus; trapping one in a fill is worth 500 points and turns later fast fills into slow points until the player dies (IIGS manual) | confirmed in part | roamers start at a Qix (spritz_step, roam2_step); a trapped one sets $154D, which makes every line score and fill as slow until life_lost clears it. The 500 points were not found as a constant: open |
| Splitting two Qix multiplies the points of later fills (IIGS manual) | differs | split_test ends the level and counts $0291; score_fill doubles points once per split for the rest of the game, but the doubling adds only the low byte to itself, so from 256 points on it falls short of double |
| An extra life every 50,000 points (IIGS manual) | confirmed | extra_life_p1/p2: threshold from 50,000, raised by 50,000, up to 5 lives |
| High-score table, "the QIX Hall of Fame", initials typed in (IIGS manual) | differs | the C64 keeps one high score ($5DF0-$5DF2), set by reload_alien and shown as " HI SCORE " in the attract demonstration; no initials and no table were found (searched: every reader of $5DF0, the string sweep) |
One player, two players, or a one-player practice game, chosen with the stick and fire (IIGS manual; the C64 menu reads 1 PLAYER, 2 PLAYER, PRACTICE, USE JOYSTICK TO SELECT OPTION) | live | the menu after the title |
| Pause (ESC on the IIGS); restart and reboot keys (IIGS manual) | live | RUN/STOP pauses, any stick movement resumes (pause_check). No restart key: the only other key read is RUN/STOP (read_runstop); RESTORE is disabled (nmi_rti) |
| Status panel: lives, required claim, completed claim, level (IIGS manual) | live | right of the field: QIX logo, CLM and the requirement, the claim, LVL and the level (draw_status); lives as diamonds at the top right (draw_lives) |
| Score at the top of the screen (IIGS manual) | live | PLAYER 1 0 |
| Title music by Tim Follin (archive recording's catalogue record) | traced | the music player at $E000 plays eleven tunes; nothing in the program names a composer |
| Feature | Status | Where |
|---|---|---|
| An attract demonstration: the program plays a game by script, naming the enemies and drawing a spiral death trap | live | attract_demo, after the title tune (74 s on the title) |
| Hints at the end of levels 2 and 4 ("SPLITTING QIXS MULTIPLIES POINTS", "CAPTURE SPRITZ FOR EXTRA POINTS") | traced | level_messages |
| The same music tempo on PAL and NTSC | live | music_frame skips one frame in six on NTSC |
| Either joystick port works | traced | read_stick EORs both ports |
| The Qix leans towards the marker, harder on later levels | live | only at a bounce: the level's pull ($6E/$6D, 0, 1 or 2) is added to the reversed speed, towards the marker (qix_step, qix1_move_*); on level 7's values the pull matched the marker's side in 600 of 600 steps |
| The Qix runs straight for longer on later levels | live | the turn timer: 1-4 steps, and one turn in eight up to 8 (level 3), 31 (levels 2, 4-6) or 48 (level 7 on) steps, by the mask $6F; times up to 45 seen with level 7's values |
| Every line of the Qix's trail can kill, up to eight steps after it was drawn | live | pixel_op tests the line being drawn when erasing as well as drawing; five of six planted kills came from the erase |
| A Qix whose new line crosses a claimed corner jumps back to its line of eight steps before | live | qix1_check_line at $9774 takes the oldest trail slot; 5 of 5 fallbacks seen landed on the line of eight steps before |
| Qix 2 tests one of its moves at Qix 1's height | live | qix2_check_line reads $028A (Qix 1's y2) at $982F; a replay without the slip drifts from the game after 288 steps |
| A bounce draws a new turn time that nothing uses | live | new_turn_time stores at $0273, which nothing reads; a read watch stayed silent for 1,600 steps |
| A C128 is held at 1 MHz | traced | $D030 cleared every frame |
| The game's own crash screen ("ERROR" and "ADDRS") | traced | fatal_error, when a search runs out of room |
TITLE1 and TITLE2 hold: both load at $7F00-$A7xx during boot and are overwritten by ALIEN before the game's entry.TAITO between levels when nothing runs it (a disk check is a guess).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.