Zum Inhalt springen
PS5PCEM

Umsetzung

So arbeitet PS5PCEM

Jede Seite ist ein Mechanismus, den der Emulator wirklich ausführt: was die Konsole tut, was der Zig-Code tut und was noch fehlt.

Repository-Notizen bis 17. Oktober 2026

Firmware und HLE

HLE ist die Art, wie PS5PCEM die Firmware-Aufrufe beantwortet, die ein Titel importiert. Jede numerische NID wird zu einer Zig-Funktion auf einem Host-Stack, wobei die System-V-Aufrufkonvention des Gastes unter Windows erhalten bleibt.

So funktioniert es

AMPR-Zähler

Teilweise

AMPR in PS5PCEM ist ein prozesslokales Softwaremodell der Zähler- und Abschlussbefehle der Konsole. 128 Zähler nehmen Stores, atomare Feldaktualisierungen, paarweise Lesezugriffe und maskierte Wartebedingungen entgegen, in der Reihenfolge der Einreichung.

So funktioniert es

APR löst eine Titeldatei einmal auf und trägt danach eine prozesslokale Kennung in späteren Befehlspuffern. Aufgeschobene AMPR-Lesevorgänge öffnen dieselbe nur lesbare Datei unter /app0 erneut, ohne einen Host-Deskriptor dauerhaft zu behalten.

So funktioniert es

Spielstände

Funktioniert

Ein eingehängter Spielstand-Slot wird zu einem beschreibbaren /savedata0. Der Titel nutzt die gewöhnliche Datei-API, und der nächste Start findet dieselben Dateien unter dem Produktcode, den der Titel bekannt gibt.

So funktioniert es

libSceFont rastert vom Titel gelieferte TrueType- und OpenType-Schriftschnitte mit FreeType. Anforderungen einer Systemschrift nutzen den mitgelieferten Ersatz Noto Sans für Lateinisch, Griechisch und Kyrillisch.

So funktioniert es

Der PNG-Kodierer schreibt 8-Bit-RGB- oder RGBA-Dateien aus RGBA- oder BGRA-Pixeln mit Pitch. Der Dekodierer liest nicht verschachtelte Bilder in Graustufen, Palette, RGB und RGBA in einen geprüften Gastpuffer.

So funktioniert es

Echtzeituhr

Teilweise

RTC prüft Kalenderfelder, wandelt Windows-FILETIME um und rechnet Ticks geprüft. Der Gast sieht eine zusammenhängende Uhr ohne die Sommerzeitumrechnung des Hosts.

So funktioniert es

Unter Windows ist jeder Fiber von libSceFiber ein echter Windows-Fiber, sodass ein Wechsel die Gastregister und den Gast-Stack behält. User-Level-Threads starten über denselben pthread-Pfad.

So funktioniert es

Die AIO-API des Kernels nimmt einen Batch von Lesevorgängen an und gibt eine Kennung zurück. PS5PCEM führt den Batch bei der Einreichung aus, was die Schnittstelle erlaubt, und der Titel holt ein fertiges Ergebnis ab.

So funktioniert es

Grafik

Ein PS5-Titel baut GPU-Pakete in seinem eigenen Speicher und reicht den Puffer ein. PS5PCEM dekodiert diesen PM4-Strom, behält den Registerzustand und führt Zeichenaufrufe und Dispatches der Reihe nach aus.

So funktioniert es

Shader der PlayStation 5 sind RDNA2-Maschinencode. PS5PCEM dekodiert die GFX10-Familien, baut einen Kontrollflussgraphen und senkt die unterstützten Operationen auf SPIR-V 1.5 für Vulkan ab.

So funktioniert es

Zusammengeführte NGG-Vertexprogramme, einschließlich eines Fetch-Shaders, der mit S_SETPC_B64 fortsetzt, werden als eine Grafikstufe übersetzt. Das Exportprogramm behält sein eigenes User-Data-Fenster.

So funktioniert es

IMAGE_LOAD_BY2, BY4, PCK2 und PCK4, einschließlich der Formen mit explizitem Mip, werden für die gemessenen nativen 2D-Formate ausgeführt. Ein BY-Ladevorgang liefert aufeinanderfolgende Texel. Ein PCK-Ladevorgang packt ihre Rohbits in ein Register.

So funktioniert es

IMAGE_GATHER4H und IMAGE_GATHER4H_PCK sammeln einen Kanal über eine waagerechte Gruppe von Texeln. Die gemessene direkte Teilmenge für 1D und 2D ist durch 1,242 GPU-Dispatches abgedeckt.

So funktioniert es

S_SWAPPC_B64 und S_CALL_B64 sichern eine volle Rückkehradresse und führen ein begrenztes lokales Unterprogramm aus, auch einen Callee, der hinter ENDPGM liegt. Ein geprüfter AGC-Fetch-Shader kann auf dieselbe Weise verbunden werden.

So funktioniert es

Vulkan-Renderer

Funktioniert

Das Vulkan-Backend lädt den Treiber zur Laufzeit, verlangt Vulkan 1.2 und gibt Gastbilder über eine Swapchain aus. Renderziele, Storage-Images und Pipelines bleiben über Zeichenaufrufe hinweg resident.

