Commodore 64 · 1985 · Activision

About this page

This minisite was contributed by air. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/little-computer-people with me to Gold.

Footprint

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.

WhatBytesOf 64 KB
Program61,81594.3 %
Code25,63639.1 %
Graphics21,45632.7 %
Sound7,54711.5 %
Text2,1033.2 %
Tables3,5275.4 %
Variables1,5462.4 %
Screen, bitmap, colour, stack, I/O1,7922.7 %
Unused1,9292.9 %

Status

Tiersilver
Coverage100 % of the bytes the game uses have a description
Build analysedsingle-file crack by Mr Z (crack screen "CRACKED BY MR Z..."): disk name LCP, one crunched 192-block program COMPUTER PEOPLE; no error bytes
Copyagent-draft
Toolsemulator: 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
Modelclaude-opus-5-5
Kit version0.0.11

Contributors

Other places to love this game

What the game does, and where we found it

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:

Features

FeatureStatusWhere
Start-up asks for the time of day, "Enter time of day (HH:MM am/pm)", on the top lineconfirmed$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 visitdiffersonly 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 meanwhilediffersthe 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 stairsconfirmedwalking $19A8, stairs $1B32, 55 places $1D36; reference/play.png
A pet dog that wanders the house by itselfconfirmed$173C, 21 places at $180C; its bowl $2A62
Daily routine: cooking, television, newspaper in the easy chair, piano, records, exercise, the computerconfirmedthe 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 doorconfirmedactivity 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 pressconfirmed$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 clockconfirmed$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 dogconfirmedactivity 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 constantdiffersthe 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 thereconfirmedat 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 stereoconfirmedactivity 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)confirmedactivity 51 carries it to the study. Live: 51 started at once
Moods shown on his face: happy, content, sadlivethree sets of 15 head images ($0D65), picked by $035F; reference/moods.png
Sick: green, stays in bedliveillness $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 waterconfirmeda 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 moodopenthe 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")confirmedthe 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 personalityconfirmedthe 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 needsconfirmedactivity 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")confirmedtwo 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 requestconfirmedrules 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 requestconfirmed"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 greetingconfirmedHELLO, HEY, ATTENTION, EXCUSE and PARDON start activity 52: he turns towards the player and holds it. Live
He dances on requestconfirmedDANCE, 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"confirmedPLAY with any song word is the piano rule (activity 21)
"logon please" and the Name ChangerdiffersLOGON, 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 numberopenevery 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 quitsopenas 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 Waropenas for the games
Five-card draw pokeropenas for the games
Hangmanopenas for the games
Piano: plays pieces from classical to jazzconfirmedfour 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 aerobicsconfirmedfour 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)openthis 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 numberdiffersone 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 visitsdiffersnothing 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 2000differsno 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)differsa 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

Beyond the documentation

Found in the code, not in the manual.

Open questions

How the analysed state was reached

How to get from the contributor's own copy to the analysed state. Someone else must be able to follow this exactly.

The image

Emulator

From power-on to play

  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.
  2. The program unpacks itself in a few seconds. Then the crack screen appears: raster bars and "CRACKED BY MR Z...", 10 to 17 s after autostart in two boots. It has no trainer and no options. It waits at least seven seconds, or until any key or fire on port 1 is pressed, then hands over by itself. No input is needed. Snapshot: work/crack-screen.vsf.
  3. The game draws the house and asks, on the top line, "Enter time of day (HH:MM am/pm)". Snapshot at the prompt, before typing: 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".
  4. After 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.
  5. Steady-state snapshots, both taken with the machine stopped by vice_execution_pause at a screen that had been looked at:
  6. 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.
  7. 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.

Steady state

The loader, in a paragraph

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.