Five consoles, five ports, and the numbers each one actually produced.
WHERE EACH PORT STANDS
NES — Ricoh 2A03 (6502) at 1.79 MHz. 0.624 to 0.634 seconds per token, about 1,117,000 to 1,134,000 cycles per token. The ternary kernel costs 10.688 cycles per MAC against an 8-cycle primitive. Output is token-exact against a host reference.
SNES — Ricoh 5A22 (65816). 7.030 tokens per second on SlowROM at 2.68 MHz, 8.019 on FastROM at 3.58 MHz. Ternary beats int8 by 2.02x even though the 65816 has a hardware multiply, which is the result I did not expect.
Sega Genesis — Motorola 68000. 1.674x over the int8 baseline, 1.77 to 2.00 tokens per second on screen, 2.21 headless. The on-screen rate is frame-locked, so 2.00 tok/s is exactly 30 frames per token.
Nintendo 64 — VR4300, MIPS III. 6,356,992 parameters. 1.23 tokens per second scalar, 2.19 with the RSP overlay, a 1.78x win.
Game Boy Color — SM83, which has neither a multiply nor a divide instruction. A six-patch optimization stack measured 10.09x end to end, roughly 498 seconds per token down to about 50. Contributed upstream rather than forked; those PRs are open, not merged.
HOW IT WAS MEASURED, AND WHERE I CANNOT YET CLAIM SILICON
This distinction matters more than the speeds do, so here it is plainly.
The Genesis runs on real hardware. The photo is a Model 1 from 1988 with an EverDrive, answering "When were you born?" on a real television. But the 1.674x figure is not from that console — it comes from MAME memory taps, exact bus cycles, reproducible to the integer across runs. The bench also runs with display and interrupts disabled for determinism, so the in-game cost is somewhat higher than the number suggests.
NES and SNES carry exact cycle counts.
The N64 and Game Boy Color figures are emulator measurements — ares for the N64, PyBoy and SameBoy cross-validated for the Game Boy — and neither has been run on silicon yet.
If you own the console and the flash cart and your numbers come out different from mine, that is the single most useful thing anyone could contribute here.
TWO NUMBERS I PUBLISHED THAT WERE WRONG
The N64 port shipped with an on-screen counter reading about 60 tokens per second. The counter was broken. The real figure is 1.23. A 4.769x speedup also circulated for that port; it was a ratio of CP0 cycle counts taken on an int8 blob that is not what ships, and on the ternary blob that does ship the RSP margin is 1.78x.
The Genesis port was first written up at 11.3x. That number was measured on an x86 host rather than on the 68000, in a document that opened by claiming everything was measured. The two machines differ most exactly where the two weight formats differ: x86 punishes the old format's data-dependent branch with 15 to 20 cycle mispredictions, and the 68000 has no branch predictor to mispredict. On the actual target it is 1.674x.
A documented Top-K attention result was retracted as well — the selection loop kept the first K survivors in ring-buffer scan order rather than the strongest K, so it never tested Top-K at all.
All of these corrections sit in the repos next to the original claims. An instrument that lies to you is worse than a slow result, and the entire point of quoting cycles is that somebody else can go check them.
WHY TERNARY
The 6502 and the SM83 have no multiply instruction at all, so ternary weights reduce the inner loop to add and subtract and a zero weight costs nothing whatsoever. That much is obvious going in. The surprise is the SNES, where a hardware multiplier exists and ternary still wins by 2.02x — because on these machines the scarce resource is moving operands, not multiplying them.
THE PART THAT KEEPS NAGGING AT ME
The Ricoh 2A03 shipped in 1975. Backpropagation was published in 1986. Cartridge bank switching and battery-backed RAM, which is everything the NES port leans on, were ordinary consumer technology by 1985. The transformer architecture was published in 2017.
A Cray-1 sustained roughly 160 MFLOPS in 1976. The training run behind the 6.36-million-parameter model is on the order of 10^15 operations, which works out to three or four months of Cray-1 time. Expensive, but exactly the kind of allocation researchers actually received. A Cray-2 in 1985 could be configured with 4 GB of memory and would have run a GPT-2-sized model at a second or two per token.
Training GPT-2 in 1985 is a different story: somewhere between 1,501 and 25,017 years on that Cray-2, and only about 27 of them were ever manufactured. All of them running flat out for a year would finish under 2 percent of a single training run.
So the small models were reachable and the large ones were not, and the gap has a date on it. The barrier was an idea, not a machine.
Full writeup, including the year-by-year supercomputer table: https://elyanlabs.ai/retro-transformers.html
REPOSITORIES
NES: https://github.com/Scottcjn/elya-nes
SNES: https://github.com/Scottcjn/elya-snes
Genesis: https://github.com/Scottcjn/legend-of-elya-genesis
N64: https://github.com/Scottcjn/legend-of-elya-n64
Game Boy Color: https://github.com/maddiedreese/gbc-transformer (our PRs #2 through #7)
Scott Boudreaux