[SA-PS2] Plugin Loader
Enviado: 25 Ago 2023, 17:36
Mais um ano de retorno depois de sumir, desta vez trazendo um diamante bem brilhante para sumir novamente em seguida :D
É amigos, eu finalmente consegui. Depois de 6 anos de trabalho e modificações, tutoriais, gambiarras mirabolantes e códigos horrendos, acho que posso chamar essa de uma parte significativa do meu sonho, do sonho de tornar o modding do PS2 um pouco mais próximo do que é (ou era rs) o modding da versão de PC dos GTAs 3D. Já fiz outros loaders, mas NENHUM se compara a este
Plugin Loader
O que esperava? Um nome mirabolante cheio de conceitos e abreviações? Eu não tenho mais tempo nem idade para este tipo de coisa xD. Fora que o nome é o menos impressionante deste monstrinho, mas enfim, o que diabos isso aí faz?
TL;DR
Isso é basicamente um ASI Loader para PS2, só que ao invés de usar plugins ASI, eles usam plugins ERL, por conta da diferença de sistema e procesador.
Como isso funciona (programação pesada)
Para conseguir um maior desempenho, o GTA San Andreas usa poucas alocações dinâmicas, daí vem os limit adjusters para quebrar isto. Sendo assim, funções de alocação dinâmica ou sob demanda são muito menos usadas pelo game, deixando um bom espaço na memória heap, onde estes dados de tamanho indefinido podem ser utilizados. É aí que a mágica começa, onde podemos hookar esses espaços onde originalmente iriam dados, e jogar códigos compilados e não-linkados (não auto-executáveis), linkar eles, realocar os espaços de memória e chamadas de função e integrar com o game, assim abrindo a possibilidade para criação de plugins e todas (ou quase) as vantagens que vem junto com isto. Mas porque não usar plugins ASI? Primeiro de tudo, vamos estabelecer aqui o fato de que plugins ASI são DLLs do windows, apenas renomeadas, e DLLs do Windows são bibliotecas dinâmicas que dependem do sistema operacional WINDOWS para funcionar, o windows que por si em suas versões modernas só está disponível para 32 e 64bit (x86 e amd64), o que não é o caso do PlayStation 2, um console que SEQUER POSSUI UM SISTEMA OPERACIONAL, e usa um processador MIPS com arquitetura customizada que utiliza opcodes que se misturam entre a terceira e quarta geração desta arquitetura, além de não possuir nenhum sistema para lidar com bibliotecas dinâmicas, então tive que criar este suporte e as ferramentas para isto basicamente do zero, utilizando como base os projetos open source do PS2SDK em sua versão antiga (pre-1.0) e o ERL loader, que originalmente não foi projetado para isto, mas caiu como uma luva para o propósito deste projeto, então sim, este "simples mod" é um MÓDULO QUASE QUE INTEIRO DE UM SISTEMA, e as semelhanças não param por aí. ERL se refere a Relocatable ELF, um formato de executável modificado e amplamente usado por diversos sistemas e dispositivos (como celulares, consoles, sistemas operacionais como o linux etc), e a parte realocável se refere ao fato de que quando carregadas pelo seu respectivo loader, elas podem ficar em qualquer posição da memória RAM (seja dinâmica ou estática) independente da seção ou qualquer coisa neste sentido. Então sim, diversos mods como GPS, CLEO, até um modloader(ou algo perto disso) serão possíveis graças a este plugin loader.
Acho que já falei demais né, vamos ao que interessa:
TL;DR
Isso é basicamente um ASI Loader para PS2, só que ao invés de usar plugins ASI, eles usam plugins ERL, por conta da diferença de sistema e procesador.
Como isso funciona (programação pesada)
Para conseguir um maior desempenho, o GTA San Andreas usa poucas alocações dinâmicas, daí vem os limit adjusters para quebrar isto. Sendo assim, funções de alocação dinâmica ou sob demanda são muito menos usadas pelo game, deixando um bom espaço na memória heap, onde estes dados de tamanho indefinido podem ser utilizados. É aí que a mágica começa, onde podemos hookar esses espaços onde originalmente iriam dados, e jogar códigos compilados e não-linkados (não auto-executáveis), linkar eles, realocar os espaços de memória e chamadas de função e integrar com o game, assim abrindo a possibilidade para criação de plugins e todas (ou quase) as vantagens que vem junto com isto. Mas porque não usar plugins ASI? Primeiro de tudo, vamos estabelecer aqui o fato de que plugins ASI são DLLs do windows, apenas renomeadas, e DLLs do Windows são bibliotecas dinâmicas que dependem do sistema operacional WINDOWS para funcionar, o windows que por si em suas versões modernas só está disponível para 32 e 64bit (x86 e amd64), o que não é o caso do PlayStation 2, um console que SEQUER POSSUI UM SISTEMA OPERACIONAL, e usa um processador MIPS com arquitetura customizada que utiliza opcodes que se misturam entre a terceira e quarta geração desta arquitetura, além de não possuir nenhum sistema para lidar com bibliotecas dinâmicas, então tive que criar este suporte e as ferramentas para isto basicamente do zero, utilizando como base os projetos open source do PS2SDK em sua versão antiga (pre-1.0) e o ERL loader, que originalmente não foi projetado para isto, mas caiu como uma luva para o propósito deste projeto, então sim, este "simples mod" é um MÓDULO QUASE QUE INTEIRO DE UM SISTEMA, e as semelhanças não param por aí. ERL se refere a Relocatable ELF, um formato de executável modificado e amplamente usado por diversos sistemas e dispositivos (como celulares, consoles, sistemas operacionais como o linux etc), e a parte realocável se refere ao fato de que quando carregadas pelo seu respectivo loader, elas podem ficar em qualquer posição da memória RAM (seja dinâmica ou estática) independente da seção ou qualquer coisa neste sentido. Então sim, diversos mods como GPS, CLEO, até um modloader(ou algo perto disso) serão possíveis graças a este plugin loader.
Acho que já falei demais né, vamos ao que interessa: