PlayStation 5 на языке C# как энтузиасты пишут эмулятор SharpEmu

13 июл 2026
5,317
485
96
3 недели

Написать эмулятор современной консоли — задача, которая у многих ассоциируется с бесконечными простынями чистого C++ и низкоуровневой магией. Однако разработчики проекта SharpEmu решили пойти другим путем и выбрали .NET. Звучит амбициозно, учитывая, что речь идет о PlayStation 5 — сложнейшей системе с архитектурой x86-64 и специфическим графическим API.

Зачем программисту еще один эмулятор

Если вы следите за сценой, то наверняка слышали о ShadPS4. Этот проект уже делает огромные успехи в запуске Bloodborne и других хитов PS4. Авторы SharpEmu сразу вешают дисклеймер: они не пытаются конкурировать или дублировать чужую работу. Их цель — исключительно PS5.

SharpEmu — это экспериментальный проект. Он создается с нуля для образовательных целей и ресерча. Разработчикам просто нравится копаться в архитектуре системы и заниматься реверс-инжинирингом. Для нас же это редкая возможность посмотреть, как устроена современная консоль «под капотом», используя знакомый стек технологий .NET.

Что проект умеет сегодня

Проект находится на ранней стадии. Не ждите, что вы скачаете бинарник и запустите God of War Ragnarök в 4K. Сейчас фокус команды направлен на инфраструктуру и точность эмуляции, а не на запуск конкретных игр.

Реклама

Тем не менее, результаты уже есть:

  • Загрузка файлов eboot.bin и .elf. Эмулятор корректно парсит структуру исполняемых файлов консоли.
  • Исполнение нативных инструкций процессора.
  • Чтение метаданных: названия игр, версии и прочая служебная информация.
  • Работа с системными модулями (PRX) и частичная поддержка функций ядра.
  • Начальная поддержка сценариев PlayGo и вывода видео.

Любопытно, что некоторые игры уже доходят до этапа инициализации AGC (графического шейдерного движка) и вызова sceVideoOut. Например, в Demon's Souls Remake эмулятор уже подготовил шейдеры, которые разработчики планируют конвертировать в SPIR-V для отрисовки через Vulkan.

Технологический стек и источники вдохновения

Выбор C# для такого проекта — решение интересное. Современный .NET (версии 8 и выше) дает отличную производительность, а работать с памятью и структурами данных в нем зачастую приятнее, чем в плюсах.

Авторы SharpEmu не скрывают, что опираются на опыт коллег. В коде и архитектуре прослеживается влияние нескольких известных проектов:

  1. Ryujinx: отсюда взяли паттерны реализации низкоуровневых операций на C# и работу с файловой системой.
  2. Kyty: один из ранних эмуляторов PS5, послуживший учебником по исполнению нативного кода.
  3. ShadPS4: помог разобраться в общих принципах архитектуры консолей Sony текущего и прошлого поколений.

Сейчас основная целевая платформа — Windows. Это упрощает отладку на ранних этапах. Поддержку Linux и macOS планируют добавить позже, когда база кода станет более стабильной.

Как это потрогать

Если вы хотите заглянуть во внутренности или даже помочь проекту кодом, собрать его не составит труда. Вам понадобится актуальный .NET SDK.

Клонируем репозиторий:

git clone https://github.com/par274/sharpemu.git

Собираем проект:

dotnet build

Для запуска образа игры через командную строку используется Powershell:

.\SharpEmu "путь_к_eboot.bin" 2>&1 | Tee-Object -FilePath "log.txt"

Для кого этот проект

SharpEmu вряд ли станет вашим основным игровым клиентом в ближайшие пару лет. Но он идеален для тех, кто хочет изучить:

  • Системное программирование на C#.
  • Принципы работы JIT-компиляторов и трансляции инструкций.
  • Реверс-инжиниринг закрытых платформ.

Проект выглядит «чистым» и академичным. В нем нет проприетарных файлов или ключей, все тесты проводятся на дампе личных консолей авторов.

*В Dreaming Sarah уже получается отрисовывать текстуры.*

SharpEmu — это крутой пример того, как сложные задачи вроде эмуляции железа решаются с помощью современных высокоуровневых языков. Пока проект — это скорее «песочница» для инженеров. Если вам интересно, как передаются команды видеокарте в PS5 или как работает планировщик задач в её ядре, загляните в исходники. Читать код на C# явно проще, чем разбираться в хитросплетениях шаблонов C++.

Следить за апдейтами можно в их Discord-сообществе, ссылка на которое есть в репозитории. Там разработчики часто делятся логами и успехами в прохождении очередного этапа загрузки тяжелых игр.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.