Aller au contenu
PS5PCEM

Mise en œuvre

Comment PS5PCEM fonctionne

Chaque page décrit un mécanisme que l’émulateur exécute vraiment : ce que fait la console, ce que fait le code Zig, et ce qui manque encore.

Notes du dépôt jusqu’au 17 octobre 2026

Firmware et HLE

AMPR dans PS5PCEM est un modèle logiciel local au processus des commandes de compteurs et d'achèvement de la console. Cent vingt-huit compteurs acceptent des écritures, des mises à jour atomiques de champs, des lectures de paires et des attentes masquées, dans l'ordre de soumission.

Comment ça marche

APR résout un fichier de titre une fois, puis transporte un identifiant local au processus dans les tampons de commandes ultérieurs. Les lectures AMPR différées rouvrent ce même fichier /app0 en lecture seule sans conserver un descripteur hôte pour toujours.

Comment ça marche

Savedata

Fonctionne

Un emplacement de sauvegarde monté devient un /savedata0 inscriptible. Le titre utilise l'API de fichiers ordinaire, et le lancement suivant retrouve les mêmes fichiers sous le code produit que le titre publie.

Comment ça marche

libSceFont rastérise les faces TrueType et OpenType fournies par le titre avec FreeType. Les demandes de police système utilisent le substitut Noto Sans livré pour le latin, le grec et le cyrillique.

Comment ça marche

L'encodeur PNG écrit des fichiers RGB ou RGBA 8 bits à partir de pixels RGBA ou BGRA à pas de ligne. Le décodeur lit les images en niveaux de gris, en palette, RGB et RGBA non entrelacées dans un tampon invité vérifié.

Comment ça marche

RTC vérifie les champs de calendrier, convertit le FILETIME de Windows et fait une arithmétique contrôlée sur les ticks. L'invité voit une horloge cohérente sans la conversion d'heure d'été de l'hôte.

Comment ça marche

Sous Windows, chaque fibre libSceFiber est une vraie fibre Windows, de sorte qu'un basculement conserve les registres invités et la pile invitée. Les threads de niveau utilisateur démarrent par le même chemin pthread.

Comment ça marche

Graphisme

Un titre PS5 construit des paquets GPU dans sa propre mémoire et soumet le tampon. PS5PCEM décode ce flux PM4, conserve l'état des registres, et exécute les draws et les dispatches dans l'ordre.

Comment ça marche

Les shaders PlayStation 5 sont du code machine RDNA2. PS5PCEM décode les familles GFX10, construit un graphe de flot de contrôle, et abaisse les opérations prises en charge en SPIR-V 1.5 pour Vulkan.

Comment ça marche

Les programmes de sommets NGG fusionnés, y compris un shader de fetch qui continue par S_SETPC_B64, se traduisent comme un seul étage graphique. Le programme d'export conserve sa propre fenêtre de données utilisateur.

Comment ça marche

IMAGE_LOAD_BY2, BY4, PCK2 et PCK4, y compris les formes à mip explicite, s'exécutent pour les formats 2D natifs mesurés. Un chargement BY renvoie des texels consécutifs. Un chargement PCK empaquette leurs bits bruts dans un seul registre.

Comment ça marche

IMAGE_GATHER4H et IMAGE_GATHER4H_PCK rassemblent un canal sur un groupe horizontal de texels. Le sous-ensemble direct 1D et 2D mesuré est couvert par 1242 dispatches GPU.

Comment ça marche

S_SWAPPC_B64 et S_CALL_B64 sauvegardent une adresse de retour complète et exécutent une sous-routine locale bornée, y compris un appelé placé après ENDPGM. Un shader de fetch AGC vérifié peut être lié de la même façon.

Comment ça marche

Le backend Vulkan charge le pilote à l'exécution, exige Vulkan 1.2, et présente les images invitées par une swapchain. Les cibles de rendu, les images de stockage et les pipelines restent résidents d'un draw à l'autre.

Comment ça marche

Un moteur de rendu Windows natif et expérimental, ajouté après la 0.3.5. Il partage avec Vulkan le décodeur PM4 et la traduction des shaders RDNA2, puis exécute et affiche via D3D12 et DXGI. Vulkan reste le choix par défaut, et aucun jeu ne passe encore par ce chemin.

