wyvern-1, 7B, vs open models up to 32B. first try, exact bytes:
held-out functions (234) = 25.2% vs 9.0% (Qwen2.5-Coder-32B)
new targets (158) = 9.5% vs 2.5% (Qwen2.5-Coder-32B)
ido 5.3 compiles exactly what you wrote, empty else included.
sm64's alloc_display_list keeps an else { } with nothing in it. ido -g turns it into a jump: 116 bytes with it, 112 without
swap 2 declarations in main_pool_free: ido changes 13 of 72 words, gcc 15 changes none
one function from super mario 64, built the way the sm64 decomp builds each release:
us 1996 = ido 5.3 -g, 176 bytes
eu 1997 = ido 5.3 -O2, 152 bytes
ique 2003 = egcs 1.1.2 -O2, 148 bytes
same C, 3 binaries, so ./check runs the original compiler with the original flags
borland c++ is the dos part of stage 2, and it builds 16-bit code:
8b 46 04 = mov ax,[bp+4] there, mov eax,[esi+4] in stage 1's 32-bit code
calls and returns are near or far (e8/c3 or 9a/cb), set by a memory model flag
wolf3d's exe was built in borland c++ 3.0
stage 2 runs on tools the decomp scene built by hand:
m2c 2018 · permuter, asm-differ 2019 · sm64 decomp 2019 · ido-static-recomp 2020 · https://t.co/KtwPt9sKiA 2021 · wibo 2022 · maspsx 2023
the sm64 decomp's readme lists the sha1 of all 5 roms it builds. ours is the us one
super mario 64 is past halfway: 1,085 of 1,707 functions matched on ido 5.3, in under 5 hours
by bytes it's 30%. the small functions go first, the big mario action code is still ahead
https://t.co/XxBCMMK1ip
@kiasersensei the agent can only edit its .c file and run ./check. no shell, no web, no source tree in the sandbox
inline asm, .incbin and non-header includes are rejected, the server recompiles every candidate itself, and each attempt is public on the function's page
how a match counts. the agent's own score is thrown away.
1. attempt 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 = 0 bytes off, credited to the agent
5. else = partial, back in the queue
compile and compare against the original binary = the right test. we run it in public, doom first, and every function that passes trains our open model.
AI is now being used to help decompile games you own.
Decompwtf is an open-source project that lets AI coding agents work through a game’s compiled code and reconstruct it as C/C++.
>The reconstructed code is compiled and compared against the original game binary producing the exact same machine code.
>It supports projects targeting systems including N64, PS1, PS2, GameCube, Wii, GBA and DS.
>The project can also continue existing community decompilation projects, potentially making large-scale decompilation work much faster.
>It runs locally, with no account or game data uploads required. https://t.co/7rbmHGJVoQ
wyvern-1, 7B, vs open models up to 32B. first try, exact bytes:
held-out functions (234) = 25.2% vs 9.0% (Qwen2.5-Coder-32B)
new targets (158) = 9.5% vs 2.5% (Qwen2.5-Coder-32B)
stage 2 = super mario 64. live: https://t.co/XxBCMMK1ip
compiler = sgi ido 5.3, -g. nintendo shipped the us game code unoptimized
target = 1,707 functions, 472,344 bytes of mips
agents = 2
./check was tested first on the decomp's C: 7 functions exact, 6 broken copies rejected
the stage 1 lineup is done: doom, wolf3d, quake, heretic, quake2, duke3d all matched on gcc, and wyvern-1 is out with open weights
decompilation pauses for a bit while we move the workers to stage 2, the retro compilers (ido, psyq, borland)
wyvern-1 is out, open weights: https://t.co/Oj5HysJhl5
size = 7B, LoRA on Qwen2.5-Coder-7B-Instruct
pairs = 5,316, every one verified by gcc
in = a function's machine code, out = C
wyvern-1 = trained on 5,316 verified pairs, 473 steps on one A100
weights = out after the bench
bench = wyvern-1, 7B, vs open models up to 32B, first try, exact bytes
every decompilation is public, start to finish
release = the C tree to download, its sha256, verify --yourself
function = the original asm, the agent's C, every attempt it took
duke3d: 337 functions, 629 attempts, all of them open https://t.co/HQrG98UUm6
duke nukem 3d = done, and with it the whole lineup. 337 functions: 316 matched, 16 with a hint, 5 kept as asm.
every function compiled and compared on its own.
next on the workers: hexen
https://t.co/P4NhKv4WJ9