PSX DESR — algumas descobertas sobre a XMB e sua atualização
- Meu PSX DESR-5100/S (ou 7000, leia abaixo) não rodava jogos e a XMB travava;
- A solução foi instalar manualmente os arquivos do disco de atualização 1.10;
Como eu não encontro mais informações sobre a atualização do PSX DESR-5100/7000 e problemas com a sua interface, resolvi colocar aqui minhas descobertas.
Comprei um DESR 5100/S ano passado, mas não cheguei a mexer nele realmente até o começo deste ano. Quando comecei a navegar pela XMB (a mesma do PSP/PS3), percebi três coisas: a primeira é que o console congelava caso eu tentasse acessar as opções de TV dele. A segunda é que, nas informações do sistema, o modelo apresentado é o DESR-7000, e não o DESR-5100. Isso me leva a acreditar que 1) o dono atualizou o console com o disco de atualização errado (se isso for possível) ou 2) o HDD não é o original e veio de um 7000. A terceira e, talvez mais preocupante, é que ele não lia os jogos japoneses de PS1 e PS2 que eu colocava no drive.
No entanto, console é funcional, roda jogos pelo OPL. Mas me incomodava o fato dele travar e estar com a versão interna errada. Procurei ajuda em um dos foruns referência de PS2, o PS2-Home, mas aparentemente ninguém sabia também.
Como ele já veio com FMCB e traduzido, experimentei voltar com o idioma original. Sem sucesso. Mesmo usando ele sem o FMCB não surtia efeito. Comecei a explorar o sistema de arquivos dele via uLaunchElf e descobri algumas coisas interessantes.
A primeira coisa é que ele tem mais de uma partição. A partição do OPL é diferente do espaço alocado para o sistema. Mas tem um detalhe: apenas o uLE consegue ver as partições. Eu cheguei a abrir o aparelho e tirar o HDD para rodar o WinHIIP, mas ele não encontrava a partição. No que é visível pelo uLE, é possível ver a estrutura de diretório do SO:
__net
__system
__sysconf
__common
O diretório mais importante aqui é o __system, que é de onde a XMB carrega. Na raiz desse diretório temos dois arquivos importantes: o psxmain.xml e o registry.db.
O psxmain.xml é um xml normal. Ele mapeia todas as aplicações da xBar (que, por sua vez, são .xml, .rel e .amx dentro de pastas). Ele é editável e, inclusive, tem comentários em inglês. O registry.db é onde as coisas ficam mais interessantes.
O PSX teve vários modelos. Lançado em 2003 e descontinuado em 2005, ele conta 8 versões: os modelos de entrada (5000, 5100, 5500 e 5700) e os mais completos (7000, 7100, 7500 e 7700). Eles tem diferença entre si, que variam de tamanho de HDD a funcionalidades dentro da XMB. O sistema podia ser atualizado de duas formas: online via atulização de sistema OU por um disco de atualização que tinha que ser requisitado diretamente para a Sony e entregue via correio.
O discos atualizavam o sistema (5000, 5100, 7000, 7100 até a versão 1.31 e os demais até a versão 2.11) num esquema que eu imagino que seja:
- Instalar as aplicações e drivers (irx, mesmo formato do PS2) em suas respectivas pastas, renomeando os diretórios e sobrescrevendo os arquivos;
- Atualizar a memória NAND de 8Mb do console com o os dados atualização eo arquivo osdmain.elf;
- Gerar um arquivo xosdmain.elf e um osdmain.elf baseado no modelo do PSX;
- Escrever o arquivo registry.db baseado nas alterações da atualização.
Isso significa que o registry.db não é diretamente editável. O header dele mostra que ele é um arquivo simples de SQLite 2.1, mas abri ele em um explorador de database sqlite e encontrei apenas as rotinas de criação de tabelas sem muito sentido.
Na raiz de __system, temos o diretório xosd. É nele que o patch de tradução é inserido. Ele é, basicamente, a XMB inteira. Dentro do diretório existem pastas para as aplicações do sistema (que são os menus e programas da interface), pasta de drivers (.irx do CDVD, USB, HDD e até do sistema de DVR) e outros utilitários. Como eu disse acima, toda aplicação do PSX é composta por um XML (editável) principal. Algumas aplicações tem um arquivo .rel (que eu acredito que seja o código executável da aplicação), outras tem um .amx (que parece ser um compilado de texto lido pelo xml), mais algumas pastas com gráficos, sons e fontes da aplicação. O patch de tradução simplesmente trocar os textos da XML por textos em traduzidos em inglês e não mexe em nada mais (nem no psxmain.xml). Foi até por isso que achei que minha XMB travava — por algum tipo de incompatibilidade com a tradução. Mas não foi o caso porque ela continua travando mesmo voltando os arquivos originais (que eu tinha feito uma cópia antes de começar a mexer com os arquivos).
Minha próxima ideia foi atualizar o sistema para a versão 1.31. Sem a possibilidade de atualizar por download e sem a chance de conseguir um CD de atualização, encontrei a coleção de imagens dos discos na internet. Como a atualização vinha literalmente em um CD (e esse PSX não está destravado com modchip), minha ideia foi transformar esse CD em um DVD compatível com o ESR. Não funcionou. E nisso encontrei muitas informações desencontradas — alguns dizem que esses arquivos do CD foram disponibilizados pela Sony e podem ser gravados diretamente em um CD (o PSX não leu o CD gravado com as imagens que encontrei) e outros dizem que é impossível atualizar sem ter o CD original.
A solução foi montar a imagem e pegar os arquivos de instalação. Claro que não foi nada fácil. A primeira chatice foi montar o cue/bin. Uma vez montados, o CD de atualização na verdade é um arquivo .pak que é extraído em tempo real, durante o processo. Felizmente, uns caras do finado Assembler Games fizeram uma ferramenta que extrai os PAKs. O arquivo INSTALL3.PAK tem todos os arquivos da XMB e cada módulo de instalação traz um script que faz a atualização dos arquivos. É interessante notar que a maioria dos arquivos tem uma flag chamada “no_flash_package”, o que insinua que existem arquivos que são gravados na NAND.
Peguei todos as pastas extraídas e coloquei no diretório da XMB. E o PSX não carregava mais o sistema. Foi aí que entendi que não bastava atualizar os arquivos — o registry.db, o xosdmain.elf e a NAND precisavam ser atualizados pelo script.
Comecei um processo de tentativa e erro para entender o que exatamente fazia a XMB não carregar. Não eram drivers, não eram arquivos de apps da XMB… era um conjunto de situações na verdade. Os arquivos conflitavam com alguma função que a NAND operava sobre o HDD. A maioria dos drivers da versão 1.31 rodavam no sistema (lentos, mas rodavam), já as aplicações não. Outra coisa curiosa: as funções de texto e biblioteca de caracteres (xTex, xFT) da versão 1.31 travavam instantaneamente o PSX. Experimentei também trocar apenas os XMLs dos apps, mas o console ainda travava.
Foi quando eu passei horas e horas nos sites antigos da Sony que promoviam o aparelho. A versão de fábrica era a 1.06, justamente a qual o meu estava. Por mais que o arquivo version.txt possa ser editado, ele tinha que fazer referência ao que já estava na NAND. E como o bump da versão 1.06 para a 1.31 trazia muitas mudanças no sistema (esse modelo específico do PSX teve 3 atualizações, sendo a última a mais “agressiva” de todas, atualizando vários módulos e drivers), talvez fosse natural o sistema travar sem que a NAND estivesse devidamente atualizada.
Repeti o mesmo processo de extração dos arquivos da 1.31, só que dessa vez com a 1.10. A diferença na estrutura é visivel. Poucos apps, menos drivers ainda. Apaguei tudo o que estava na pasta /xosd e coloquei os arquivos da versão mas antiga e… voila! Deu certo! A XMB carregou, todos os apps começaram a funcionar e, de quebra, o PSX voltou a carregar jogos de PS1 e PS2 por disco.
Agora o PSX está como novo, rodando tudo. Mas ainda quero fazer mais coisas:
- A primeira é instalar o uLE e OPL como partição (este vídeo mostra o OPL sendo carregado pela XMB);
- Será possível atualizar o sistema para a 1.31 sem o disco original?
- Com o PSBBN instalado, instalar os canais da época (o vídeo acima mostra isso também).
A propósito, se caso alguém estiver interessado, aqui está a BIOS dumpada do PSX DESR-7000 (que eu acreditava ser um 5100/S).