Getting started

This repository holds a commented disassembly of Frogger for MSX (Konami, 1983, cartridge RC-704). Everything here is generated from the binary and can be reproduced from it.

What you need

Put the ROM in the root as frogger.rom. It is 8192 bytes exactly:

sha256  0d60ff78e1ab466bce6e888193ca62d6df71fa07344c8ea31f7a8b486323c5f5

make comprueba checks it for you.

The commands

make                # trace, listing, reassembly, checks and tests
make listado        # rebuild src/frogger.asm from the notes
make verify         # reassemble and compare against the ROM, byte for byte
make sanity         # nothing declared as data may come out as code,
                    # and not one byte may be left unassigned
make test           # the test suite
make imagenes       # rebuild the pictures from the ROM
make web            # rebuild this site

What is in each folder

src/frogger.entriesthe entry points, each with its justification
src/frogger.nocodethe four tables the tracer must not read as code
src/frogger.notesthe only file edited by hand: every annotation
src/frogger.asmthe listing, generated by tools/mkasm.py
tools/the tracer, the listing generator and the measuring tools
tests/23 checks over the listing and the notes
docs/this site

How to read the listing

Annotations are anchored to an address, so they survive a retrace. The directives follow theNestruo's conventions:

La label and what the routine does
Ca comment on that one line
Ba block header before that address
Da range of data, with a name and an explanation
Fhow wide the rows of a data block are

How it was done

The tracer follows the real flow from the entry points. Whatever cannot be worked out statically — the interrupt hook, the four tables embedded behind a call — is declared by hand in the .entries file, each with the reason written next to it.

Nothing here is a guess dressed up as a fact. Where something is not known, it is in Open questions and it says so.

Reproducibility

make verify reassembles the listing and compares the result against the original ROM. It has to come out identical, byte for byte. make sanity then checks what reassembly cannot catch: that no range declared as data is being read as code, and that not one of the 8192 bytes is left unassigned.