Прототип статического рекомпилятора PS4 на Apple Silicon — PS4Recomp
- среда, 4 ноября 2026 г. в 00:00:22

Здравствуйте. Уже наверное 2-3 месяца отсутствовал. История снова закольцевалась. И по итогу прошлый проект (Kakehashi) был отменен несмотря на значительное количество звезд из-за отсутствия обратной связи и также.. zsh.
В общем пробовал разные проекты - вдруг срастется. Ну и примерно месяц назад приступил к очередному эксперименту. Возможно ли взять x64 приложение и перекомпилировать под Apple Silicon, да так, чтобы еще графика была на Metal? Увидев проект AnyPS5, который занимается скажем так портированием на ПК - вдохновился и решил попробовать реализовать.
Учитывая что я не терплю Розетту 2 и JIT, то что у меня MacBook Pro M1 на 8GB RAM всего лишь, а также то, что я переехал на другую нейронку (раньше писал с Grok 4.5-4.6, теперь с прости-господи Gemini 3.8 Flash) выбор был очевидный - PS4. Аналогичная память, большое количество готового материала (ShadPS4 и OpenOrbis).
Сразу оговорюсь о том как пишется. В .gitignored папке лежит репозиторий shadps4 под аналогичной лицензией GPL 2.0, так что можно сказать копипастил переводя с c++ на c код, дабы максимально работоспособно было. OpenOrbis изначально использовался исключительно как компилятор тестовых бинарников и просмотр заголовков. Ну и реализацию графики на Metal делал сторонний разработчик manjarqo (и его Claude Opus). Изначально он планировал контрибьютить мне, но позже решил открепиться и писать свой форк, разрешив при этом брать его реализации, за что ему большое спасибо.
А также я не геймер если что, так что отношусь просто как к эксперименту))
Вы скачиваете/дампите игру (откуда, ваше право и ответственность), далее прогоняете через стороннюю утилиту https://github.com/xXJSONDeruloXx/ps4-pkg-tools (схожий функционал у себя удалил, чтобы случайно от Sony по шапке не получить), получаете распакованную папку. Далее вы запускаете уже саму утилиту, доступную в Releases или же собираете с нуля (смотрите ниже). После сборки вы запускаете команду:
./bin/ps4-recomp build путь/к/игре -o путь/к/сборке --standalone
standalone каждый раз делать не надо, только в первый раз чтобы получить .app пакет. Утилита проанализирует все .prx и eboot, выявит функции (символы) что используются игрой и зависимостями. Далее она построит графы, выявит jumptables и прочее. После начнется сброс генерируемых файлов .s и c. А в конце ninja в 8 потоков начнет собирать сам бинарник.
Но предупреждаю! Проект еще на ранней стадии и возможно на не протестированной игре либо упадет компиляция ninja, либо соберется но по итогу при запуске игры произойдет падение или остановка на нереализованном символе OrbisOS.
На данный момент подтверждена работа:
The Last Of Us Remastered (Запускается, работоспособна, на моем маке примерно в 20FPS, на M1 Pro по заявлениям manjarqo около 90)
Bloodborne: Game of the Year Edition (Запускается, играется, на моем маке примерно в 6-20FPS, большое количество графических глюков)
Hogwarts Legacy (Переводится, падает при инициализации ICU из за какой то ерунды с локалями что не мог за несколько дней пробить, пока приостановлено)
Hollow Knight: Silksong (Переводится, почти подходит к первому кадру, но падает на раскрутке c++ исключений, что пока мой рекомпилятор не умеет и временно отсекает работу пожалуй всех Unity игр)
Забавен тот факт, что приопретатные и кастомные движки запускаются и работают лучше, чем универсальные.
Проект написан на целом винегрете языков.
Go - основа, используется для кастомного дизассемблера, переводчика инструкций и тп
C/C++ - на нем пишется runtime проекта (проще говоря инструкции OrbisOS)
Objective-C/C++ - прослойка для работы с Metal и шейдерами, окнами macOS и прочими эксклюзивными для него вещами
Ниже цитата из README проекта:
├── cmd/ │ ├── ps4-recomp/ # Main CLI entry point │ └── lifter-difftest-asm/ # AMD64 vs ARM64 differential test harness └── pkg/ ├── analyzer/ # Reachable CFG & instruction coverage analyzer ├── disasm/ # Instruction decoder & jump-table recovery ├── elfloader/ # ELF64/PRX parser & multi-module TLS linker ├── lifter/ # AMD64 to ARM64 assembly lifter (TSO, SIMD, FPU) ├── emitter/ # Assembly partitioner, bridge trampolines & NID shims └── runtime/ # Host runtime & Orbis/POSIX kernel ABI ├── core/ # Guest context & Mach-O crash handlers ├── kernel/ # Direct memory, sync pools, threading, VFS └── modules/ # HLE modules (VideoOut, AudioOut, GnmDriver, Pad, etc.)
Для начала вам нужен Apple Silicon мак. Установить инструменты разработки - xcode-select installl. Установите зависимости проекта а также язык Go
brew install cmake ninja freetype ffmpeg
А далее сборка проекта
# 1. Клонирование git clone --recursive https://github.com/wie-project/PS4Recomp.git cd PS4Recomp # 2. Сборка ./scripts/build.sh



Опять же. Не знаю как долго продлится данный эксперимент, но по моему в этот раз уже самый подготовленный был. Извините за краткость статьи данной. Не хотелось в этот раз долго расписывать и 'расхваливать', чтобы снова не 'надурить' если произойдет внезапное закрытие от ненадобности. Но спасибо если посмотрели проект и появился интерес.
Если вы желаете помочь проекту или помочь запустить/улучшить работу игру - можете даже просто нейронку свою попросить делать пул реквесты и делать фиксы (тот же AnyPS5 неплохо таким методом идет). Просто убедитесь что во первых не засоряет проект мусорными .md файлами, во вторых он не хардкорит адреса или костыльные реализации под одну игру. Он обязан реализовывать все честно, иначе такое не принимаю. Все таки я делаю проект не для того, чтобы один лишь Бладборн, а именно что в первую очередь универсальный статический рекомпилятор.
Репозиторий: https://github.com/wie-project/PS4Recomp