HLE, emulação de firmware em alto nível
HLE é como o PS5PCEM responde às chamadas de firmware que um título importa. Cada NID numérico vira uma função Zig numa pilha do anfitrião, com a convenção de chamada System V do convidado preservada no Windows.
Notas do repositório até 10 de outubro de 2026
Por que o firmware não está no jogo
Um título de PlayStation 5 não traz o sistema operacional que chama. Suas importações são identificadores de 11 caracteres. O PS5PCEM calcula cada identificador a partir do nome exportado: SHA-1 do nome mais um sal fixo e, em seguida, os oito primeiros bytes do resumo numa variante de base64. Uma implementação se registra pelo nome legível e pode exigir o identificador que esse nome deve produzir, de modo que uma exportação com erro de grafia falha quando o módulo é compilado.
O ligador dinâmico procura o identificador junto com a biblioteca, o módulo e as versões deles. O mesmo identificador pode existir em mais de uma biblioteca. Existe uma busca só pelo identificador para importações que não trazem metadados utilizáveis, e essa alternativa é tratada como último recurso porque é ambígua.
A chamada roda numa pilha do anfitrião
O convidado chama o firmware diretamente, então a chamada começa na pilha da thread convidada, muitas vezes de um megabyte porque foi isso que o título pediu. Trabalho do anfitrião, como abrir um arquivo, precisa de um quadro de pilha bem maior. O compilador reserva esse quadro na entrada, antes de qualquer retorno antecipado. Um corpo de firmware pode, portanto, sair da pilha convidada antes de chegar à linha que precisava do espaço, e a falha cai fora de todo mapeamento convidado.
Toda chamada HLE troca para uma pilha do anfitrião por thread enquanto dura o trabalho do anfitrião. Os argumentos viajam pela memória, então um único stub em assembly serve a qualquer assinatura, inclusive retornos em ponto flutuante e de agregados. Chamadas de firmware aninhadas permanecem na pilha que a chamada externa já estabeleceu. No Windows o convidado usa a convenção System V AMD64 enquanto o anfitrião usa Microsoft x64, então toda função chamável pelo convidado é declarada com a convenção do convidado. Omitir essa declaração ainda compila, e então os argumentos são lidos dos registradores errados.
O que a superfície HLE cobre
Por cima dessa maquinaria, as bibliotecas de firmware fornecem memória direta e flexível, handles de módulo, pthreads, sincronização, arquivos, savedata, fibras, fontes, PNG, o relógio, controles, AudioOut, AJM, NGS2, ACM, AvPlayer, APR e AMPR. Rede, SSL e a NP Web API mantêm o contexto e o tempo de vida das requisições e devolvem erros offline determinísticos. Diálogos que precisam de um shell do sistema terminam imediatamente com um resultado coerente e sem interface.
A execução de validação de 10 de outubro passou a suíte HLE completa em ReleaseSafe, 606 de 606 testes. Essa contagem é a da suíte de firmware. Ela não registra, por si só, uma nova taxa de quadros nem uma nova partida terminada.
O que está implementado
- Cálculo de NID, um registro de símbolos com versão e uma troca para a pilha do anfitrião em toda chamada de firmware.
- Chamadas System V do convidado no Windows, onde a convenção do anfitrião é Microsoft x64.
- Memória, arquivos, threads, savedata, mídia, codecs de áudio e o caminho de comandos APR/AMPR.
- Diálogos sem interface e um perfil de rede offline que não abre soquetes do anfitrião.
O que ainda falta
- Bibliotecas que o título importa e que o PS5PCEM ainda não implementou continuam fazendo a importação falhar.
- O carregamento realmente sob demanda de um módulo que não estava no grafo publicado devolve um erro.
- Serviços de plataforma que precisam de um shell, de uma conta ou de um par de rede reais permanecem indisponíveis.
Mecanismos relacionados
O que estas páginas descrevem