Compteurs AMPR
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.
Notes du dépôt jusqu’au 10 octobre 2026
À quoi un titre utilise AMPR
Sur la console, AMPR est le moteur asynchrone qui déplace les données de fichiers et met à jour des compteurs sur lesquels le CPU et le GPU peuvent attendre. Les jeux s'en servent pour savoir qu'une lecture est arrivée, ou qu'une passe ultérieure peut commencer, sans tourner en boucle sur une variable partagée. PS5PCEM n'émule pas le bloc matériel AMPR. Il exécute le flux de commandes que le titre a construit, à l'intérieur du processus, et signale l'achèvement par la file d'événements AMPR que le titre a enregistrée.
La banque de compteurs contient 128 mots de 32 bits. Une paire est un compteur d'indice pair plus le mot suivant, lus et écrits comme une seule valeur de 64 bits. Un unique verrou couvre les deux moitiés et chaque lecture-modification-écriture, de sorte qu'un lecteur ne peut pas observer une paire déchirée. L'accès peut nommer la paire entière, le mot de 32 bits, l'une ou l'autre moitié de 16 bits, ou l'un des quatre octets.
Écritures, attentes et horodatages
Une écriture est un store, un OU bit à bit, un ET avec le complément, un XOR, ou une addition avec rebouclage, appliquée au champ sélectionné. Une attente compare ce champ à une référence sous un masque. Les comparaisons sont l'égalité, le supérieur, l'inférieur, la différence, une valeur de séquence atteinte, et les formes signées du supérieur et de l'inférieur. Les comparaisons de séquence décalent le bit de signe du champ vers le bit 63, de sorte que la même règle fonctionne sur 8, 16, 32 et 64 bits.
Une attente déjà satisfaite se termine sur place. Une attente non satisfaite conserve l'instantané de soumission et reprend avant les écritures et les événements ultérieurs de ce flux, y compris lorsqu'une soumission ultérieure sur le même thread invité fournit la valeur. L'API ordinaire et l'API _04_00 ont des listes d'arguments distinctes. Les horodatages sont enregistrés avec les commandes de compteurs. Les requêtes de taille d'achèvement que les titres importaient sont enregistrées, de sorte que ces appels se résolvent.
Ce que ce chemin a permis d'observer
Vingt-deux tests AMPR ciblés passent en ReleaseSafe, y compris des appels à travers la vraie surface d'export. Le démarrage de Grand Theft Auto III effectue plus de 10000 soumissions de lecture de fichiers APR et écrit plus de 350 événements d'achèvement AMPR, sans erreur AMPR correspondante sur ce chemin. Ce démarrage n'appelle pas lui-même l'API des compteurs. Le travail des compteurs est couvert par les tests et par les titres qui attendent effectivement ces valeurs.
Il s'agit d'une couverture d'API pour les commandes que l'émulateur exécute. Ce n'est pas un modèle au cycle près du contrôleur mémoire de la console, et cela ne revendique pas la temporisation du matériel.
Ce qui est en place
- Cent vingt-huit compteurs, avec des paires 64 bits cohérentes et des champs octet, demi-mot et mot.
- Store, OR, AND par complément, XOR et addition avec rebouclage, plus des attentes masquées et signées.
- Attentes bloquées qui gardent leur place dans le flux de commandes et reprennent quand la valeur arrive.
- Achèvement ordonné délivré par la file d'événements AMPR enregistrée.
Ce qui manque encore
- WaitOnAddress reste un bouchon.
- La temporisation matérielle du vrai bloc AMPR n'est pas reproduite.
- Une commande de compteur que le décodeur ne reconnaît pas n'est pas traitée silencieusement comme un succès.
Mécanismes liés
Ce que ces pages décrivent