TL;DR

  • AnyPS5는 PS5 실행 파일을 Linux와 Windows에서 네이티브 형식으로 변환해 실행하며, 에뮬레이션이나 별도 런타임 프로세스가 필요하지 않은 도구임.
  • 재링커(relinker)는 실행 파일을 대상 시스템 형식으로 바꾸고, 동적 링크에 적합한 시스템 PRX 라이브러리 구현을 제공함.
  • --to-intel 옵션은 Zen 2 전용 명령어를 재링크 시점에 Intel 호환 명령으로 바꾸며, 기본 설정에서는 타이틀 자체의 sce_module/sce_modules PRX 파일도 게스트 모듈로 변환함.
  • 실행은 _start를 거쳐 main에 도달하며, 셰이더 재컴파일러는 SPIR-V를 생성하고 실제 게임은 로고·메인 메뉴·오디오가 포함된 게임플레이까지 도달함.
  • 컨트롤러 입력을 지원하며, 키보드와 마우스는 anyps5-input.ini로 설정 가능하고 프로젝트 라이선스는 GNU GPL 버전 2 전용임.

소개

  • Linux와 Windows용 실행 파일 자동 포팅 도구임.
  • 재링커가 실행 파일을 대상 시스템의 네이티브 형식으로 변환하며, 동적 링크에 적합한 시스템 PRX 라이브러리 구현을 포함함.
  • 에뮬레이션이나 별도 런타임 프로세스는 사용하지 않음.
  • --to-intel 옵션은 타이틀에 포함될 수 있는 Zen 2 전용 명령어(EXTRQ, INSERTQ, MOVNTSS, MOVNTSD)를 재링크 시점에 바꿈.
  • 길이가 같은 Intel 인코딩이 있으면 해당 위치에서 명령어를 교체하고, 그렇지 않으면 생성된 스텁 섹션으로 점프하도록 처리해 Intel 호스트에서 런타임 에뮬레이션이 필요하지 않게 함.
  • 기본 설정에서는 타이틀 자체의 sce_module/sce_modules PRX 파일도 링크 시 우선 적용되는 게스트 모듈로 변환함. 이 모듈에는 즉시 바인딩(eager binding)이 필요함.
  • Demon's Souls(PPSA01342)처럼 자체 libc.prx가 포함된 타이틀은 --skip-sce-module 옵션으로 재링크함.
  • 해당 타이틀의 libc.prx가 프로젝트의 libc.prx를 대체하면 게스트 메모리 아레나, 힙, 크래시 보고 기능을 제공하는 프로젝트 라이브러리가 대체됨.
  • 타이틀의 libc.prx는 구현되지 않은 커널 함수도 가져오므로, 실행 파일이 시작 단계에서 바인딩에 실패함.
  • 적어도 한 게임을 처음으로 완전히 실행하는 데 성공한 뒤 릴리스를 게시할 예정임.

상태

  • 실행이 _start에 도달하고, 스택 언와인딩 및 예외 처리 테이블이 구성된 뒤 main에 도달함.
  • 지원되지 않거나 예상하지 못한 상태에서는 std::runtime_error를 엄격히 발생시킴. what() 내용을 표준 오류(stderr)에 출력한 뒤 프로세스를 종료함.
  • 셰이더 재컴파일러가 SPIR-V를 성공적으로 생성하며, ANYPS5_ENABLE_SPIRV_TOOLS를 켜서 빌드하면 Spirv-Tools로 검증함.
  • 실제 게임이 로고, 메인 메뉴, 오디오가 포함된 게임플레이까지 도달함.

프로젝트 기술 부채와 코드 스타일 규칙

빌드

  • 재링커는 C++20 표준 라이브러리만 사용하며, 표준을 준수하는 컴파일러라면 빌드 가능해야 함.
  • libc.prx 구현에는 컴파일러별 코드가 포함됨. Linux 빌드는 GCC에서 작동하며, Windows에서는 현재 MinGW-w64 GCC 15.2.0(winlibs-gcc15, x86_64-ucrt-posix-seh)이 필요함.
  • 프로젝트는 컴파일러 이식성을 극대화하는 것을 목표로 함. 추가 컴파일러 지원은 첫 게임 실행에 성공한 뒤 다룰 예정임.

입력 매핑

  • SDL로 매핑된 게임 컨트롤러를 지원하며, 아날로그 스틱과 트리거도 포함됨.
  • 키보드와 마우스 조작은 anyps5-input.ini 파일로 설정 가능함. 지원 기기와 설정 형식은 입력 매핑 안내를 참고함.

면책 조항

  • 이 프로젝트의 목적은 상호 운용성, 연구, 보존 및 호환성임.
  • 저작권이 있는 소프트웨어, 펌웨어, 암호화 키 또는 독점 라이브러리를 포함하거나 배포하지 않으며, 사용을 요구하지도 않음.
  • 이 프로젝트와 함께 사용할 바이너리를 관련 법률 및 각 바이너리의 라이선스 조건에 따라 확보하고 사용하는 책임은 사용자에게 있음.

라이선스

  • 이 프로젝트는 GNU 일반 공중 사용 허가서 버전 2만을 따름.