sexta-feira, 28 de março de 2008

32 bits X 64 bits

Estava eu querendo jogar um pouco no Linux. É, ninguém é de ferro e um pouco de distração faz descansar melhor do que algumas horas de sono...

Procurei diversos games, mas nenhum que me desse muuuita vontade de jogar. Até lembrar do meu antigo Master System Super Compact e do Super Nintendo. Os videogames eram fantásticos, não fritavam e proporcionavam horas de diversão.

Hoje existem emuladores para os mesmos jogos: Sonic e Mega Man X. O Gens é emulador pro Master System (conhecido como Gênesis nos EUA, por isso o nome) e o ZSnes é o do Super Nintendo. Só que eles estão disponíveis nos repositórios apenas para 32 bits. Meu amd_64 ficou sem... Mas pra tudo dá-se um jeito...

Compilando o ZSnes e gerando um pacote

Entre em ftp://ftp.br.debian.org/debian/pool/main/z/zsnes. Aqui está o pacote para o zsnes para i386. Faça download do arquivo zsnes_1.510-2.dsc. Se houver versão maior, melhor. Use o dget, pois ele vai baixar mais alguns arquivos que precisaremos:
dget ftp://ftp.br.debian.org/debian/pool/main/z/zsnes/zsnes_1.510-2.dsc
Abra o arquivo e adicione amd64 na linha "Architecture: i386"
Architecture: i386 amd64
Atualize também, nesse arquivo, o Build-Depends:
Build-Depends: debhelper (&lgt;= 4), dpatch, dpkg-dev (&lgt;= 1.13.2), g++-multilib [!i386], gcc-multilib [!i386], ia32-libs [!i386], libao-dev [i386], libgl1-mesa-dev, libpng12-dev | libpng-dev, libsdl1.2-dev (&lgt;= 1.2.2-3.1), nasm, sharutils, xutils, zlib1g-dev [i386] | lib32z1-dev [!i386]
Extraímos o pacote, aplicamos os patchs com o dpkg-source:
dpkg-source -x zsnes_1.510-2.dsc
Entramos no diretório onde estão os fontes. Instalamos alguns pacotes necessários, instalamos as dependências pra compilação, compilamos e criamos o pacote:
cd zsnes-1.510
sudo apt-get install gcc-multilib g++-multilib
sudo apt-get build-dep zsnes
dpkg-buildpackage
Agora espere compilar... Ao fim de tudo, será criado um pacote no diretório superiot. Instale-o com o "dpkg -i"...

Compilando o GENS para 32 bits "chroot"

O Gens sequer está nos repositórios do Debian. Eu não encontrei. Logo, a estratégia usada no ZSnes não vai funcionar.
Precisamos baixar os fontes e compilar. Usaremos a versão disponível no cvs (deixe a senha em branco):
cvs -d:pserver:anonymous@gens.cvs.sourceforge.net:/cvsroot/gens login
cvs -z3 -d:pserver:anonymous@gens.cvs.sourceforge.net:/cvsroot/gens co GensForLinux
O Gens é antigo e deve ser compilado com o gcc 3.4. Temos que instalá-lo:
sudo aptitude install gcc-3.4
Vamos exportar a variável CC, para indicar o uso do gcc certo, compilando 32 bits:
export CC="gcc-3.4 -m32"
Instalamos, então, algumas libs para 32bits:
sudo apt-get install ia32-libs-gtk ia32-libs
Infelizmente, isso não é tudo. Nem todos os pacotes estão nessas libs. Precisamos instalar mais alguns. Para compilar, temos que exportar outra variável, para indicar (-L) onde estão as bibliotecas (já que vamos compilar um ia32), além de indicar para usar o OpenGL (-lGL):
export LDFLAGS="-L/usr/lib32:/emul/ia32-linux/lib:/emul/ia32-linux/usr/lib:/usr/lib:/lib:/usr/local/lib/:/lib/x86_64-linux-gnu:\
/usr/lib/x86_64-linux-gnu -lGL"
Em "/emul/ia32-linux" vão as libs que precisamos para compilar. Pra descobrir quais são, fui batendo com a cabeça: tenta compilar e usar o apt-get e o apt-file para encontrar a dependência. Só que não instala-se com o apt-get, pois ele instalaria para 64 bits.
Temos que entrar em http://packages.debian.org/, procurar o pacote e descompactá-lo em
/emul/ia32-linux/. Por exemplo, para a libsdl1.2-dev:
wget http://ftp.cl.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2-dev_1.2.13-2_i386.deb
dpkg -X libsdl1.2-dev_1.2.13-2_i386.deb /emul/ia32-linux/
Para o gens, instalei ainda:
  • libsdl1.2debian-alsa_1.2.13-2_i386.deb
  • libsdl-sound1.2-dev_1.0.1-12+b1_i386.deb
  • libasound2-dev_1.0.16-2_i386.deb
  • libdirectfb-dev_1.0.1-8_i386.deb
  • libdirectfb-1.0-0_1.0.1-8_i386.deb
  • libx86-1_0.99+ds1-2_i386.deb
Depois, o clássico, mas ele não vai encontrar o gtk nem o sdl certo, então não deixe-o testar:
./configure --disable-gtktest --disable-sdltest
make
make install
Uma dica: use o "checkinstall" para criar um pacote:
checkinstall make install
Depois disso, ainda precisa de umas bios, pra poder rodar tudo. Vc encontra elas por aqui: http://www.fantasyanime.com/emuhelp/emuhelp_gens.htm#segacdbios

Abra o gens e, em "Option" -> "Bios/Misc Files", configure os arquivos baixados da bios.

E, claro, para ambos os casos, precisa de umas boas roms... mas essas o Google encontra pra vc...

Nenhum comentário: