Getting started

To reproduce this disassembly you need Python 3, GNU make and Pasmo. The cartridge image does not travel in this repository: bring your own.

qbert.rom    32,768 bytes
sha256       bd253f3285b3bf31501cd34f593f35ed3b9adfc6eb44c360c6fd59f8ab2c3684

With the file at the root of the repository:

make            # listing, verification, consistency and tests

What each step does

commandwhat it does
make compruebachecks the ROM's sha256
make listadotraces the flow and generates src/qbert.asm from the binary and the notes
make verifyreassembles the listing and compares its sha256 with the ROM's
make sanitychecks that no data comes out as code and that no byte is left unassigned
make testthe tests
make densidadhow many instructions carry a comment, routine by routine
make imagenesdraws the web's pictures from the ROM
make cotejachecks those screens against the openMSX dumps
make webgenerates the HTML pages and checks the links

make verify is the one that decides: it has to end with OK: reproducible byte a byte.

Where everything is

filewhat it is
src/qbert.notesthe names, comments and data blocks, anchored to addresses
src/qbert.entriesthe entry points the trace cannot deduce, each with its reason
src/qbert.nocodethe areas that are not code even if the trace could enter them
src/qbert.asmthe commented listing, generated
tools/z80trace.py, tools/mkasm.pythe tracer and the listing generator
tools/graficos.pythe cartridge's two formats: the VRAM RLE and the text scripts
tools/sonido.pywalks the sound data the way the engine reads it
tools/pantallas.py, tools/imagenes.pybuild every screen from the tables and paint it
tools/coteja.py, tools/coteja_todo.pythe check against the openMSX dumps
tools/omsx_*.tcl, tools/lanza_*.shthe openMSX probes: see In the emulator

The pages: The game, The cartridge, The code, Findings, In the emulator and Open questions.