1984 · Software Projects

About this page

This minisite awaits a maintainer’s check. Models this site has not proven yet worked on it (gpt-6 and one whose name was not recorded), so its claims have not been tested against the game (how the check works).

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
Program60,74892.7 %
Code7,41511.3 %
Graphics13,43820.5 %
Level data19,03029.0 %
Sound2,0503.1 %
Text850.1 %
Tables18,67828.5 %
Variables520.1 %
Screen, bitmap, colour, stack, I/O3,4905.3 %
Unused1,2982.0 %

Status

Tierbronze
Coverage100 % of the bytes the game uses have a description
Build analysedCMM disk release; The Bathroom after trainers N, N, N
Copyagent-draft
Toolshost: Linux x86_64, disassembler: regenerator2000 0.9.20, publication: Python 3; symbols_export.py and listing.py, browser: Firefox 157.0 (installed); WebDriver BiDi, emulator: VICE MCP 3.13.1
Modelgpt-6.1-sol
Kit version0.0.46

Contributors

Other places to love this game

What the game does, and where we found it

Sources: game documentation and the contributor’s annotated listing, consulted 30 September 2026. The documentation supplies the feature inventory; the annotations supply leads for verification.

FeatureStatusEvidence or open work
Explore connected roomspartly live$2E55 copies all 60 records exactly; $2EE5 expansion matched all 30,720 cells. Exit-transition behavior remains open
Jumping and platform collisionpartly liveInput-only bathroom jump and no-input control agree with the vertical curve; remaining collision classes are traced leads
Collect objectslive mechanismAll 80 records and nine count/rejection cases checked at $15FB; routes to every item remain open
Guardians, arrows and ropespartly liveRope staging at $16DE matches all 34 positions. Guardian/arrow collision and rope attachment remain open
Return to bed after collectionopen$0400 changes Maria visibility; complete winning input route is not demonstrated

Imported annotations are leads until traced or exercised in this run. The boot itself is observed live.

Character and sprite displayliveComplete recorded frame matches all 104,448 emulator pixels
Title musicliveNative playback ends at decoded stream pointers; the end flag and zero volume match
Death and spare liveslive mechanismEight checkpoint fields and six counter cases agree at $38EF
Maria after collectionpartly liveFlag suppresses sprite writes; existing enable bit persists until room setup. Player route for that corner case is open
RESTORE and resetliveRestart stub reaches RAM title on RESTORE, BASIC ROM on CPU reset

How the analysed state was reached

Disk and power-on route

The contributor’s CMM D64 was recovered from repository history into private work/game.d64. Directory: JET SET WILLY+ (126 blocks), JET SET WIL.PIC (15 blocks). Autostart the first file on a hard-reset PAL C64 in VICE MCP 3.13.1, explicitly resuming after reset/autostart if paused.

Wait for the animated CMMO intro. Hold fire on control port 1 until its exit/fade starts, release, and wait for the trainer. Its live read at $2AF7 requires $DC01=$EF; Space and port 2 fire did not dismiss it. Choose N for unlimited lives, N for the second option and N for the third (hold each for 60 frames, release for 30). After decompression the title appears; advance 600 frames and save work/title.vsf without ROMs. Hold Return for 60 frames, release, advance 120 frames. Confirm THE BATHROOM and save work/play.vsf without ROMs.

Take snapshots with pause() in kit/c64/vice.py, not a bare pause call. Frame batches must stay within the emulator tool’s accepted limits; wait for the named screens rather than assuming a timed loading batch completed.

Why the listing uses play

The fresh title and play snapshots each match every one of the imported analysis’s 6,777 code-typed bytes and 514 word-typed bytes. Byte-typed differences from the old title capture: 104 at the newly booted title, 957 in play. No code bytes differ between fresh title and play; sprite slots $4000–$6AFF also agree. Room ranges differ at 16 bytes in $B000–$CDFF and 24 bytes in $E000–$FDFF, so room/session state is not assumed immutable.

The title IRQ vector is $0314=$A801; play installs $0314=$33E1. Thus play preserves the full imported code and authored sprite data while establishing the game’s own initialized handlers and room state. The Source listing uses work/play.vsf, with labels/types/comments seeded from the Ghidra export, inspected in regenerator2000 and exported through symbols_export.py. It is generated by listing.py alone.

Scope and tools

This is one resident game load. The earlier crack intro and trainer are boot provenance. The imported models are unknown and are recorded in game.json; the original text export is private. Silver needs normal coverage/verification and a maintainer check.

VICE MCP 3.13.1 health check on 30 September 2026: 55/57 passed; pause-at-instruction and unpaced-calls failed. Use the pause workaround and paced calls. The emulator runs with sound disabled on a virtual X display. No headless VICE build is used because the kit reports broken CPU stopping there.

Rebuild the disassembler project with symbols_import.py <game> work/play.vsf, start it through tools.py r2000, export with symbols_export.py, then listing.py <game> work/play.vsf. Binaries, snapshots and projects remain private.

The final cold hand-over snapshot is work/entry.vsf, stopped at $3C23 after answering all three trainer prompts with N. The RLE decoder jumps there at $0140; port $37, DDR $2F, CIA2 $97 and $D018=$15 were observed. It matches all 7,415 code-typed bytes of the play image. The retained copy routine under I/O can be executed in a controlled test, but its entry did not run on this CMM boot.

Review capture, 3 October 2026

VICE MCP v3.13.2 macOS arm64 passed 57/57 emulator checks, then ran through tools.py vice x64sc-review with -console -sounddev dummy. The fresh private work/play-review.vsf supplies the rebuilt Source listing. All 7,415 code bytes and 560 word bytes match the preceding listing; 24 byte-data bytes differ at $79E0 onward. Wait for the trainer, title and Bathroom screens: the loader can take longer than a fixed frame batch. The earlier Linux measurements above describe the original capture.

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.