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.
Como funcionaImplementação
Como o PS5PCEM funciona
Cada página é um mecanismo que o emulador realmente executa: o que o console faz, o que o código Zig faz e o que ainda falta.
Notas do repositório até 17 de outubro de 2026
Firmware e HLE
Contadores AMPR
ParcialO 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.
Como funcionaO APR resolve um arquivo do título uma vez e depois carrega um identificador local ao processo nos buffers de comando seguintes. Leituras AMPR adiadas reabrem esse mesmo arquivo /app0 somente leitura sem manter um descritor do anfitrião para sempre.
Como funcionaEndereços convidados são endereços reais do anfitrião. A memória direta é um pool físico compartilhado e esparso mapeado nesse espaço, e o MemoryPool acrescenta reserva, commit e operações em lote sobre o mesmo suporte.
Como funcionaSavedata
FuncionaUm slot de save montado vira um /savedata0 gravável. O título usa a API de arquivo comum, e a execução seguinte encontra os mesmos arquivos sob o código de produto que o título publica.
Como funcionaRenderização de fontes
ParcialA libSceFont rasteriza faces TrueType e OpenType fornecidas pelo título com FreeType. Pedidos de fonte do sistema usam o substituto Noto Sans incluído para latim, grego e cirílico.
Como funcionaO codificador de PNG escreve arquivos RGB ou RGBA de 8 bits a partir de pixels RGBA ou BGRA com pitch. O decodificador lê imagens não entrelaçadas em escala de cinza, paleta, RGB e RGBA para um buffer convidado verificado.
Como funcionaRelógio de tempo real
ParcialO RTC verifica campos de calendário, converte FILETIME do Windows e faz aritmética verificada de ticks. O convidado vê um relógio coerente sem a conversão de horário de verão do anfitrião.
Como funcionaNo Windows, cada fibra da libSceFiber é uma fibra real do Windows, então uma troca preserva os registradores convidados e a pilha convidada. Threads de nível de usuário começam pelo mesmo caminho de pthread.
Como funcionaA API de AIO do kernel aceita um lote de leituras e devolve um identificador. O PS5PCEM executa o lote no momento do envio, o que a interface permite, e o título recolhe um resultado já terminado.
Como funcionaGráficos
Um título de PS5 monta pacotes de GPU na própria memória e envia o buffer. O PS5PCEM decodifica esse fluxo PM4, mantém o estado dos registradores e executa desenhos e dispatches em ordem.
Como funcionaShaders RDNA2 para SPIR-V
ParcialOs shaders de PlayStation 5 são código de máquina RDNA2. O PS5PCEM decodifica as famílias GFX10, monta um grafo de fluxo de controle e rebaixa as operações suportadas para SPIR-V 1.5 destinado ao Vulkan.
Como funcionaShaders de vértice NGG
ParcialProgramas de vértice NGG fundidos, inclusive um shader de fetch que continua com S_SETPC_B64, são traduzidos como um único estágio de gráficos. O programa de exportação guarda a própria janela de user data.
Como funcionaIMAGE_LOAD_BY2, BY4, PCK2 e PCK4, inclusive as formas com mip explícito, executam para os formatos 2D nativos medidos. Uma carga BY devolve texels consecutivos. Uma carga PCK empacota os bits brutos deles num registrador.
Como funcionaGathers horizontais
ParcialIMAGE_GATHER4H e IMAGE_GATHER4H_PCK reúnem um canal ao longo de um grupo horizontal de texels. O subconjunto direto 1D e 2D medido é coberto por 1,242 dispatches de GPU.
Como funcionaChamadas escalares de shader
ParcialS_SWAPPC_B64 e S_CALL_B64 salvam um endereço de retorno completo e executam uma sub-rotina local limitada, inclusive um chamado que fica depois de ENDPGM. Um shader de fetch do AGC verificado pode ser ligado do mesmo modo.
Como funcionaRenderizador Vulkan
FuncionaO backend Vulkan carrega o driver em tempo de execução, exige Vulkan 1.2 e apresenta quadros convidados por uma swapchain. Alvos de renderização, imagens de armazenamento e pipelines permanecem residentes entre desenhos.
Como funcionaBackend Direct3D 12
ParcialUm renderizador nativo e experimental para Windows, adicionado depois da 0.3.5. Ele compartilha com o Vulkan o decodificador PM4 e a tradução de shaders RDNA2 e depois executa e apresenta por D3D12 e DXGI. O Vulkan continua sendo o padrão, e os jogos ainda não passam por esse caminho.
Como funcionaMSAA
ParcialContagens coincidentes de 2×, 4× e 8× amostras de cor e de profundidade permanecem na imagem do anfitrião até um resolve posterior. Asterix usa esse caminho para profundidade e stencil com MSAA, o que removeu um grande readback acidental.
Como funcionaHTILE, DCC, CMASK e FMASK
ParcialHTILE, DCC, CMASK e FMASK são os metadados comprimidos de profundidade e de cor do console. O PS5PCEM rastreia os ponteiros, limpa o HTILE nos casos que entende e recusa um layout que, de outro modo, faria detile de forma incorreta.
Como funcionaDetile de texturas
ParcialAs texturas de PS5 ficam armazenadas em padrões de swizzle GFX10, não em linhas lineares. O PS5PCEM aplica as equações de endereço na CPU e, na GPU, para as superfícies grandes de 4, 8 e 16 bytes que se qualificam.
Como funcionaRastreador de páginas da GPU
ParcialO rastreador de páginas, de adesão explícita, vigia páginas convidadas de 16 KiB. O primeiro armazenamento nativo da CPU gera uma falha, avança uma geração e invalida a cópia da GPU, para que páginas inalteradas não sejam submetidas a hash e enviadas a cada quadro.
Como funcionaVideoOut
FuncionaO VideoOut registra os buffers de exibição do convidado e só conclui um flip depois que o callback de apresentação aceitou o quadro. A janela do anfitrião é uma swapchain Vulkan em 1080p SDR.
Como funcionaÁudio e vídeo
AudioOut
FuncionaO AudioOut reproduz PCM do convidado num dispositivo Windows a 48 kHz. As portas legadas têm fluxos e filas próprios, então música e efeitos tocam juntos, e um underrun preserva a ordem das amostras.
Como funcionaConvolução ACM
ParcialA convolução ACM executa na CPU a reverberação particionada do FMOD. Lotes de entrada compartilhada transformam um sinal seco, aplicam partições de impulso em float ou em meia precisão e fazem overlap-add do resultado úmido.
Como funcionaCodecs AJM
ParcialO AJM decodifica ATRAC9, MP3, AAC MPEG-4 e Opus. Cada instância de codec guarda o próprio estado, e um codec desconhecido é rejeitado em vez de ser informado como sucesso silencioso.
Como funcionaNGS2
ParcialO NGS2 guarda handles de sistema, de rack e de voz, analisa dados RIFF/WAVE comuns e ritma um grão silencioso de 48 kHz para que um worker de DSP em software não entre em espera ativa. A síntese de voz, em si, está incompleta.
Como funcionaAvPlayer
FuncionaO SceAvPlayer decodifica contêineres de filme com FFmpeg para quadros NV12 que pertencem ao título e para PCM estéreo de 48 kHz. A reprodução termina quando passa a duração da origem, mesmo que o título nunca leia um dos fluxos.
Como funcionaCPU, carregador e ferramentas
Execução nativa do convidado
FuncionaNo Windows x86-64, o código de máquina do convidado roda diretamente. Um worker do anfitrião carrega cada pthread do convidado, e a base de FS é restaurada depois de toda chamada bloqueante porque o Windows não a conserva.
Como funcionaCarregamento de ELF e de SELF
FuncionaO carregador mapeia módulos SELF de PS5 já descriptografados e módulos ELF64 simples, aplica as relocações e resolve as importações contra o registro do HLE. O título então recebe handles estáveis para os módulos que ele mesmo inicia.
Como funcionaControles e teclado
FuncionaDualSense, DualSense Edge e DualShock 4 são lidos por HID, em USB e em Bluetooth. Controles compatíveis com Xbox usam XInput. O teclado é mapeado para os analógicos por um perfil do lançador.
Como funcionaExtrator de PKG
ParcialO pkgextractor desempacota os layouts FPKG de depuração observados no desenvolvimento: o pacote externo, o PFS interno, os mapas de nomes NAPS e os payloads comprimidos com Kraken. Pacotes de varejo criptografados estão fora do escopo.
Como funcionaO que estas páginas descrevem