Перейти к содержимому
PS5PCEM

Реализация

Как устроен PS5PCEM

Каждая страница — один механизм, который эмулятор действительно выполняет: что делает приставка, что делает код на Zig и чего ещё нет.

Заметки репозитория по 17 октября 2026 г.

Прошивка и HLE

Счётчики AMPR

Частично

AMPR в PS5PCEM — это локальная для процесса программная модель команд счётчиков и завершения консоли. 128 счётчиков принимают записи, атомарные обновления полей, парные чтения и маскированные ожидания в порядке подачи.

Как это работает

APR разрешает файл игры один раз, а затем несёт локальный для процесса идентификатор в последующих буферах команд. Отложенные чтения AMPR заново открывают тот же файл /app0 только для чтения, не удерживая дескриптор хоста постоянно.

Как это работает

Гостевые адреса — это настоящие адреса хоста. Прямая память — разреженный общий физический пул, отображённый в это пространство, а MemoryPool добавляет резервирование, фиксацию и пакетные операции поверх того же хранилища.

Как это работает

Savedata

Работает

Смонтированный слот сохранения становится записываемым /savedata0. Игра пользуется обычным файловым API, а следующий запуск находит те же файлы под кодом продукта, который публикует игра.

Как это работает

libSceFont растеризует поставленные игрой гарнитуры TrueType и OpenType через FreeType. Запросы системного шрифта используют входящую в комплект замену Noto Sans для латиницы, греческого и кириллицы.

Как это работает

Кодировщик PNG пишет 8-битные файлы RGB или RGBA из пикселей RGBA или BGRA с шагом строки. Декодер читает нечересстрочные изображения в градациях серого, с палитрой, RGB и RGBA в проверенный гостевой буфер.

Как это работает

RTC проверяет поля календаря, преобразует FILETIME Windows и делает проверяемую арифметику тиков. Гость видит согласованные часы без перевода летнего времени хоста.

Как это работает

Графика

Игра для PS5 строит пакеты GPU в собственной памяти и подаёт буфер. PS5PCEM декодирует этот поток PM4, хранит состояние регистров и исполняет отрисовки и диспетчеризации по порядку.

Как это работает

Шейдеры PlayStation 5 — это машинный код RDNA2. PS5PCEM декодирует семейства GFX10, строит граф потока управления и понижает поддерживаемые операции до SPIR-V 1.5 для Vulkan.

Как это работает

Объединённые вершинные программы NGG, включая шейдер выборки, который продолжается через S_SETPC_B64, переводятся как одна графическая стадия. Программа экспорта хранит собственное окно пользовательских данных.

Как это работает

S_SWAPPC_B64 и S_CALL_B64 сохраняют полный адрес возврата и исполняют ограниченную локальную подпрограмму, включая вызываемого, который стоит после ENDPGM. Проверенный шейдер выборки AGC можно связать так же.

Как это работает

Рендерер Vulkan

Работает

Бэкенд Vulkan загружает драйвер во время выполнения, требует Vulkan 1.2 и показывает гостевые кадры через цепочку обмена. Цели рендеринга, изображения хранения и конвейеры остаются резидентными между отрисовками.

Как это работает

Бэкенд Direct3D 12

Частично

Экспериментальный нативный рендерер для Windows, добавленный после 0.3.5. Он разделяет с Vulkan декодер PM4 и перевод шейдеров RDNA2, а исполняет и выводит кадры через D3D12 и DXGI. По умолчанию остаётся Vulkan, и игры через этот путь пока не работают.

Как это работает

MSAA

Частично

Совпадающие числа семплов цвета и глубины 2×, 4× и 8× остаются на изображении хоста до более позднего сведения. Asterix использует этот путь для глубины и трафарета MSAA, что убрало большое случайное обратное чтение.

Как это работает

HTILE, DCC, CMASK и FMASK — сжатые метаданные глубины и цвета консоли. PS5PCEM отслеживает указатели, очищает HTILE в понятных ему случаях и отказывается от раскладки, которую иначе развернул бы из тайлов неверно.

Как это работает

Текстуры PS5 хранятся в схемах свизла GFX10, а не линейными строками. PS5PCEM применяет адресные уравнения на CPU и на GPU для крупных поверхностей по 4, 8 и 16 байт, которые подходят.

Как это работает

Включаемый явно трекер страниц наблюдает гостевые страницы по 16 KiB. Первая нативная запись CPU вызывает отказ, продвигает поколение и инвалидирует копию GPU, чтобы неизменные страницы не хешировались и не загружались каждый кадр.

Как это работает

VideoOut

Работает

VideoOut регистрирует буферы изображения гостя и завершает переворот только после того, как обратный вызов представления принял кадр. Окно хоста — это цепочка обмена Vulkan в 1080p SDR.

Как это работает

Звук и видео

AudioOut

Работает

AudioOut воспроизводит гостевой PCM на устройстве Windows на 48 кГц. Устаревшие порты имеют собственные потоки и очереди, поэтому музыка и эффекты идут вместе, а при недоборе сохраняется порядок семплов.

Как это работает

Свёртка ACM

Частично

Свёртка ACM исполняет секционную реверберацию FMOD на CPU. Пакеты с общим входом преобразуют один сухой сигнал, применяют разделы импульса в float или half-float и складывают с перекрытием влажный результат.

Как это работает

Кодеки AJM

Частично

AJM декодирует ATRAC9, MP3, MPEG-4 AAC и Opus. У каждого экземпляра кодека своё состояние, а неизвестный кодек отвергается, вместо того чтобы сообщаться как тихий успех.

Как это работает

NGS2

Частично

NGS2 хранит описатели системы, рэка и голоса, разбирает обычные данные RIFF/WAVE и задаёт темп тихой гранулы 48 кГц, чтобы работник программного DSP не крутился. Сам синтез голоса неполон.

Как это работает

AvPlayer

Работает

SceAvPlayer декодирует контейнеры фильмов через FFmpeg в кадры NV12, которыми владеет игра, и стерео PCM 48 кГц. Воспроизведение заканчивается, когда проходит длительность источника, даже если игра так и не прочитала один из потоков.

Как это работает

Процессор, загрузчик и инструменты

На Windows x86-64 машинный код гостя исполняется напрямую. Один работник хоста несёт каждый гостевой pthread, а база FS восстанавливается после каждого блокирующего вызова, потому что Windows её не сохраняет.

Как это работает

Загрузчик отображает расшифрованные модули PS5 SELF и голый ELF64, применяет перемещения и разрешает импорты по реестру HLE. Затем игра получает устойчивые описатели модулей, которые запускает сама.

Как это работает

pkgextractor распаковывает отладочные раскладки FPKG, наблюдавшиеся в разработке: внешний пакет, внутренний PFS, карты имён NAPS и полезные нагрузки, сжатые Kraken. Зашифрованные розничные пакеты вне области.

Как это работает

Чему посвящены эти страницы

Текст следует архитектурным заметкам и отчётам октября 2026 года в репозитории PS5PCEM. Пройденный точечный тест — это не новая частота кадров и не новое прохождение.