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.
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.
O entry recompilado do ELF do jogo executou 20 milhões de instruções com SIFCMD recompilado em paralelo. A EE leu SMFLAG=0 e chegou a um polling guest; a execução parou no limite de fuel, sem iniciar o jogo.
Bloqueio
O runner anterior não inicializava SIFCMD antes da entrada EE, então sceSifGetReg(4) não encontrava um valor SIF compartilhado. Mesmo com o estado ini...
Solução
Adicionei runner reduzido com entry real SLUS_202.65 e entry recompilado de SIFCMD no mesmo contexto. O SIFCMD bloqueia em 0x00101958 com MSFLAG=0; a...
Recompilamos os roots SIFCMD e LOADFILE da ISO e executamos o harness reduzido: LOADFILE registrou SID 0x80000006 e respondeu ao bind CID 0x80000008.
Bloqueio
Depois da limpeza, o harness de threads falhava antes de carregar os módulos porque limitava a memória EE a 32 MiB, sem espaço para os 16 KiB de scrat...
Solução
Ajustei o orçamento para 64 MiB mantendo a RAM guest em 32 MiB e recriei os roots estáticos por scripts/prepare-goal019-loadfile-thread.ps1. O runner...
O runner combinado agora mantém o contexto IOP quando SIFCMD recompilado aguarda o SMFLAG real da EE e o retoma após a escrita guest de SIFINIT.
Bloqueio
No reboot, setup_iop tratava a espera inicial legítima de SIFCMD como erro fatal e destruía o contexto antes de a EE concluir o carregamento dos módul...
Solução
O status bloqueado agora preserva o contexto. O hook validado de sceSifSetReg encaminha SMFLAG, retoma SIFCMD no ponto de espera e, após sua conclusão...
O SIFCMD recompilado estaticamente chega à chamada guest sceSifInit e bloqueia aguardando MSFLAG, com perfil IOP explicitamente zerado.
Bloqueio
O harness anterior não registrava o perfil de reset e parava em MMIO; isso não distinguia um estado inválido da espera esperada pelo handshake SIF.
Solução
O harness agora semeia boot_status=0 e MSFLAG=0, e scripts/run-goal019-sifcmd-entry.ps1 reproduz extração, recompilação estática e execução do entry S...
O runner combinado não injeta mais SIFINIT diretamente. O HLE agora encaminha ao IOP a escrita SMFLAG realmente feita pelo guest EE.
Bloqueio
O runner acordava sceSifInit com uma sinalização direta de MSFLAG, sem comprovar uma escrita SIFINIT da EE.
Solução
Adicionei um hook de SIF flag ao HLE sceSifSetReg. O ID 4 validado é propagado ao MSFLAG IOP; se a EE escreveu antes da criação do contexto IOP, o run...
Os entries recompilados de SIO2MAN e MTAPMAN executam; os workers agora alcançam o caminho guest de inicialização SIF.
Bloqueio
O runner isolado não registrava os imports SIFMAN do MTAPMAN; depois de ligá-los, os workers aguardam a inicialização SIF porque o handshake que defin...
Solução
Identifiquei sifman#29 como sceSifCheckInit e sifman#5 como sceSifInit e conectei os providers PS2SDK existentes. O guest verifica o estado, chama SIF...
Depois da limpeza do build, o runner mínimo recompilou e executou os entries guest de SIO2MAN e MTAPMAN a partir da ISO 007. Os dois retornaram status 0.
Bloqueio
O runner parava no reset SIO2 em 0xBF808268 porque não habilitava o perfil limitado já existente. Depois disso, um worker MTAPMAN ainda para em uma im...
Solução
Habilitei no harness apenas o perfil documentado de reset SIO2 e executei os entries nativos recompilados. SIO2MAN completou 130 instruções; MTAPMAN c...
MTAPMAN e os exports SIO2MAN necessários voltaram a gerar objetos nativos a partir da ISO 007 após a limpeza de build.
Bloqueio
A limpeza removeu llvm-as e llc, impedindo o codegen R3000 embora o LLVM IR fosse válido. MTAPMAN também depende de imports e destinos indiretos ainda...
Solução
O comando iop compile-relocated ganhou codegen alternativo direto com clang para COFF x64, identificado no manifesto. Reextraí os dois IRX pelos exten...
O replay nativo do reset EE avançou até TLBP: 29 instruções concluídas, sem fault, PC final 0xBFC00874.
Bloqueio
O fluxo parava no primeiro SYNC.P, e o backend ainda não representava as gravações COP0 da TLB nem o probe observado no BIOS.
Solução
Adicionei lowering nativo limitado às instruções e ao PC confirmados na ROM, ABI v11 para os cinco campos COP0 de TLB e aceitação restrita da escrita...
Corrigi a versão do ABI gravada pelo LLVM: o estado nativo agora reporta ABI 10, compatível com os campos COP0 usados no reset EE.
Bloqueio
O harness inicializava ABI 10, mas a função LLVM sobrescrevia o campo com 9. Isso mascarava a versão efetiva do estado durante a execução nativa.
Solução
O backend passou a gravar ABI 10. Recompilei ynix_core e o CLI, gerei novamente o executável nativo e repeti o prefixo da BIOS: abi=10, 11 instruções...