Rules (v0.14)

Every statement in a core’s own code comments, readme and shipped files is classified by the rules below. The rules describe what a statement says; they never judge whether it is true (see “Taken at face value” in the README).

Comments are read as sentences, the way a person reads them: consecutive comment lines are joined, a blank or decorative comment line (====, ----) ends a paragraph, and table rows (columns lined up with spaces, or | separators) are read one row at a time. A comment after code on the same line stays on its own. Each rule counts at most once per sentence.

Hardware side

Rule Points Fires on Reasoning
Reports a measurement taken on the original PCB +3 a measurement word (measured, logic analyzer, oscilloscope) together with the original PCB/board and a stated value The most direct evidence a comment can carry. Measurements of the MiSTer itself (SignalTap, M10K, build numbers, SDRAM, PLL, clock-domain crossings) are excluded, and so are negated ones (“never been measured”, “unmeasured”).
Notes where it differs from MAME +3 “unlike MAME”, “differs from MAME”, “MAME doesn’t model / emulate / implement …”, “schematic and MAME disagree”, “bug in MAME” A stated difference means the developer had another reference and checked. Loose words near “MAME” (differ, bug, never) are not enough: “0 of 92160 pixels differ” is a MAME match.
Says it was checked against the original PCB +2 verified / tested / checked / confirmed against or on the PCB, original board, arcade hardware Only an explicit original board counts. Negated statements (“not yet confirmed”, “haven’t checked it on the PCB”, “unverified”, “until that is confirmed”) do not fire.
Ships hardware documentation files +2 schematic sheets, schematic PDFs, PAL/GAL equations in the core’s own folder Having the documents is stronger than citing them. Files in bundled libraries, bench/lab folders and MiSTer accessory boards (hardware/) are excluded.
Says it was checked on “real hardware” +1 verified / tested on real hardware, on HW On MiSTer, “real hardware” often means the MiSTer board itself, so this counts less than an explicit PCB. Excluded when the context is the FPGA (SignalTap, DE10, CRT, M10K, simulation, SDRAM, PLL, clock-domain crossings) and when negated (“UNVALIDATED ON HARDWARE”).
Cites hardware documentation that MAME’s driver does not +0.5 schematic sheet/page, part numbers (74LS…, 82S…), Atari SP-/136xxx numbers, chip locations next to a chip word (PROM 7U, LS197 @5B), “based on the schematics” Consulting documentation is not verification, so the weight is low.
Cites hardware references or measurements that MAME’s driver also gives 0 as above, when every reference cited also appears in the MAME driver files for the same games (locations matched in any case, e.g. dk3c.5l); and a reported measurement whose precise figures (three or more decimals, e.g. 55.4859 Hz) all appear there too. Crystal frequencies in MHz are not treated as such figures: they are part values every source prints. Copying them from MAME would look the same, so they prove nothing. Shown, not counted; each links to the MAME line.

MAME side

Rule Points Fires on Reasoning
Says it was translated or ported from MAME −3 translated / ported / transcribed / taken / carried over from MAME, “From MAME src/…”, “MAME 1:1”, “based on MAME”, “a port of MAME’s …”, “based on the … from MAME” The developer’s own account of the source. Not when negated: “read off SP-316 sheet 3 rather than taken from MAME” is the opposite, and so is “this replaced a port of MAME’s core”.
Says it matches, follows or was checked against MAME −2 matches / verified / tested / bit-exact / pixel-exact against MAME; “we follow MAME”, “ground truth: MAME”, “MAME’s numbers are what we model” MAME as the reference. “Matching MAME convention” (a naming or polarity convention) does not count.
Keeps a MAME approximation −1 MAME’s guess, hack, placeholder, surrogate, approximation kept Where MAME itself notes a stand-in for unknown hardware.
Shares text with the MAME driver without saying so −1 a comment sharing a 6-word run with the MAME driver, in a module that does not declare a translation; standard license notices (GPL, LGPL, BSD, MIT, Apache) do not count Text carried over in a C++-to-HDL translation. Each item links to the MAME line it shares.
Cites MAME source −0.5 a MAME file, function or line reference Using MAME as a reference is not the same as verifying against it, hence the low weight. A .cpp file named without the word MAME counts only when it can be MAME’s: not a file of the core’s own repository (unless MAME has a file of that name), not a testbench or generator (tb_…, gen_…, …_ref.cpp), not the MiSTer Main’s (user_io.cpp, menu.cpp, …), and not in a comment naming another emulator such as Daphne.

Combining

What is excluded

Closed-source cores

Coin-Op Collection cores get no reading and no needle: the method needs source code. Where the team has published hardware research for a core’s board (its Development-Documentation repository: schematics, PCB layouts, board photos), that material is listed beside the core with links, and the open-source components the team built (Development-Modules) are listed once for the group.

None of it is scored or colored as hardware evidence, because it is one-sided by construction. For an open-source core every statement is visible, including the MAME citations nobody chose to show; for a closed core only what the team chose to publish is visible, and anything pointing at MAME stays private. Scoring it would lean every closed core toward hardware for that reason alone. Components are not attached to individual cores either: matching them through the chips in MAME’s driver proved unreliable (a ROM checksum containing “468705” matched a 68705; one driver file covers many boards), and even a correct match would not show that the closed core uses the component.

The same “source not published” state covers any build whose design is not public: a developer database build with no repository behind it, and a build whose repository holds only builds or MRA files and no HDL (the note beside it says which). JTCORES is the exception to the second case: a JT core can take its HDL from a sibling core’s folder, so an empty folder there does not mean the source is private.

Known limitations

History