So funktioniert es

Ein experimenteller nativer Windows-Renderer, hinzugekommen nach 0.3.5. Er teilt sich den PM4-Decoder und die RDNA2-Shaderübersetzung mit Vulkan und führt dann über D3D12 und DXGI aus und stellt dar. Vulkan bleibt Standard, und Spiele laufen über diesen Weg noch nicht.

So funktioniert es

MSAA

Teilweise

Passende Samplezahlen von 2×, 4× und 8× für Farbe und Tiefe bleiben bis zu einem späteren Resolve auf dem Host-Bild. Asterix nutzt diesen Pfad für MSAA-Tiefe und Stencil, wodurch ein großes versehentliches Rücklesen entfiel.

So funktioniert es

HTILE, DCC, CMASK und FMASK sind die komprimierten Tiefen- und Farbmetadaten der Konsole. PS5PCEM verfolgt die Zeiger, löscht HTILE in den Fällen, die es versteht, und weist ein Layout zurück, das es sonst falsch entkacheln würde.

So funktioniert es

PS5-Texturen liegen in GFX10-Swizzle-Mustern, nicht in linearen Zeilen. PS5PCEM wendet die Adressgleichungen auf der CPU an und auf der GPU für die großen Oberflächen mit 4, 8 und 16 Byte, die dafür infrage kommen.

So funktioniert es

Der zuschaltbare Seitenverfolger beobachtet Gastseiten von 16 KiB. Der erste native CPU-Store löst einen Fehler aus, erhöht eine Generation und macht die GPU-Kopie ungültig, sodass unveränderte Seiten nicht in jedem Bild gehasht und hochgeladen werden.

So funktioniert es

VideoOut

Funktioniert

VideoOut registriert die Anzeigepuffer des Gastes und schließt einen Flip erst ab, nachdem der Darstellungsrückruf das Bild angenommen hat. Das Host-Fenster ist eine Vulkan-Swapchain in 1080p SDR.

So funktioniert es

Ton und Video

AudioOut

Funktioniert

AudioOut gibt Gast-PCM auf einem Windows-Gerät mit 48 kHz wieder. Ältere Ports haben eigene Ströme und Warteschlangen, sodass Musik und Effekte zusammen laufen, und ein Underrun behält die Sample-Reihenfolge.

So funktioniert es

ACM-Faltung

Teilweise

Die ACM-Faltung führt den partitionierten Hall von FMOD auf der CPU aus. Batches mit gemeinsamem Eingang transformieren ein Dry-Signal, wenden Impulspartitionen in Float oder Halbfloat an und fügen das Wet-Ergebnis per Overlap-Add zusammen.

So funktioniert es

AJM-Codecs

Teilweise

AJM dekodiert ATRAC9, MP3, MPEG-4 AAC und Opus. Jede Codec-Instanz behält ihren eigenen Zustand, und ein unbekannter Codec wird abgelehnt, statt als stiller Erfolg gemeldet zu werden.

So funktioniert es

NGS2

Teilweise

NGS2 behält Handles für System, Rack und Voice, liest gewöhnliche RIFF/WAVE-Daten und taktet ein stilles Grain mit 48 kHz, damit ein Software-DSP-Worker nicht in einer Schleife drehen kann. Die Voice-Synthese selbst ist unvollständig.

So funktioniert es

AvPlayer

Funktioniert

SceAvPlayer dekodiert Filmcontainer mit FFmpeg in NV12-Bilder, die dem Titel gehören, und in Stereo-PCM mit 48 kHz. Die Wiedergabe endet, wenn die Dauer der Quelle überschritten ist, auch wenn der Titel einen der Ströme nie liest.

So funktioniert es

CPU, Lader und Werkzeuge

Unter Windows x86-64 läuft der Maschinencode des Gastes direkt. Ein Host-Worker trägt jeden Gast-pthread, und die FS-Basis wird nach jedem blockierenden Aufruf wiederhergestellt, weil Windows sie nicht behält.

So funktioniert es

Der Lader bildet entschlüsselte PS5-SELF- und nackte ELF64-Module ab, wendet Relokationen an und löst Importe gegen die HLE-Registrierung auf. Der Titel erhält danach stabile Handles für Module, die er selbst startet.

So funktioniert es

DualSense, DualSense Edge und DualShock 4 werden über HID gelesen, an USB und Bluetooth. Pads, die zu Xbox passen, nutzen XInput. Die Tastatur wird über ein Launcher-Profil auf die Sticks abgebildet.

So funktioniert es

PKG-Extraktor

Teilweise

pkgextractor packt die in der Entwicklung beobachteten Debug-Layouts von FPKG aus: das äußere Paket, das innere PFS, NAPS-Namensabbildungen und mit Kraken komprimierte Nutzlasten. Verschlüsselte Retail-Pakete liegen außerhalb des Umfangs.

So funktioniert es

Worum es auf diesen Seiten geht

Der Text folgt den Architektur-Notizen und den Berichten vom Oktober 2026 im PS5PCEM-Repository. Ein bestandener Einzeltest ist keine neue Bildrate und kein neuer Durchspielstand.