Contadores AMPR
O AMPR no PS5PCEM é um modelo em software, local ao processo, dos comandos de contador e de conclusão do console. Cento e vinte e oito contadores aceitam armazenamentos, atualizações atômicas de campo, leituras em par e esperas mascaradas, na ordem de envio.
Notas do repositório até 10 de outubro de 2026
Para que um título usa o AMPR
No console, o AMPR é o motor assíncrono que move dados de arquivo e atualiza contadores nos quais a CPU e a GPU podem esperar. Os jogos o usam para saber que uma leitura chegou, ou que uma passagem posterior pode começar, sem ficar em espera ativa numa variável compartilhada. O PS5PCEM não emula o bloco de hardware AMPR. Ele executa o fluxo de comandos que o título montou, dentro do processo, e informa a conclusão pela fila de eventos AMPR que o título registrou.
O banco de contadores guarda 128 palavras de 32 bits. Um par é um contador de índice par mais a palavra seguinte, lido e escrito como um único valor de 64 bits. Um único lock cobre as duas metades e toda leitura-modificação-escrita, então um leitor não consegue observar um par rasgado. O acesso pode nomear o par inteiro, a palavra de 32 bits, qualquer uma das metades de 16 bits ou um dos quatro bytes.
Armazenamentos, esperas e marcas de tempo
Uma escrita é um armazenamento, um OR bit a bit, um AND com o complemento, um XOR ou uma adição modular, aplicada ao campo selecionado. Uma espera compara esse campo com uma referência sob uma máscara. As comparações são igual, maior, menor, diferente, um valor de sequência atingido e as formas com sinal de maior e menor. As comparações de sequência deslocam o bit de sinal do campo para o bit 63, de modo que a mesma regra vale em 8, 16, 32 e 64 bits.
Uma espera que já está satisfeita conclui no lugar. Uma espera que não está satisfeita guarda o instantâneo do envio e retoma antes de escritas e eventos posteriores nesse fluxo, inclusive quando um envio posterior na mesma thread convidada fornece o valor. A API comum e a API _04_00 têm listas de argumentos separadas. As marcas de tempo são registradas com os comandos de contador. As consultas de tamanho de conclusão que os títulos importavam estão registradas, então essas chamadas resolvem.
O que esse caminho foi observado fazer
Vinte e dois testes focados de AMPR passam em ReleaseSafe, inclusive chamadas pela superfície real de exportação. A inicialização de Grand Theft Auto III realiza mais de 10,000 envios de leitura de arquivo APR e escreve mais de 350 eventos de conclusão AMPR, sem erro AMPR correspondente nesse caminho. Essa inicialização não chama, por si, a API de contadores. O trabalho dos contadores é coberto pelos testes e por títulos que de fato esperam os valores.
Isto é cobertura de API para os comandos que o emulador executa. Não é um modelo em nível de ciclo do controlador de memória do console, e não afirma a temporização do hardware.
O que está implementado
- Cento e vinte e oito contadores, com pares de 64 bits coerentes e campos de byte, de meia palavra e de palavra.
- Armazenamento, OR, AND com complemento, XOR e adição modular, além de esperas mascaradas e com sinal.
- Esperas bloqueadas que guardam o lugar no fluxo de comandos e retomam quando o valor chega.
- Conclusão ordenada entregue pela fila de eventos AMPR registrada.
O que ainda falta
- WaitOnAddress continua sendo um espaço reservado.
- A temporização de hardware do bloco AMPR real não é reproduzida.
- Um comando de contador que o decodificador não reconhece não é tratado em silêncio como sucesso.
Mecanismos relacionados
O que estas páginas descrevem