1990 · Domark
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 | 56,370 | 86.0 % |
| Code | 28,021 | 42.8 % |
| Graphics | 9,780 | 14.9 % |
| Level data | 8,848 | 13.5 % |
| Text | 1,035 | 1.6 % |
| Tables | 8,604 | 13.1 % |
| Variables | 82 | 0.1 % |
| Screen, bitmap, colour, stack, I/O | 8,603 | 13.1 % |
| ROM the game runs under | 512 | 0.8 % |
| Unused | 51 | 0.1 % |
| Tier | bronze |
|---|---|
| Coverage | 100 % of the bytes the game uses have a description |
| Build analysed | Dualis disk release; language menu reached from a hard reset |
| Copy | agent-draft |
| Tools | host: Linux x86_64, disassembler: regenerator 2000 0.9.20, publication: Python 3; canonical symbols_export.py and listing.py, emulator: VICE MCP 3.13.1, disassembler_check: regenerator 2000 0.9.20, browser: Firefox 157.0 (installed); WebDriver BiDi |
| Model | gpt-6.1-sol |
| Kit version | 0.0.55 |
Sources: [game documentation](https://mocagh.org/miscgame/castlemaster-alt 3-manual.pdf) and the contributor’s annotated listing, consulted 30 September 2026. The documentation supplies the feature inventory; the imported annotations supply verification leads.
| Feature | Status | Evidence or open work |
|---|---|---|
| First-person movement and stone throwing | open | $47C5 main loop; gameplay reached live, individual action paths not replayed |
| Area and object database | confirmed | All 34 headers and 546 objects independently parsed; native area-loader calls match every header |
| 3D transforms and renderer | open | Fourteen projected vertices checked natively; complete transforms, clipping and painter output remain open |
| Script record structure and event selectors | confirmed | All 193 streams/809 tokens parse; six controlled event-selector fixtures pass |
| Ordinary object and room interactions | open | Script consumers traced; ordinary interaction routes remain to be exercised |
| Language and character selection | live | Hard-reset disk boot through to WILDERNESS |
| Disk saving and loading | live | Native device 8 SAVE/LOAD restores the entire 652-byte payload |
| Tape saving and loading | open | Tape transfer has not been exercised |
| Strength, keys and spirits | open | Initial strength 16 from $9D05; runtime keys $245A, spirits $2454, target 21 at $9D49; progression needs emulator input tests |
| Riddle panels, messages and font expansion | confirmed | Nine panels independently parsed; 61 fixed 16-byte messages; six native font expansions match |
| Run/walk/crawl and view controls | open | Raw distances 30/60/240 at $9D46-$9D48; input and signed movement routines traced, complete input replay remains open |
| Instrument decoding and music requests | confirmed | Eight instrument windows checked natively; 17 request groups run for 25 ticks each |
| Sustained music and effects | open | Exact sustained audio/waveforms and ordinary effect routes remain open |
| Information display and sound selection | open | $77FE menu and $123A/$123B sound flags traced; individual controls need ordinary input replay |
| Lightning and hazards | open | $483E scheduler and $4FA3 collision paths traced; boundary/ordinary-route tests remain open |
| Full rescue route | open | Database and scripts are preserved; no end-to-end input replay |
Imported annotations seed the listing; the checked contracts are recorded in facts.md. Scope and the disk boot are described in orientation.md.
Packed text and loaded HUD graphics are traced and checked independently. Six native glyph fixtures and all eight default instrument windows pass; the initialized HUD frame reconstruction matches every emulator pixel.
The supplied RAM dump was captured at the language menu. The matching Dualis D 64 was recovered from the contributor’s repository history and kept privately as work/castle-master-dualis.d 64. Its first directory entry is CASTLEMASTER/[D], 179 blocks. No game binaries or snapshots are published.
With VICE MCP 3.13.1 (PAL):
work/disk-menu.vsf without ROMs using pause() from kit/c64/vice.py before saving.1 for 60 frames, release for 30; hold Return for 60, release for 30. Repeat 1, Return for the character menu with the same holds and gaps.work/disk-play.vsf without ROMs.The emulator check on 30 September 2026 passed 55/57 checks. Failures: pause-at-instruction and unpaced-calls. This run uses pause() (which finishes the instruction by advancing a frame) and paced calls. The game was booted from disk for this recipe; no restored private snapshot is needed.
The menu reached from disk matches all 27,968 code bytes and all 778 word-typed bytes in the original analysis. Of 36,790 byte-typed bytes, 57 differ, at processor-port backing RAM, stack/keyboard state, engine state and SID player state. The original text export seeds labels and comments; the Source bytes come from the newly booted snapshot.
Comparing menu with settled play, $87CC–$95DB changes in 3,552 bytes as menu storage becomes the linear viewport; $E000–$FF3F changes in 3,218 bytes as the bitmap is drawn. The world database $9D00–$BF8F and interpreter tables $13AE–$13ED agree byte for byte. There are 65 differing code-typed bytes across nine blocks. All are operand bytes and all have traced direct producer instructions; the private producer report identifies them. A cold hand-over capture at $476F is available as work/entry.vsf; Space must be held after the Dualis intro has reached its steady waiting loop. The menu retains the authored menu occupant that rendering replaces, so the listing uses disk-menu.vsf; verification uses the running game and disk-play.vsf. Generated viewport pixels and palette cells stay out of the denominator; the loaded surrounding HUD and its initial colour planes are authored data and remain in it.
The menu snapshot has processor port $35, DDR $2F. RAM vectors: $0314=$737F, $0318=$7579, $FFFA=$7579, $FFFC=$476F, $FFFE=$FF48; these agree with play. VIC bank $C000, screen $C400, bitmap $E000.
Import the committed symbol map onto your own menu snapshot with symbols_import.py, start regenerator 2000 on the resulting project, then export with symbols_export.py. Build with python 3 kit/scripts/listing.py games/c64/castle-master games/c64/castle-master/work/disk-menu.vsf --entry games/c64/castle-master/work/entry.vsf. Compare with the play snapshot separately; --entry supplies the live capture at the loader’s hand-over.
Original export SHA-256: 79505396ccd9542c55e67fb381b42210284ceba0dc51aa3d7dd1d39df277753d. Its maker’s model is unknown.
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.