HLE est la façon dont PS5PCEM répond aux appels de micrologiciel qu'un titre importe. Chaque NID numérique devient une fonction Zig sur une pile hôte, la convention d'appel System V de l'invité étant préservée sous Windows.
Comment ça marcheMise 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
Compteurs AMPR
PartielAMPR 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 marcheAPR 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 marcheLes adresses invitées sont de vraies adresses hôtes. La mémoire directe est un pool physique partagé creux mappé dans cet espace, et MemoryPool ajoute la réserve, le commit et les opérations par lot au-dessus du même support.
Comment ça marcheSavedata
FonctionneUn 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 marcheRendu des polices
PartiellibSceFont 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 marcheEncodage et décodage PNG
PartielL'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 marcheHorloge temps réel
PartielRTC 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 marcheSous 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 marcheL'API AIO du noyau accepte un lot de lectures et renvoie un identifiant. PS5PCEM exécute le lot à la soumission, ce que l'interface permet, et le titre recueille un résultat terminé.
Comment ça marcheGraphisme
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 marcheShaders RDNA2 vers SPIR-V
PartielLes 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 marcheShaders de sommets NGG
PartielLes 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 marcheIMAGE_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 marcheGathers horizontaux
PartielIMAGE_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 marcheAppels scalaires de shader
PartielS_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 marcheMoteur de rendu Vulkan
FonctionneLe 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 marcheBackend Direct3D 12
PartielUn 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 marcheMSAA
PartielDes 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 marcheHTILE, DCC, CMASK et FMASK
PartielHTILE, 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 marcheDetile des textures
PartielLes 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 marcheSuivi de pages GPU
PartielLe 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 marcheVideoOut
FonctionneVideoOut 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 marcheAudio et vidéo
AudioOut
FonctionneAudioOut 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 marcheConvolution ACM
PartielLa 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 marcheCodecs AJM
PartielAJM 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 marcheNGS2
PartielNGS2 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 marcheAvPlayer
FonctionneSceAvPlayer 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 marcheProcesseur, chargeur et outils
Exécution native de l'invité
FonctionneSous 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 marcheChargement ELF et SELF
FonctionneLe 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 marcheManettes et clavier
FonctionneDualSense, 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 marcheExtracteur PKG
Partielpkgextractor 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 marcheCe que ces pages décrivent