Words the reports use

The plans and reports in the notebook and the calibration cart were written by the people doing the work, for each other, in the middle of it. We pull them onto this site as they are, because rewriting a report is how a report quietly stops being true. So they keep the shorthand we use among ourselves. This page is that shorthand, a word at a time, in the sense the reports use it.

How the work is checked

Golden. A recorded reference run: the output of someone else's simulator of the same chip, saved to a file, which ours has to replay exactly. "Held to the golden" means our run and the recording were compared, step by step, and agreed. A run stamp that says REQUIRE_GOLDEN=1 means the recordings were required for that run, not skipped when absent.

Oracle. Anything independent we check against: a reference simulator, a published test ROM such as blargg's, a standard's own tables. When the reports say no external oracle exists, as they do for the television's picture stages, they mean there was nothing real to compare against, so the stage is checked against its own stated mathematics instead.

Gate. A check a milestone has to pass, written into the plan before the work starts, with how close counts as passing. A report says which gates closed and which are still open.

Mutation, and MUTATE=1. A sabotage the tests must catch. Setting MUTATE=1 deliberately breaks one named thing (a wrong byte, a missing table entry, an old rule switched back on), and the tests that guard it have to go red. A test that still passes under the sabotage was not testing anything, so each report says how many tests went red.

Self-counts. The documents' own numbers, checked. A scanner finds every figure a document states and compares it with what the code or the run actually says, so a report cannot drift away from the thing it describes.

Pinned. Fixed to an exact version so it cannot change underneath us: a data file pinned by its hash, a library pinned by its tag. A timing that is "fitted once and pinned" was measured one time against the recording and then written down, never adjusted again.

Refused by name. When something is asked for that does not apply (a filter that cannot work on the NES's signal, a test that drives a pin the chip does not have), the code declines and says why, instead of producing a number that would look right and be wrong.

Run stamp. The line at the top of a report saying when it was run, at which commit and with which tools, so every figure below it can be traced to the run that printed it.

What the models are made of

Rung, and the ladder. For the chips, a rung is one way of running the same chip, and the ladder is all of them in order. Rung 0 is the chip simulated transistor by transistor, which is slow and is the truth. The higher rungs are faster versions (rung 3 is the fast core), and each one is checked against rung 0 before anything relies on it. In the signal path, the rungs are the decoder's filters instead: Rung A is the notch filter, Rung B the two-line comb (which the NES's signal cannot use, so it is refused), Rung C the three-line comb the NES was built for, and Rung D a comb across frames, which the measurements corrected. In ntsc-crt's own reports, "the ladder" also means its run of milestones, M0 to M5.

Authored, and measured. Measured means read off something: the transistor-level chip, a scope, a recording. Authored means we wrote it ourselves, from a datasheet, a schematic or a wiki, because nothing could be measured yet. The reports label every authored value as authored, so nobody mistakes a choice we made for a fact about the hardware.

World. A test scene: a fixed set of memory contents and register writes that a chip runs from power-on, such as the standard world, the sprite world and the scroll world for the picture chip. The patterns look like noise on purpose, so a single wrong dot has nowhere to hide.

Harness. In the chip reports, the simulated surroundings a chip runs inside: its memory and a bus that feeds it register writes the way a real CPU would. In the bench documents, a harness is the plain kind, the bundle of wires inside the console.

Fixture. One recorded scripted run the tests replay, named after what it exercises (a stalled CPU, a reset in the middle of a run).

Divergence. A place where our model knowingly differs from a reference, written down with the reason and how large the difference is. The signal path's list is one.

Lockstep. Running two chips side by side on the same input, one step at a time, comparing as they go: the transistor-level chip against its fast version until they disagree, or one chip against another through the pins they share. It is how the fast chips' mistakes were found.

The milestone letters

Each repository numbers its milestones with a letter of its own. A plan is written before a milestone's work and a report after it.

Nthe console as a whole: the contract (N0), the fast 2A03 (N3), the glue, the console, its picture, its sound and its window (N4 to N8)
Athe 2A03, the NES's CPU and sound chip, at the transistor level
Pthe 2C02, the picture chip, from the transistor level to its fast version
Mntsc-crt, the composite signal between the console and the television
Bthe bench, where a real console and the model get the same controller presses
Cthe calibration cartridge

What this page does not cover

The names of signals and registers inside the chips (pal_d, $2002, OAM) are the chips' own, and the nesdev wiki explains them far better than we could. Code identifiers and file paths in the reports point into the repositories and mean what the code says. If a report uses a working word that is not here, that is a gap on this page, and we would like to hear about it.