TECH 으로 돌아가기
TECH HACKER NEWS 5분 읽기 24 READS

NES '콘트라'를 ASM에서 C로, 다시 WebAssembly로: 브라우저에서 돌아가는 1987년 게임 이식기

1987년 출시된 NES용 액션 게임 '콘트라(Contra)'가 브라우저에서 그대로 동작하는 이식 프로젝트가 공개됐다. 개발자는 이 게임을 단순히 에뮬레이터에 얹은 것이 아니라, 원본 어셈블리(ASM) 코드를 C 언어로 옮긴 뒤 그 C 코드를 다시 WebAssembly로 컴파일하는 두 단계 변환을 거쳤다고 밝혔다. 그 결과 별도 설치 없이 웹페이지에 접속하는 것만으로 게임이 실행되며, 키보드와 화면상의 버튼은 물론 두 명이 각자의 컴퓨터에서 함께 즐기는 온라인 협동 플레이까지 지원한다.

조작 방식은 원작의 감성을 그대로 따른다. Enter 키나 START 탭으로 게임을 시작하고 방향키로 이동, A 또는 스페이스로 점프, S로 발사, Shift로 Select 기능을 쓴다. 화면상의 버튼으로는 A가 점프, B가 발사에 해당한다. 온라인 플레이에서는 두 플레이어가 각자 자기 컴퓨터에서 동일한 키 세트를 사용하며, 1번 플레이어가 타이틀 화면에서 Shift로 '2 PLAYERS'를 선택하는 방식이다. 모바일 환경을 염두에 둔 온스크린 컨트롤과 데스크톱 키보드 입력을 함께 제공한다는 점이 눈에 띈다.

왜 '에뮬레이션'이 아니라 '이식'인가

이 프로젝트의 핵심은 접근 방식의 차이에 있다. 흔히 고전 게임을 웹에서 돌릴 때는 NES 하드웨어 전체를 소프트웨어로 흉내 내는 에뮬레이터를 쓴다. 이 경우 6502 CPU, PPU(그래픽), APU(사운드)의 동작을 매 사이클 모사해야 하므로 오버헤드가 크고, 게임 코드 자체는 '블랙박스'로 남는다. 반면 이번 작업은 게임 로직을 어셈블리에서 C로 번역해 코드의 의미를 사람이 읽을 수 있는 형태로 끌어올린 뒤, 이를 WebAssembly로 컴파일했다. 즉 게임이 네이티브에 가까운 코드로 직접 돌아가는 구조에 가깝다.

ASM에서 C로의 변환은 기계적인 디컴파일 이상의 작업을 요구한다. NES의 어셈블리는 레지스터와 메모리 주소를 직접 다루고, 하드웨어 타이밍과 인터럽트에 강하게 결합돼 있다. 이를 C의 함수와 자료구조로 재구성하려면 원본의 메모리 맵과 제어 흐름을 해석해 의미 단위로 재조립해야 한다. 이렇게 한 번 C로 정리해두면, 이후 WebAssembly뿐 아니라 다른 플랫폼으로 옮기는 일도 상대적으로 쉬워진다는 점에서 이식 경로로서의 가치가 있다.

실무자가 눈여겨볼 지점

WebAssembly는 원래 브라우저에서 네이티브에 근접한 성능을 내기 위해 설계된 바이너리 명령 포맷으로, C/C++/Rust 같은 언어를 컴파일해 웹에서 구동하는 용도로 널리 쓰인다. 이번 콘트라 이식은 이 기술 스택이 레거시 코드의 현대화에도 유효하다는 것을 보여주는 사례다. 수십 년 전 특정 하드웨어에 종속돼 작성된 코드라도, 중간 언어인 C를 경유해 의미를 복원하면 플랫폼 독립적인 자산으로 되살릴 수 있다는 발상이다. 이는 게임뿐 아니라 오래된 산업용·임베디드 코드의 유지보수와 이전 문제에도 시사점을 준다.

동시에 한계도 분명히 인식할 필요가 있다. 공개된 정보만으로는 변환의 자동화 정도, 원본과의 동작 호환성, 사운드나 프레임 타이밍의 정확도, 그리고 온라인 플레이의 지연·동기화 처리 방식 같은 기술적 세부가 드러나 있지 않다. 어셈블리-투-C 변환은 대체로 상당한 수작업을 동반하기 때문에, 한 게임에서 성공했다고 해서 동일한 파이프라인이 다른 타이틀에 그대로 적용된다고 보기는 어렵다. 또한 상용 게임의 코드와 에셋을 다루는 이식 작업에는 저작권이라는 민감한 문제가 늘 따라붙는다.

그럼에도 이 프로젝트는 '브라우저에서 바로 실행되는 1987년 게임'이라는 결과물 자체로 설득력이 있다. 설치 장벽 없이 링크 하나로 고전 게임을 경험하게 하는 배포 편의성, 그리고 레거시 바이너리를 읽을 수 있는 코드로 되살려 재컴파일 가능한 형태로 만든 접근은, 개인 개발자가 WebAssembly 생태계에서 어디까지 해낼 수 있는지를 가늠하게 하는 흥미로운 참고점이 된다. 비슷한 고전 코드의 보존과 이전을 고민하는 이들에게는 방법론 측면에서 들여다볼 만하다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://epoyraz.github.io/nes-contra-us/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...