Show HN: PS2 게임을 WebAssembly로 정적 재컴파일하기

3 hours ago 4

PS2 Web Recomp는 PS2 게임의 Emotion Engine 기계어를 미리 C++로 변환하고 WebAssembly로 컴파일해 브라우저에서 실행함. 재구현한 PS2 운영체제와 하드웨어에 연결하고, 그래픽은 WebGPU로 처리함 Gran Turismo 4는 부팅부터 영상, 메뉴, 레이스까지 음악과 효과음, 저장 기능을 포함해 동작함. 노트북 내장 GPU의 Chrome에서 PS2 기본 해상도의 2배로 PAL 버전의 정상 속도인 50fps를 달성함 God of War II도 게임 전용 코드 없이 같은 변환 절차로 실행됨. 공통 구현의 버그와 누락 기능을 수정한 뒤 Chrome에서 기본 해상도 기준 격렬한 전투 중 60fps, 2배 해상도에서 48~60fps를 기록함 벡터 유닛 프로그램 컴파일, GPU 기반 래스터화, 업로드 배치와 캐시 최적화가 성능을 끌어올림. PS2 고유 부동소수점 동작과 파이프라인 지연, 그래픽 메모리 배치를 재현해 게임이 의존하는 동작을 유지함 현재 실행을 확인한 게임은 2개이며, 다른 게임은 미구현 시스템 호출이나 그래픽 기능에서 막힐 수 있음. 게임 데이터는 제공하지 않으며, 소유한 디스크 이미지로 만든 C++와 WebAssembly도 공개하지 않고 개인 기기에 보관해야 함 프로젝트와 실행 성과 PS2 Web Recomp는 psp-web-recomp의 자매 프로젝트로, 같은 사전 재컴파일 방식을 사용함 첫 대상으로 Gran Turismo 4를 선택한 이유는 PS2의 까다로운 기능을 폭넓게 사용하기 때문임 두 벡터 유닛에 의존하고, 리플레이와 라이선스 시험에 정확한 부동소수점 동작이 필요함 렌더링한 이미지를 팔레트로 다시 읽는 그래픽 기법도 사용함 부팅, 오프닝 영상, 메뉴, 레이스, 음악과 효과음이 동작하며 브라우저에 저장한 메모리 카드를 사용함 Gran Turismo 4의 녹화는 노트북 내장 GPU의 Chrome에서 기본 해상도의 2배, PAL 버전의 정상 속도인 50fps로 진행함 God of War II는 메뉴와 컷신을 거쳐 전투까지 실행됨 Chrome에서 기본 해상도로 격렬한 전투 중 60fps를 유지함 2배 해상도에서는 노트북 내장 GPU가 병목이 되어 48~60fps로 동작함 저장소에 게임 데이터는 없으며, 사용자가 소유한 디스크 이미지를 로컬 웹 페이지로 변환하는 방식임 기계어 재컴파일과 PS2 운영체제 재구현 eerecomp 는 게임 실행 파일의 제어 흐름을 따라 함수...

Read Entire Article