Comment ça marche

MSAA

Partiel

Des comptes d'échantillons couleur et profondeur concordants en 2×, 4× et 8× restent sur l'image hôte jusqu'à un resolve ultérieur. Asterix utilise ce chemin pour la profondeur et le stencil MSAA, ce qui a retiré une grosse relecture accidentelle.

Comment ça marche

HTILE, DCC, CMASK et FMASK sont les métadonnées compressées de profondeur et de couleur de la console. PS5PCEM suit les pointeurs, efface HTILE dans les cas qu'il comprend, et refuse une disposition qu'il traiterait sinon par un detile incorrect.

Comment ça marche

Les textures PS5 sont stockées selon des motifs de swizzle GFX10, et non en lignes linéaires. PS5PCEM applique les équations d'adresse sur le CPU, et sur le GPU pour les grandes surfaces de 4, 8 et 16 octets qui s'y qualifient.

Comment ça marche

Le suivi de pages sur option surveille les pages invitées de 16 KiB. Le premier store CPU natif provoque une faute, avance une génération et invalide la copie GPU, pour que les pages inchangées ne soient pas hachées ni envoyées à chaque image.

Comment ça marche

VideoOut

Fonctionne

VideoOut enregistre les tampons d'affichage de l'invité et n'achève un flip qu'après l'acceptation de l'image par le rappel de présentation. La fenêtre hôte est une swapchain Vulkan en 1080p SDR.

Comment ça marche

Audio et vidéo

AudioOut

Fonctionne

AudioOut joue le PCM invité sur un périphérique Windows à 48 kHz. Les ports hérités ont leurs propres flux et leurs propres files, de sorte que la musique et les effets jouent ensemble, et un underrun conserve l'ordre des échantillons.

Comment ça marche

La convolution ACM exécute sur le CPU la réverbération partitionnée de FMOD. Les lots à entrée partagée transforment un seul signal sec, appliquent des partitions d'impulsion en flottant ou en demi-flottant, et additionnent par recouvrement le résultat mouillé.

Comment ça marche

Codecs AJM

Partiel

AJM décode ATRAC9, MP3, MPEG-4 AAC et Opus. Chaque instance de codec conserve son propre état, et un codec inconnu est rejeté au lieu d'être annoncé comme un succès silencieux.

Comment ça marche

NGS2

Partiel

NGS2 conserve les handles de système, de rack et de voix, analyse les données RIFF/WAVE ordinaires, et rythme un grain silencieux à 48 kHz pour qu'un worker DSP logiciel ne puisse pas tourner en boucle. La synthèse des voix elle-même est incomplète.

Comment ça marche

AvPlayer

Fonctionne

SceAvPlayer décode les conteneurs de films avec FFmpeg vers des images NV12 possédées par le titre et du PCM stéréo à 48 kHz. La lecture se termine lorsque la durée de la source est dépassée, même si le titre ne lit jamais l'un des flux.

Comment ça marche

Processeur, chargeur et outils

Sous Windows x86-64, le code machine de l'invité s'exécute directement. Un worker hôte porte chaque pthread invité, et la base FS est restaurée après chaque appel bloquant, parce que Windows ne la conserve pas.

Comment ça marche

Le chargeur mappe les modules SELF PS5 déchiffrés et les modules ELF64 nus, applique les relocations, et résout les imports contre le registre HLE. Le titre reçoit ensuite des handles stables pour les modules qu'il démarre lui-même.

Comment ça marche

DualSense, DualSense Edge et DualShock 4 sont lus par HID, en USB et en Bluetooth. Les manettes compatibles Xbox utilisent XInput. Le clavier est mappé sur les sticks par un profil du lanceur.

Comment ça marche

pkgextractor défait les dispositions FPKG de débogage observées en développement : le paquet externe, le PFS interne, les tables de noms NAPS et les charges utiles compressées par Kraken. Les paquets de vente au détail chiffrés sont hors sujet.

Comment ça marche

Ce que ces pages décrivent

Le texte suit les notes d’architecture et les rapports d’octobre 2026 du dépôt PS5PCEM. Un test ciblé qui passe n’est ni une nouvelle cadence d’images ni une nouvelle partie terminée.