HLE — это то, как PS5PCEM отвечает на вызовы прошивки, которые импортирует игра. Каждый числовой NID становится функцией Zig на стеке хоста, а гостевое соглашение о вызовах System V сохраняется на Windows.
Как это работаетРеализация
Как устроен PS5PCEM
Каждая страница — один механизм, который эмулятор действительно выполняет: что делает приставка, что делает код на Zig и чего ещё нет.
Заметки репозитория по 17 октября 2026 г.
Прошивка и HLE
Счётчики AMPR
ЧастичноAMPR в PS5PCEM — это локальная для процесса программная модель команд счётчиков и завершения консоли. 128 счётчиков принимают записи, атомарные обновления полей, парные чтения и маскированные ожидания в порядке подачи.
Как это работаетAPR разрешает файл игры один раз, а затем несёт локальный для процесса идентификатор в последующих буферах команд. Отложенные чтения AMPR заново открывают тот же файл /app0 только для чтения, не удерживая дескриптор хоста постоянно.
Как это работаетГостевые адреса — это настоящие адреса хоста. Прямая память — разреженный общий физический пул, отображённый в это пространство, а MemoryPool добавляет резервирование, фиксацию и пакетные операции поверх того же хранилища.
Как это работаетSavedata
РаботаетСмонтированный слот сохранения становится записываемым /savedata0. Игра пользуется обычным файловым API, а следующий запуск находит те же файлы под кодом продукта, который публикует игра.
Как это работаетОтрисовка шрифтов
ЧастичноlibSceFont растеризует поставленные игрой гарнитуры TrueType и OpenType через FreeType. Запросы системного шрифта используют входящую в комплект замену Noto Sans для латиницы, греческого и кириллицы.
Как это работаетКодирование и декодирование PNG
ЧастичноКодировщик PNG пишет 8-битные файлы RGB или RGBA из пикселей RGBA или BGRA с шагом строки. Декодер читает нечересстрочные изображения в градациях серого, с палитрой, RGB и RGBA в проверенный гостевой буфер.
Как это работаетЧасы реального времени
ЧастичноRTC проверяет поля календаря, преобразует FILETIME Windows и делает проверяемую арифметику тиков. Гость видит согласованные часы без перевода летнего времени хоста.
Как это работаетНа Windows каждое волокно libSceFiber — настоящее волокно Windows, поэтому переключение сохраняет гостевые регистры и гостевой стек. Потоки пользовательского уровня стартуют через тот же путь pthread.
Как это работаетАсинхронные чтения файлов ядра
ЧастичноAPI AIO ядра принимает пакет чтений и возвращает идентификатор. PS5PCEM выполняет пакет в момент подачи, что интерфейс позволяет, а игра забирает готовый результат.
Как это работаетГрафика
AGC и поток команд PM4
ЧастичноИгра для PS5 строит пакеты GPU в собственной памяти и подаёт буфер. PS5PCEM декодирует этот поток PM4, хранит состояние регистров и исполняет отрисовки и диспетчеризации по порядку.
Как это работаетШейдеры RDNA2 в SPIR-V
ЧастичноШейдеры PlayStation 5 — это машинный код RDNA2. PS5PCEM декодирует семейства GFX10, строит граф потока управления и понижает поддерживаемые операции до SPIR-V 1.5 для Vulkan.
Как это работаетВершинные шейдеры NGG
ЧастичноОбъединённые вершинные программы NGG, включая шейдер выборки, который продолжается через S_SETPC_B64, переводятся как одна графическая стадия. Программа экспорта хранит собственное окно пользовательских данных.
Как это работаетIMAGE_LOAD_BY2, BY4, PCK2 и PCK4, включая формы с явным mip, исполняются для измеренных нативных двумерных форматов. Загрузка BY возвращает последовательные тексели. Загрузка PCK упаковывает их сырые биты в один регистр.
Как это работаетГоризонтальные выборки
ЧастичноIMAGE_GATHER4H и IMAGE_GATHER4H_PCK собирают один канал по горизонтальной группе текселей. Измеренное прямое подмножество 1D и 2D покрыто 1242 диспетчеризациями GPU.
Как это работаетСкалярные вызовы шейдера
Частично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
ЧастичноHTILE, DCC, CMASK и FMASK — сжатые метаданные глубины и цвета консоли. PS5PCEM отслеживает указатели, очищает HTILE в понятных ему случаях и отказывается от раскладки, которую иначе развернул бы из тайлов неверно.
Как это работаетРазворот тайлов текстур
ЧастичноТекстуры PS5 хранятся в схемах свизла GFX10, а не линейными строками. PS5PCEM применяет адресные уравнения на CPU и на GPU для крупных поверхностей по 4, 8 и 16 байт, которые подходят.
Как это работаетТрекер страниц GPU
ЧастичноВключаемый явно трекер страниц наблюдает гостевые страницы по 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 её не сохраняет.
Как это работаетЗагрузка ELF и SELF
РаботаетЗагрузчик отображает расшифрованные модули PS5 SELF и голый ELF64, применяет перемещения и разрешает импорты по реестру HLE. Затем игра получает устойчивые описатели модулей, которые запускает сама.
Как это работаетКонтроллеры и клавиатура
РаботаетDualSense, DualSense Edge и DualShock 4 читаются по HID, по USB и Bluetooth. Совместимые с Xbox геймпады используют XInput. Клавиатура отображается на стики через профиль лаунчера.
Как это работаетРаспаковщик PKG
Частичноpkgextractor распаковывает отладочные раскладки FPKG, наблюдавшиеся в разработке: внешний пакет, внутренний PFS, карты имён NAPS и полезные нагрузки, сжатые Kraken. Зашифрованные розничные пакеты вне области.
Как это работаетЧему посвящены эти страницы