The cartridge families
The previous page compares bytes, and so it only sees a shared routine if it was also assembled at the same address. Here each instruction is normalised by zeroing its sixteen-bit operands — the ones carrying addresses — and sequences of instructions are compared. A long run of instructions identical but for the addresses is the same routine reassembled somewhere else.
The difference is not theoretical. Super Cobra and Yie Ar Kung-Fu share 203 instructions, and the byte comparison found them only 39. Golf and Tennis: 632 instructions against 256 bytes.
Nothing is traced. Each disassembly's listing carries every instruction with its address in front, so the sorted addresses are the code, and an instruction's length is the distance to the next one. When that distance exceeds four bytes — the Z80 maximum — there is data in between, and the run is cut there. 37 cartridges are measured; the other 12 stay out and say why: tapes and MegaROMs declare no single origin.
| cartridges | years | closest pair | which ones |
|---|---|---|---|
| 20 | 1983–1986 | athletic / cabbagepatch · 44.5 % and 40.8 % | athletic, billiards, boxing, cabbagepatch, goonies, hyperrally, hypersports1, hypersports2, hypersports3, kingsvalley, knightmare, monkey, mopiranger, pingpong, pippols, roadfighter, skyjaguar, supercobra, yiearkungfu, yiearkungfu2 |
| 5 | 1984–1985 | hyperolympic1 / hyperolympic2 · 67.3 % and 63.4 % | baseball, golf, hyperolympic1, hyperolympic2, tennis |
| 2 | 1983–1983 | timepilot / frogger · 7.4 % and 14.9 % | frogger, timepilot |
The split does not follow the year. The large family spans 1983 to 1986 and the five sports titles run from 1984 to 1985: they overlap. Nor does it follow the catalogue number.
On their own, reaching the threshold with nobody: antarctic, gamemaster, mahjong, soccer, twinbee.
A pair is joined when the shared code is at least that share of both — the lower of the two, not the average: Road Fighter sharing 10 % of its own code with Soccer means nothing if for Soccer it is 4 %. Sweeping the threshold shows the split is not a whim:
| threshold | pairs | group sizes |
|---|---|---|
| 2 % | 202 | 28 + 2 + 1 + 1 |
| 3 % | 144 | 28 + 2 + 1 + 1 |
| 4 % | 99 | 22 + 5 + 2 + 1 + 1 + 1 |
| 5 % | 60 | 20 + 5 + 2 + 1 + 1 + 1 + 1 + 1 |
| 6 % | 33 | 16 + 5 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 |
| 8 % | 14 | 5 + 3 + 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 |
| 10 % | 8 | 5 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 |
The group of five and the group of two are the same from 4 to 8 %, while the large family gradually falls apart. That is what tells a family from an artefact of the threshold.
It groups by measured shared code, and nothing else. Two cartridges landing in the same family does not say the same team wrote them or that one came from the other: it says they have routines in common today. And the family of twenty, joined by a 5 % threshold, is more a neighbourhood than a family: inside it there are pairs at 44 % and pairs that barely touch.