Cerca de um ano e meio atrás eu brinquei um pouco de converter um pequeno game que estou desenvolvendo, parecido com Rockman (Megaman) para o Playstation 2 usando o SDK PS2DEV disponível em  http://www.ps2dev.org. Este SDK, além de um toolkit próprio, chamado gsKit, tem suporta a uma biblioteca gráfica, muito utilizada para jogos em Linux mas também utilizada em Windows e Mac, chamada SDL, e para o qual eu já havia desenvolvido pequenos games. Após ligar com diversos problemas de compilação, consegui instalar todo o ambiente em meu Duron 1.6/512MB RAM rodando Ubuntu Linux e comecei a desenvolver.

O problema é que, do modo como eu estava desenvolvendo, eu tinha que copiar o executável (.elf) para um memory card ou pendrive USB, e toda vez ir5 do computador em um quarto, até o PS2 na sala. Isso até não era o maior problema, o problema é que desta forma, você não tem a mínima idéia se o seu programa deu um erro, você simplesmente fica olhando para uma tela escura, ou a tela do seu jogo travado. Utilizando códigos de cores para debugar (desenhando retângulos coloridos como forma de indicar por onde o programa passou), consegui algum sucesso, mas a dificuldade acabou me fazendo desistir.

Chegamos ao presente. Agora com um computador bem mais rápido (Core 2 Duo 2.2/2GB RAM), lá fui eu tentar um segundo método: rodar o programa via emulador de Playstation 2, chamado PCSX2. No linux este emulador mostra as mensagens de output (printf para quem sabe C) do processador IOP (entrada e saída do PS2), e então eu poderia finalmente debugar e corrigir os problemas do jogo, certo? Errado! O emulador simplesmente quebra com o OpenGL da minha máquina…

Bom, nesse ano e meio que se passou, eu adquiri um eeePC 701 e um roteador wifi. Com isso, um segundo método se abriu para mim: programar para o PS2 via rede. Na verdade sem o roteador eu poderia ter feito o trabalho usando um cabo USB ou um cabo cross ethernet, mas nunca me dispus, já com o cabo de rede e o roteador, eu posso também colocar o PS2 em rede, o que é um grande incentivo.

O sistema funciona basicamente assim, você grava um CD com um programa chamado ps2link e um arquivo de configuração que determina o endereço IP quie o PS2 irá requisitar ao seu roteador, e depois um cliente no Windows ou Linux, para acessar o PS2 e enviar para ele o seu programa via rede, ou seja, nada mais de atravessar a sala com o pendrive. Também permite dar um soft-reset – que já descobri não funciona direito com a SDL por alguma razão que ainda não tive tempo de achar.

Mas enfim, comprei um CD para gravar o programa e um cabo de rede de 6 metros, que se mostrou um metro mais curto do que seria recomendável… ninguém manda eu não usar o metro apra medir a distância antes. Gravei o programa, liguei o PS2 com ele e foi pura emoção no momento que consegui dar um ping ao endereço 192.168.1.10 e obeter respota! 😀
A seguir comecei a fuçar no código, recolocando todos os printfs que eu havia retirado já que não apareciam mesmo, e rodar. Em uma hora eu consegui consertar o meu embrião de jogo, adicionei suporte ao joystick direito (esse era um dos bugs, o outro era ter muitos acessos aos arquivos, no PS2 ele tem poucos file pointers simultâneos) e unifiquei o sistema de sprites em uma variável única, otimizando a execução um bocado.
O resultado está nesta screenshot abaixo:

Os gráficos estão com alguns bugs porque eu não tive tempo de arrumar o mapa após criar o novo sistema de tiles/sprites, mas dá para ter uma idéia vendo o protoman lá na parte superior esquerda da tela.
Resumindo, se você tem paciência para fazer as configurações iniciais do SDK, programar para o Playstation 2 usando a SDL é uma grande barbada, e altamente recomendável pela diversão Nerd que irá gerar 😉