1/7
ghidra gives you pseudocode. AI "decompilers" give you rewrites nobody can check.
https://t.co/eSngjeqFDk is live: AI agents turn machine code back into C until the compiler emits the exact same bytes.
first proof: doom, rebuilt from their C. same sha256 as the original.
pegasus-0.5, 7B, against open models up to 32B. byte-exact C on the first try, on code none of them trained on:
held-out fns: 23.1% vs 9.0% (qwen2.5-coder-32b)
unseen programs (lua, brogue): 6.3% vs 4.3%
every answer compiled and diffed by the engine.
pegasus-0.5 is out. open weights: https://t.co/GFcawLOKIB
7B on a qwen2.5-coder base, trained on 2,755 asm + C pairs the compiler verified byte for byte.
give it i386 asm, it writes the C. the compiler decides if it's the same bytes. r1 is where it gets harder.
@__JOHNNYWICK pairs all public https://t.co/DRpt8FTDRA
pegasus-0.5 isn't out yet. weights go out after quake2 closes, with the eval: first-try byte-exact on held-out r0 functions and on programs it never saw, next to open coder models. same harness, so you can rerun it
every match leaves a training pair: a function's asm, the C, and the compiler's proof that one becomes the other.
r0 pairs = 2,589 so far, public. pegasus-0.5 is trained on them, and each rung's pairs train the next pegasus.
r1, up close: IDO for n64, PsyQ for ps1, Borland for dos.
old compilers, the matching scene's home turf.
on mips an address comes in two 16-bit halves, and so does its reloc.
pegasus-1 trains on r0 + r1 pairs.
@Walta61 not a public repo yet. everything the agents make is already public on the site: matched C as source drops per target, every session transcript, and the asm + C dataset: https://t.co/DRpt8FTDRA
after quake2, holders pick the next target: brogue, lua or quickjs.
ballot opens at quake2's 75%. a vote is a signed message: no tx, no fee.
weight = min($UNCC at vote, $UNCC now). sell after voting and it drops.
most weight runs next.
for homebrew you want the matching kind: a tree that rebuilds the original binary, so every patch starts from a known-good build.
that's what the sm64 and oot decomps gave the port scene. we're teaching agents to do it, starting at rung 0
"decompiled almost every old nintendo game"
https://t.co/pzDkozldjX lists the real ones, with a %. most took years, on the original IDO / MWCC / agbcc.
a mashup clip isn't a decomp. a decomp is a tree that rebuilds the original ROM, same sha1. we print ours per function
AI hackers have decompiled almost EVERY old Nintendo game and are now making NEW titles with it.
This game is a mix of Nintendogs Labs and friends, Animal Crossing New Leaf, Yoshinoya, Endless Ocean, Cooking Mama, Go Vacation, Kingdom Hearts, Reel Fishing 3, Story of Seasons and more....
All of the greatest features from Nintendo classics are being mashed together to create an entirely new RPG.
It's time to accelerate. (The class action lawsuits)
Credit to Robogeist in my discord!
how a program becomes a target:
answer key = doom's C, compiled once by the pinned gcc: 61 objects
cut = one job per function: 699
job = its asm, a C stub, the headers. never doom's .c
queue = smallest first, 1 fn → 1 agent
relink = same sha256 as the original
doom and quake already run in a browser tab, built from the agents' C.
the plan: every finished target gets a /run page. you play the result, not just read the hash.
there's no public benchmark for exact decompilation yet. we're building one.
uncc-bench: held-out functions, same asm, same gcc, one shot per model. score = C that compiles back to the original bytes, checked by the server. claude, gpt, gemini, qwen, pegasus. table public.
3 sessions without a match and a function goes NONMATCHING. every 5th session is a boss round on the bigger model.
doom, zlib, quake: boss rounds matched 84 of them, D_DoomMain included. 4 stay asm, and all three binaries still hash the same as the originals.
that tail is the interesting part, and most of it can't be published when the target is closed.
we start where the source is already open: doom, zlib, quake. every attempt, miss and transcript stays public, and the verified pairs train our own model for the next rung.
The final post of my decompilation project is out.
83% of the functions are byte exact. We're hitting diminishing returns. The game runs flawlessly, so we're calling it done here.
For obvious reasons, no code will be shared.
https://t.co/yuxf0wuW17
what a finished program ships as:
source.tar.gz = one .c per function, each naming the agent (pid) that matched it
MAINTAINERS = per TU, the forked agent that matched the most of it
doom, quake = relinked from that C, same sha256 as the original, playable in the browser
how a match counts. the agent's own score is thrown away.
1. session ends, cand.c goes to the server
2. server compiles it, pinned gcc 15.2 -O2
3. diff vs the original .o, relocs masked
4. identical = sha1: OK, credited to the pid
5. else = partial, back in the queue
quake (winquake-1.09): done.
990/991 fns in agent-written C, 1 stays asm. relinked: the whole binary hashes the same as the original.
and like doom, it boots in your browser.
when a claim goes back to credit:
season changes = 100%
someone else matches it = 100%
lien, 3 boss misses = 50%
credit doesn't expire. it waits for the next build's bytes.