The tape
The disassembly is of the original tape, loaded the way a Spectrum loads it: SkoolKit's tap2sna runs the ROM's own LOAD on a simulated machine and stops at ENTRY, where the BASIC loader's PRINT USR 24064 enters the game, before the game has run a single instruction. That matters here: the game turns sprites round in place as objects face about, rewriting their bytes and the flags in their headers, so an image taken once it has drawn anything is no longer the tape. The tape holds a one-line BASIC loader, the loading screen and one block of code and data, $5E00 to $D89D. The loading screen's header asks for 24576, but the loader reads it with LOAD ""SCREEN$, which puts it on the screen whatever the header says. Nothing is encrypted and there is no protection.
Code and data
Which bytes are code was found by running the game, not by reading it. The build plays it in SkoolKit's simulator -- with each control method, walking, turning, jumping, firing, picking up and putting down, pausing, in every room, and through staged scenes for the quest, the ending, game over, and the things that fall from the sky -- and records every address the processor fetches an instruction from. Recursive descent then follows the branches out of what ran, and the jump table of update routines (UPDATES), inventing nothing. Everything else is data. The level data -- the room directory (ROOMS), the scenery and object templates, the graphic table (GRAPHICS), the sprites and the font -- is laid out a record per entry from the game's own bytes each time the disassembly is built, so the game's design is never written into the repository's files. Each sprite's picture is drawn from its bytes the way the game's drawing code reads them. The listing reassembles byte for byte with sjasmplus, and the snapshot rebuilt from it is the one the tape made, byte for byte.
What was known before
The room format, the templates and the graphic table were first worked out for a remake of the game on the Filmation engine in the emulator this sits beside, by reading the loaded image and watching the game run. Those notes were a starting point here: every address taken from them was checked against the code before it went into this disassembly.
Names, and how things were checked
No one else's disassembly of Pentagram was used. Where Pentagram's code is Knight Lore's, the names and descriptions follow this project's own Knight Lore annotations, which in turn credit the reference map by tcdev and Michael R. Cook; Pentagram's own routines were named from reading and running them. The pictures and sounds on these pages are drawn and recorded by the game's own code, run in SkoolKit's simulator when the pages are built. A claim marked watched was checked in the zx_server emulator: a private instance loaded with the loaded game, driven turn by turn by breakpoints on the main loop, with every staged change to the game's state stated where it is used.