1993년 Amiga 게임을 LLM이 68000 어셈블리를 읽어 Godot으로 포팅한 후기
Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly
TL;DR Highlight
LLM에 72,758줄 어셈블리를 맡겼더니 원본과 바이트 동일하게 재빌드됐다
Who Should Read
문서 없는 레거시 코드를 새 플랫폼으로 옮겨야 하는 개발자
Core Mechanics
- C++ 34,000줄을 하룻밤에 Godot으로 옮겼다
- 2010년 C++ 엔진을 Godot 4로 옮기는 통제 실험이었다.
- 22:23에 시작해 21분 만에 플레이 가능한 캐릭터가 나왔고 02:15에 내보내기까지 끝났다.
- 손맛 조정에는 이후 사흘이 걸렸다.
- 어셈블리 재빌드가 원본과 바이트 일치했다
- 72,758줄·26파일의 68000 어셈블리를 vasm으로 다시 어셈블했다.
- 출시된 바이너리와 바이트 단위로 같아질 때까지 반복했다.
- 이후 모든 주장을 바이트 비교로 검증할 수 있게 됐다.
- 레벨 포맷을 힌트 없이 한 번에 풀었다
- 1년 전 이전 모델은 여러 차례 시도와 힌트가 필요했다.
- 이번엔 그리는 코드를 읽어 폭·높이를 역산했고 5개 레벨 맵이 첫 시도에 맞았다.
- 2020년 캡처와 픽셀 비교해 최종 차이 0픽셀이었다.
- 틱 레이트와 물리를 그대로 유지했다
- 마찰을 매 프레임 0.85배로 곱하는 방식이라 틱이 바뀌면 손맛이 달라진다.
- 그래서 현대판은 60Hz, 1993 재현판은 50Hz로 두 클럭을 모두 유지했다.
- CharacterBody2D 대신 직접 짠 150줄 충돌 루틴을 그대로 옮겼다.
Community Reactions
- 레트로 게임 포팅을 여러 개 해 봤다는 경험
- 댓글에서 Robin Hood, Syndicate, Populous 등을 WebGL/WebGPU로 옮겼다는 사례가 나왔다.
- 소스 포팅도, 완전 리버스 엔지니어링도 있었다고 한다.
- 낯선 바이너리가 좋은 벤치마크라는 경험
- 댓글에서 zx81 메모리 덤프를 Claude로 BASIC을 거쳐 Go로 옮겼더니 성공했다고 한다.
- 학습 데이터에 없을 게임이라 벤치로 좋겠다고 생각했다고 한다.
- 에뮬레이터 입력 재생으로 검증했는지 묻는 의견
- 댓글에서 UAE 원본과 같은 입력으로 비교했는지 물었다.
- 108바이트 차이도 의문이라는 반응이었다.
- 한 번에 끝나지 않았다는 경험
- 댓글에서 Moonbase Commander를 JS로 포팅했는데 상당한 조정이 필요했고 원샷은 아니었다고 한다.
- 1991년 PC DOS 게임을 LLM 도움으로 다시 컴파일했다는 경험도 있었다.
How to Apply
- 레거시 빌드를 바이트 단위로 재현하기
- 오늘 오래된 프로젝트의 소스를 현재 도구로 빌드해 배포 바이너리와 diff를 뜬다.
- 차이가 나는 구간을 LLM에 보여 주고 원인을 설명하게 한다.
- 포팅 전에 틱·단위 상수를 목록으로 뽑기
- 프레임마다 곱하는 감쇠 상수나 고정 틱 값을 코드에서 grep으로 모은다.
- 새 플랫폼에서는 같은 틱 레이트로 고정해 값을 그대로 옮긴다.
- 에이전트용 헤드리스 CLI 플래그 만들기
- 앱에 레벨 로드, 입력 스크립트, 상태 덤프, 스크린샷 플래그를 추가한다.
- 에이전트가 이 출력을 읽고 스스로 확인하게 한다.
- 모호한 데이터 포맷은 읽는 코드 기준으로 역추적시키기
- 문서가 없는 포맷은 파일을 읽는 루틴을 LLM에 주고 필드를 하나씩 이름 붙이게 한다.
- 해석이 둘로 갈리면 질문하게 하고 결과는 기존 캡처와 비교한다.
Try It
# Claude Code에 붙여넣기 (원문 방법의 간이 버전: 문서 없는 레거시 포맷 역추적)
너는 문서가 없는 레거시 코드를 읽는 리버스 엔지니어다.
대상 파일: {{포맷을 읽는 소스 파일}}
데이터 샘플: {{데이터 파일}}
규칙:
1. 데이터를 읽는 루틴부터 찾아라. 데이터 구조는 그 코드에서 역산해라.
2. 각 필드의 비트/바이트 의미를 표로 정리하고, 근거가 된 코드 줄을 함께 적어라.
3. 해석이 둘 이상 가능하면 추측하지 말고 나에게 질문해라.
4. 파서를 짠 뒤 기존 결과물 {{기준 출력}}과 비교하는 검증 스크립트를 만들어라.
이어서 해 볼 것: 차이가 나면 원인을 가설로 나열하고 하나씩 검증해라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