The Jerusalem PostIndian national killed, New Zealander injured, after helicopters collide in Mount Everest regionBollywood HungamaRamayana 3 on the cards? Namit Malhotra says makers may revisit plans after audience feedbackPunchAFC postpones 2027 Asian Cup till DecemberDaily MaverickVIDEO: Poll Dancing: Watch Politically Aweh’s elections comedy special before you voteObservador DesportoPense-se o que se pensar, a acampada teve uma grande vitória3DNewsApple установила рекорд по продажам iPhone, несмотря на отсутствие базового iPhone 18ZDF heuteAktuelle Pressemitteilungen des ZDFWirtualna PolskaPlan obalenia prezydenta przez TK? Myrcha: "Nie widziałem"NOSKamerleden naar Zierikzee voor eerste officiële vergadering buiten Den HaagkickerWattenscheid 09: Aufgeheizte Stimmung vor dem Bochumer DerbySRF NewsKrieg in der Ukraine – Selenski wird laut Merz in Berlin erwartetגיקטייםסלחו על הצרפתית שלי, אבל החוק למיסוי הורדות בצרפת הוא אחד הרעיונות הכי מטומטמים ששמעתי
The Daily Newsstand · Free, Always
Tuesday, November 3, 2026

Прототип статического рекомпилятора PS4 на Apple Silicon — PS4Recomp

Translate

Здравствуйте. Уже наверное 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 по шапке не получить), получаете распакованную папку. Далее вы запускаете уже саму утилиту (честно признаюсь пока не как полностью отдельный бинарник не работает, так что пожалуйста собирайте в точности как написано в инструкции сборки ниже). После сборки вы запускаете команду:

./ps4-recomp  'путь/к/игре/eboot.bin'  --app-dir  'путь/к/игре'  --copy-resources -o  'путь/к/папке/сборки'  -c

–copy-resources каждый раз делать не надо, только в первый раз чтобы получить .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. Собрать зависимости
# SPIRV-Cross (для перевода в Metal):
cd 3rdparty/spirv-cross
clang++ -O3 -std=c++17 -c spirv_cross.cpp spirv_cross_parsed_ir.cpp spirv_parser.cpp spirv_glsl.cpp spirv_msl.cpp spirv_cfg.cpp spirv_cross_c.cpp
ar rcs libspirv-cross.a *.o && rm -f *.o
cd ../..

# LibAtrac9 (для аудио):
cd 3rdparty/libatrac9
clang -O3 -c C/src/*.c
ar rcs libatrac9.a *.o && rm -f *.o
cd ../..

# GCN Shader Recompiler 
# Вырезанный и модифицированный manjarqo кусок из shadps4,
# отвечающий за расшифровку шейдеров
cd 3rdparty/gcn-recompiler
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
ninja -C build
cp build/libgcn_recompiler.a .
cd ../..

# 3. Собрать сам бинарник
go build -o ps4-recomp ./cmd/ps4-recomp

Немного изображений

В игре

В игре

Ласт

Ласт

Небольшая шутка ))

Небольшая шутка ))

Эпилог

Опять же. Не знаю как долго продлится данный эксперимент, но по моему в этот раз уже самый подготовленный был. Извините за краткость статьи данной. Не хотелось в этот раз долго расписывать и 'расхваливать', чтобы снова не 'надурить' если произойдет внезапное закрытие от ненадобности. Но спасибо если посмотрели проект и появился интерес.

Если вы желаете помочь проекту или помочь запустить/улучшить работу игру - можете даже просто нейронку свою попросить делать пул реквесты и делать фиксы (тот же AnyPS5 неплохо таким методом идет). Просто убедитесь что во первых не засоряет проект мусорными .md файлами, во вторых он не хардкорит адреса или костыльные реализации под одну игру. Он обязан реализовывать все честно, иначе такое не принимаю. Все таки я делаю проект не для того, чтобы один лишь Бладборн, а именно что в первую очередь универсальный статический рекомпилятор.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.