Commodore 64 · 1985 · Activision
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 | 61,815 | 94.3 % |
| Code | 25,636 | 39.1 % |
| Graphics | 21,456 | 32.7 % |
| Sound | 7,547 | 11.5 % |
| Text | 2,103 | 3.2 % |
| Tables | 3,527 | 5.4 % |
| Variables | 1,546 | 2.4 % |
| Screen, bitmap, colour, stack, I/O | 1,792 | 2.7 % |
| Unused | 1,929 | 2.9 % |
| Tier | silver |
|---|---|
| Coverage | 100 % of the bytes the game uses have a description |
| Build analysed | single-file crack by Mr Z (crack screen "CRACKED BY MR Z..."): disk name LCP, one crunched 192-block program COMPUTER PEOPLE; no error bytes |
| Copy | agent-draft |
| Tools | emulator: VICE 3.10 via vice-mcp: own build of github.com/air/vice-mcp, branch fixed, commit 8a07b08d5c (v3.11.0 plus barryw/vice-mcp PRs #6, #7, #11, #14-#24); macOS arm64 GUI build; check-emulator 56 of 56, disassembler: regenerator2000 0.9.20, python: 3.9.6, host: macOS 26.5 (Darwin 25.5.0), Apple silicon |
| Model | claude-opus-5-5 |
| Kit version | 0.0.11 |
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/. No external screenshots were downloaded.| Feature | Status | Where |
|---|---|---|
| Start-up asks for the time of day, "Enter time of day (HH:MM am/pm)", on the top line | confirmed | $04F8, text at $0905; reference/time-prompt.png. The time only sets the wall clock; the house keeps its own hour (facts.md, "Timing") |
| The manual's guestbook: name, date (MM/DD/YY) and time before the visit | differs | only the time is asked ($04F8); there is no name or date prompt in the code, and the name "Billy Bob Binkle" at $03FC is read by nothing |
| Move-in: the house starts empty, the person is shy, takes several minutes to come in, inspects for 5 to 10 minutes, fetches a suitcase and returns with the dog; keyboard commands are disabled meanwhile | differs | the first activity is 122, coming in through the front door, forced by $037B = $7A, which also locks the keyboard until the chooser takes it. The dog is in the house from the first frame; he is at the door two seconds after the time is typed (reference/arrival.png) |
| The house: three floors, furnished rooms, the person walks between them by the stairs | confirmed | walking $19A8, stairs $1B32, 55 places $1D36; reference/play.png |
| A pet dog that wanders the house by itself | confirmed | $173C, 21 places at $180C; its bowl $2A62 |
| Daily routine: cooking, television, newspaper in the easy chair, piano, records, exercise, the computer | confirmed | the chooser $E13F: timed activities and random lists by time of day and weekday. Cooking 48–49, TV 5 and 16, the easy chair with a white object 24 (the newspaper is likely, not proven), piano 79, records 9 and 120, exercise 27, the computer 20. Live: nine unprompted minutes of TV, piano, exercise and more |
| CTRL F: food delivered to the front door | confirmed | activity 44 ($3028) puts the food in the kitchen cupboard; ignored while the cupboard is full ($30B4 = $0F), which it is at start. Live: nothing with it full, activity 44 at once with $30B4 = $07 |
| CTRL W: fills the water tank, about a glass a press | confirmed | $2B54: one line a press, up to 11 of the tank's 12. Live: 5 to 11 and no further |
| CTRL A: rings the alarm clock | confirmed | $2B4E, the bell drawn at $7079; ignored while a record plays. Live: the bell's two cells (row 13, columns 7–8) animate and the SID rings; his activity does not change |
| CTRL D: dog food at the front door; the person feeds the dog | confirmed | activity 33 fetches it, 34 feeds the dog, the bowl is filled to 6 ($2A63). Live: 33 started at once |
| CTRL C: the telephone rings; a call cheers him unless constant | differs | the ringing and the answer are there: activity 25, he sits in the easy chair and talks until a timer runs out, and the phone also rings by itself every 32–63 ticks ($09EA). Live: 25 started at once (reference/phone-call.png). The cheering is not: the only instructions that store to the mood $035F are the two-day cycle ($0A76–$0A90), illness ($0B47) and petting ($2C39) |
| CTRL P: petting; he must be in the easy chair, and the key calls him there | confirmed | at place $2B the arm and hand pat him and the mood becomes happy ($2C39); elsewhere activity 6 walks him there. Live: 6 started at once |
| CTRL R: a record left at the front door for the stereo | confirmed | activity 50 carries it to the stereo; the record count $042B starts at 4. Live: 50 started at once |
| CTRL B: a book left at the front door (Commodore only) | confirmed | activity 51 carries it to the study. Live: 51 started at once |
| Moods shown on his face: happy, content, sad | live | three sets of 15 head images ($0D65), picked by $035F; reference/moods.png |
| Sick: green, stays in bed | live | illness $0365 turns sprite multicolour 1 green; at level 3 the chooser sends him to bed (activity 30). reference/sick-in-bed.png |
| Illness from too little food or water | confirmed | a need rising from level 2 starts it ($0B91); it ends when both needs are below 3 ($392F). Live: with food and water to hand he drank, ate and recovered; without, he got worse each house hour and went to bed |
| Too much sleep lowers his mood | open | the only instructions that store to the mood are the two-day cycle ($0A76–$0A90), illness ($0B47) and petting ($2C39); none of them looks at sleep |
| Typed sentences: he answers questions, suggestions and requests, and responds to good manners ("please", "thank you") | confirmed | the parser ($C040): PLEASE is worth 4 on the score, and a request scoring 8 or more is done at once. "thank you" does nothing: THANK is not in the word lists. Live: several requests, and the manners test in facts.md |
| He may refuse a request, by mood and personality | confirmed | the score adds 3, 1 or 0 for the mood and 0–3 at random; below 8 a request waits for the chooser. Live: sad and without "please", "light a fire" was not done in 25 s |
| Letters: he types a letter about his feelings and needs | confirmed | activity 22; the thank-you or the complaint, chosen by the food and water supplies, "Dear Friend" to "Your Friend". Live: both bodies (reference/letter.png, reference/letter-complaint.png) |
| The vocabulary the wiki lists (140 words, from "add" to "whats") | confirmed | two word lists at $C234–$C969, 156 distinct words, each with five bytes of concept bits (facts.md). Every word the wiki lists is there except "quit", and "ored", which reads like a cut-off "stored". WHAT'S can never match, because the apostrophe ends a word |
| He builds a fire in the fireplace on request | confirmed | rules for "light/start/make/burn/ignite + fire", "use fire" and "you look cold" start activity 7 ($AEEA): he fetches a log from outside and feeds the fire. Live: logs in the fireplace at 50 s, burning at 80 s (reference/fire-building.png, reference/fire-lit.png) |
| He plays the piano on request | confirmed | "play the piano", "play a song" (any song word) and "tickle the ivories" start activity 21: the stereo off, a piece picked (78), played (79). Live: the piano played |
| He answers a greeting | confirmed | HELLO, HEY, ATTENTION, EXCUSE and PARDON start activity 52: he turns towards the player and holds it. Live |
| He dances on request | confirmed | DANCE, MOON or SHOW puts on a record (9) and then dances (53, 3 to 15 moves). Live: the activities; the dance itself was not looked at |
| "play another song" | confirmed | PLAY with any song word is the piano rule (activity 21) |
| "logon please" and the Name Changer | differs | LOGON, PROGRAM, UTILITIES, MATH, HOMEWORK and the arithmetic words have concept bits but no rule uses them; the sentence does nothing |
| Games: he knocks on the glass to ask for a game; the player picks one by number | open | every byte of the image is described (100 % coverage) and none of it is a game, a card, a game menu or a knock; typed game words (GAME, CARDS, POKER, WAR, CARD, ANAGRAMS, HANGMAN) make activity 126, which is the chooser, and nothing starts; no knock in nine unprompted minutes. The game names are only in the word list |
| Anagrams: unscramble his word; 8 or 9 guesses; F3 moves one letter to its place; F7 quits | open | as for the games; and the keyboard table gives F1, F3, F5 and F7 no character ($5C in key_ascii), so the game cannot see them |
| Card War | open | as for the games |
| Five-card draw poker | open | as for the games |
| Hangman | open | as for the games |
| Piano: plays pieces from classical to jazz | confirmed | four pieces ($8020–$8D98): Mozart's K. 545, Für Elise, Bach's fugue in C minor BWV 847, and one not identified. Live: each forced and its opening notes read off the SID |
| Records on the stereo; he dances or does aerobics | confirmed | four tunes made of two pieces ($3A03), the turntable animating in the attic while one plays; the dance (53) runs to them; exercise is a separate activity (27). Live: the turntable and the music, which the contributor also saw and heard |
| Music: 17 pieces, seasonal ones such as Jingle Bells at Christmas, some shared with Master of the Lamps (Russell Lieblich) | open | this build has four piano pieces and four record tunes. The effects driver's 27-entry sound table ($D764) was not checked entry by entry for further music; there is no date, so nothing seasonal can be chosen |
| Every copy is a different person: one of 256 names, looks and personality from the disk's serial number | differs | one fixed person: the settings in $0340–$03FF, among them the personality byte $0369 ($2D, which nothing stores to), come with the image; only the clothes colours are picked at random at start ($B9BE); the name in the image is read by nothing |
| The house-on-a-disk memory: his data saved to the disk, a session count, time passing between visits | differs | nothing touches the disk: the KERNAL stays banked out, CIA2's port is written only to set the VIC bank, and six of the ten driver entries at $8000 are uncalled RTS stubs |
| Dates: the original stores century and weekday names on the disk and does not handle 2000 | differs | no date is asked for or kept; there is only a weekday counter ($0377) |
| A day in the house runs to a real-time schedule (Wikipedia: six hours) | differs | a house day is 12 × 24 ticks of 2304 frames: 3.68 hours on PAL (a tick measured live), 3.07 hours at NTSC's 60 frames |
Found in the code, not in the manual.
$15). Live: 24 requests during one phone call. A quarter of one channel's phrases play from uninitialised memory.$838D) is.How to get from the contributor's own copy to the analysed state. Someone else must be able to follow this exactly.
Little_Computer_People_1985_Activision.d64, 174,848 bytes: 35 tracks, no error bytes. SHA-1 acfce1997fe8a7c0c4198c91a62562d247dbd911.LCP, id 00, one file, COMPUTER PEOPLE, a 192-block PRG; 472 blocks free.work/lcp.d64. The contributor's file is kept read-only beside it. After two boots and several minutes of play, the working copy's SHA-1 was still the original's: nothing had been written to the disk.tools.py status: own build of github.com/air/vice-mcp, branch fixed, commit 8a07b08d5c. That is VICE 3.10 with vice-mcp v3.11.0, plus barryw/vice-mcp pull requests #6, #7, #11 and #14 to #24. It is the macOS arm64 GTK3 build.tools.py check-emulator: 56 passed, 0 failed. No failed checks, so workarounds.md does not apply.MachineVideoStandard 1.python3 kit/scripts/tools.py vice, then hard reset, then vice_autostart the image, which has a single file (index 0). Autostart loads with warp on and types RUN.work/crack-screen.vsf.work/time-prompt.vsf. The game scans the keyboard matrix itself. Text typed into the KERNAL buffer with vice_keyboard_type lands in $0277 and is never read. Type with vice_keyboard_matrix, holding each key for 4 frames: 1, 0, : (row 5, column 5), 0, 0, SPACE, A, M, RETURN. The line then reads "10:00 am".RETURN the prompt line clears. Within about two seconds a little person is at the front door, bottom right, and starts walking through the house. A dog wanders on its own.vice_execution_pause at a screen that had been looked at:work/play-01.vsf, about a minute after RETURN. The person is out of sight beyond the attic door, and the dog is in the attic.work/play-02.vsf, a little later. The person is sitting in the attic chair and the dog is in the kitchen. This is the snapshot the disassembler reads.$00/$01 = $2F/$35: BASIC and KERNAL ROM are banked out and I/O is in. The RAM image in the snapshots starts at file offset 209 (checked against the code at $082B and $0713).$FFFE → $082B, a shim that pushes A, X and Y as the KERNAL does and jumps through $0314 → $0713, the game's handler.$FFFA → $0833 → JMP ($0318) → $082A, an RTI. RESTORE does nothing.$FFFC → $0340 → JMP $0434, the cold start. The cold start copies these six bytes from $46BD.$082B and $0713 285 hits in 2 s just after the arrival, when a record was playing, and 51 in about a second later in play, when none was. $0833, $082A, $EA31 and $FF48 got 0 hits. The handler takes one raster interrupt a frame, at line $28. While the stereo plays it also takes the CIA1 timer interrupts, which it passes to $8018 ($D019 bit 0 clear).$4000–$7FFF ($DD00 = $96). Bitmap mode ($D011 = $3B). $D018 = $79, which puts the bitmap at $6000, the colour matrix at $5C00 and the sprite pointers at $5FF8. The main loop shares the eight hardware sprites out among the figures once per pass, nearest first, writing the registers at raster line $FA ($0FD2, $11B6). The person takes four (two colours and two black outlines), the dog two, and each carried object one. The raster interrupt only switches the top text band to hi-res and borrows one sprite for the text cursor.$0200 to $FFFF. The only exceptions in play-02 are $4C00–$4FFF and $DE00–$DFFF (zero) and two bitmap pages ($6000–$61FF) that hold nothing but $55. $0340–$03FF is a jump table followed by game variables.$8000 are RTS stubs that nothing calls.The one file loads at $0801–$C595 behind the BASIC line SYS 2066 C.C.S.. The code at $0812 raises $01 to $38 (all RAM), copies an unpacker into zero page and the stack page (from $00FB) and 256 bytes of the file's tail to $FF00, and unpacks the game over the whole of memory. While it runs, the program counter samples in $0106–$018F and $0831–$0845. The unpacked image carries Mr Z's crack screen at $4800–$4BFF, with its raster interrupt at $4A10. That screen polls the keyboard and control port 1 for 6 × 65,536 passes of a 19-cycle loop (at least 7.6 s on PAL) or until a key or fire is pressed. It then calls CINT ($FF81), IOINIT ($FF84) and $E518, puts $0314 back to $EA31 and blanks the screen. It copies $4B40–$4BFF to $0340–$03FF, calls $4861 twice to copy four pages each, $4C00–$4FFF back to $0400–$07FF (the game's own bytes, kept out of the way of the crack screen) and $CC00–$CFFF into colour RAM at $D800, and jumps to $0340. The two copies are confirmed from the data: $4C00–$4FFF before the hand-over equals $0400–$07FF in play in 1,012 of 1,024 bytes, and $CC00–$CFE7 equals the colour RAM in play in 998 of 1,000 cells. That is the game's jump table and reset vector, and it leads to the cold start at $0434. Not annotated further, by policy.
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.