YNIX / RECOMP
Ynix Recomp / PlayStation 2
Em andamento

Ynix PS2 Recomp

Projeto experimental de engenharia reversa e recompilação estática. O objetivo é traduzir o executável original para código nativo em Windows e Linux, sem substituir o console por um emulador.

Alvo: WindowsAlvo: Linux
Ver diário e changelog
objetivo

Recompilação nativa

Pesquisar o caminho técnico para traduzir o software do console para uma execução nativa em Windows e Linux. O progresso será registrado com evidências, limites e bloqueios reais.

estado

Desenvolvimento ativo

229 atualizações públicas vinculadas a esta área.

histórico do console

Atualizações e changelog

229 registros
Avanços

ACTION processa os primeiros pacotes pelo DMA GIF recompilado

O ACTION.ELF parcial passou pela inicialização do DMAC e executou as primeiras transferências do canal GIF com o perfil nativo limitado do Ynix.

Bloqueio
O harness não ativava o parser GIF já existente e faltavam registradores básicos de VIF, GIF, IPU e DMAC. O CHCR=0x101 do guest era interrompido antes...
Solução
Adicionei estado para configuração dos canais DMA e registradores globais DMAC, respeitando os campos do PS2Tek. A opção --profile-d2-gif habilita exp...
META 019 Abrir atualização
Avanços

META 019: ACTION atravessa VSUB VU0 e alcança nova barreira dinâmica

A recompilação estática do ACTION.ELF agora executa a instrução COP2 VSUB observada e retoma as trocas de thread com ABI 8. A sonda parcial avançou até o destino dinâmico 0x00348890, fora do código compilado.

Bloqueio
O subset parava em VSUB.xyzw vf31,vf0,vf0 porque o estado e a semântica VU0 ainda não estavam modelados. A validação também revelou que o backend escr...
Solução
Anexei ao ABI 8 os registradores vetoriais VU0 e flags, implementei somente o encoding observado (vf0={0,0,0,1}; resultado vf31={0,0,0,0}; flags de ze...
META 019 Abrir atualização
Avanços

META 019: dispatch de threads retomado; novo limite em COP2/VU0

O runtime ABI 7 agora preserva HI/LO e retoma a thread escolhida pelo scheduler no subset compilado. A sonda parcial do ACTION.ELF avancou ate a primeira instrucao COP2/VU0 ainda sem semantica.

Bloqueio
O subset de 1.024 blocos parava em MTLO por falta de lowering LLVM; depois dessa correcao, a execucao para em VSUB COP2 (0x4BE007EC, PC 0x00138074) ap...
Solução
Implementei MTHI/MTLO com HI/LO persistentes em ABI 7, dispatch por PC para retomar uma thread e repeticao limitada no harness. scripts/build.ps1 comp...
META 019 Abrir atualização
Avanços

META 019: ACTION chega ao dispatch cooperativo de threads

A recompilação parcial atual do ACTION.ELF alcança a inicialização da thread principal e identifica um limite do runner: após uma troca cooperativa, o artefato retorna o alvo de dispatch sem retomar a thread selecionada.

Bloqueio
O backend emite status 16 (MODULE_DISPATCH) depois do commit da troca de thread, mas o harness direto gerado chama ynix_run uma única vez e encerra. O...
Solução
Recompilei ACTION.ELF com ABI 6 e limite de 512 blocos; a execução diagnóstica, com 100 milhões de instruções disponíveis, executou 14.108.586 até o h...
META 019 Abrir atualização
Avanços

META 019: replay inicia sem estado TLB da BIOS

O harness entra diretamente no MOVIE recompilado, sem executar BIOS EE nem fornecer TLB; o MOVIE nao configura suas proprias entradas TLB no segmento executavel.

Bloqueio
O runtime mapeia RAM baixa diretamente para os mesmos offsets fisicos. O replay prova o resultado desse perfil, mas nao comprova a traducao virtual at...
Solução
Auditei a inicializacao do CLI, o ABI de YnixNativeState e o PT_LOAD executavel do MOVIE: estado nasce zerado com PC/SP/fuel e nenhuma instrucao TLBR/...
META 019 Abrir atualização
Avanços

META 019: verificar TLB antes de interpretar o destino zero

PS2Tek lista VA 0 para PA 0 na tabela EE, mas classifica kuseg como TLB-mapeado; a referência não revela a entrada ativa no boot do jogo.

Bloqueio
O perfil Ynix traduz endereços EE baixos diretamente para RAM física e não modela TLB ou exceções de refill/invalid. A captura confirma que esse perfi...
Solução
Corrigi a análise para separar tabela geral, regra TLB e convenção de NULL. Não desmapeei página zero por suposição: o jogo acessa o descritor em 0x10...
META 019 Abrir atualização
Avanços

META 019: ramo da lista vazia deixa payload nulo

A auditoria do objeto confirma que a lista global vazia pula a atribuição de payload no registro tipo 9; um registro vizinho mostra a atribuição funcionando no outro caminho.

Bloqueio
No replay, 0x00149BC0 está vazio. O desvio em 0x00114588 pula o store 0x001145BC, deixando 0x009BDA64 nulo. A limpeza posterior trata o tipo 9 como de...
Solução
Ampliei o watch guest para 0x009BDA40..0x009BDB3F. Ele confirma que o registro vizinho 0x009BDA70 recebe 0x009BE040 em +0x24 via 0x00113FB4, enquanto...
META 019 Abrir atualização
Avanços

META 019: contexto do buffer durante a limpeza guest

A captura simultânea mostra que o buffer 0x009BDA40 segue registrado no gerenciador quando o guest inicia o zero-fill em endereço nulo.

Bloqueio
O objeto guest 0x009BDA40 usa o campo +0x24 como destino e esse campo vale zero. O zero-fill apaga o descritor low-RAM; o replay depois para em 0x0010...
Solução
Ampliei a auditoria SQ para registrar no mesmo instante as listas +0x20 e +0x30, o buffer +0x24, o limite +0x28 e words do objeto até +0x7C. O log con...
META 019 Abrir atualização
Avanços

META 019: lista ativa do gerenciador e campo nulo sao distintos

O watch ampliado mostrou que o gerenciador possui uma lista ativa em 0x00149BB0: o guest insere os nos 0x009BDA70 e 0x009BDA40 e depois os remove. O campo 0x00149BC0 e separado e segue nulo.

Bloqueio
O caminho de 0x00114528 consulta o campo 0x00149BC0 (+0x30), enquanto a lista ativa observada fica em 0x00149BB0 (+0x20). O campo objeto+0x24 ainda ch...
Solução
Ampliei a auditoria para 0x00149B90..0x00149BDF e correlacionei as escritas com os PCs 0x00114AF0 e 0x00114E90. Isso separa os dois campos e corrige q...
META 019 Abrir atualização
Avanços

META 019: lista global chega vazia no replay do MOVIE

O watch de 0x00149BC0 confirmou que a escrita zero observada ocorre durante o SIF DMA que carrega o MOVIE. Os bytes do ELF nesse endereco tambem sao zero, e nenhuma escrita guest nao nula apareceu no replay.

Bloqueio
O caminho do MOVIE depende da lista global 0x00149BC0, que permanece vazia neste replay. A rotina posterior recebe objeto+0x24 = 0, limpa RAM baixa e...
Solução
Armei um watch no global e correlacionei PC 0x001714D0 com a leitura do arquivo e o DMA para 0x00148000. O endereco fica no bloco copiado do PT_LOAD d...
META 019 Abrir atualização