Zum Inhalt springen
PS5PCEM
TeilweiseFirmware und HLE

AMPR-Zähler

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.

Repository-Notizen bis 10. Oktober 2026

Wofür ein Titel AMPR nutzt

Auf der Konsole ist AMPR die asynchrone Engine, die Dateidaten bewegt und Zähler aktualisiert, auf die CPU und GPU warten können. Spiele nutzen das, um zu wissen, dass ein Lesevorgang angekommen ist oder dass ein späterer Pass beginnen darf, ohne in einer Schleife auf einer gemeinsamen Variablen zu warten. PS5PCEM emuliert den AMPR-Hardwareblock nicht. Es führt den Befehlsstrom aus, den der Titel gebaut hat, innerhalb des Prozesses, und meldet den Abschluss über die AMPR-Ereigniswarteschlange, die der Titel registriert hat.

Die Zählerbank hält 128 Wörter zu 32 Bit. Ein Paar ist ein gerader Zähler plus das nächste Wort, gelesen und geschrieben als ein 64-Bit-Wert. Eine einzige Sperre deckt beide Hälften und jedes Read-Modify-Write ab, sodass ein Leser kein zerrissenes Paar beobachten kann. Der Zugriff kann das ganze Paar, das 32-Bit-Wort, eine der beiden 16-Bit-Hälften oder eines der vier Bytes benennen.

Stores, Wartebedingungen und Zeitstempel

Eine Schreiboperation ist ein Store, ein bitweises OR, ein AND mit dem Komplement, ein XOR oder eine umlaufende Addition, angewandt auf das gewählte Feld. Eine Wartebedingung vergleicht dieses Feld unter einer Maske mit einem Bezugswert. Die Vergleiche sind gleich, größer, kleiner, ungleich, ein erreichter Sequenzwert sowie die vorzeichenbehafteten Formen von größer und kleiner. Sequenzvergleiche schieben das Vorzeichenbit des Feldes auf Bit 63, sodass dieselbe Regel bei 8, 16, 32 und 64 Bit gilt.

Eine Wartebedingung, die bereits erfüllt ist, schließt an Ort und Stelle ab. Eine nicht erfüllte Wartebedingung behält den Schnappschuss der Einreichung und setzt vor späteren Schreibvorgängen und Ereignissen auf diesem Strom fort, auch wenn eine spätere Einreichung auf demselben Gast-Thread den Wert liefert. Die gewöhnliche API und die API _04_00 haben getrennte Argumentlisten. Zeitstempel werden zusammen mit den Zählerbefehlen aufgezeichnet. Abfragen der Abschlussgröße, die Titel importierten, sind registriert, sodass diese Aufrufe aufgelöst werden.

Was auf diesem Pfad beobachtet wurde

22 gezielte AMPR-Tests bestehen in ReleaseSafe, einschließlich Aufrufen durch die echte Exportoberfläche. Der Start von Grand Theft Auto III führt mehr als 10,000 Einreichungen von APR-Dateilesungen aus und schreibt mehr als 350 AMPR-Abschlussereignisse, ohne einen diesem Pfad zugeordneten AMPR-Fehler. Dieser Start ruft die Zähler-API selbst nicht auf. Die Zählerarbeit decken die Tests ab und Titel, die auf die Werte warten.

Das ist die API-Abdeckung für die Befehle, die der Emulator ausführt. Es ist kein zyklusgenaues Modell des Speichercontrollers der Konsole, und es beansprucht nicht das Zeitverhalten der Hardware.

Was umgesetzt ist

  • 128 Zähler mit kohärenten 64-Bit-Paaren sowie Feldern für Byte, Halbwort und Wort.
  • Store, OR, AND mit Komplement, XOR und umlaufende Addition, dazu maskierte und vorzeichenbehaftete Wartebedingungen.
  • Blockierte Wartebedingungen, die ihren Platz im Befehlsstrom behalten und fortsetzen, wenn der Wert eintrifft.
  • Geordneter Abschluss, zugestellt über die registrierte AMPR-Ereigniswarteschlange.

Was noch fehlt

  • WaitOnAddress bleibt ein Platzhalter.
  • Das Zeitverhalten der Hardware des echten AMPR-Blocks wird nicht nachgebildet.
  • Ein Zählerbefehl, den der Decoder nicht erkennt, wird nicht stillschweigend als Erfolg behandelt.

Verwandte Mechanismen

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.

Alle Techniken