Arxiu mensual: febrer de 2015

Hackejar una ROM de Gameboy

He tingut bastants problemes per emular els jocs de Gameboy a la Raspberry Pi. Finalment l’emulador Fednafen és el que funciona, tal i com es fa a Pimame. El món dels emuladors és bastant complicat. Per entendre com funciona una ROM per dins i com es programa un emulador que treballi amb aquestes ROMs s’ha d’estudiar l’arquitectura del Z80, conèixer l’ensamblador, i tècniques avançades de depuració amb llenguatge C. Però aquí anem a fer una cosa relativament senzilla.

Es tracta de fer un petit hack d’una rom de Gameboy. Es tracta de ficar un llibre a dins de la ROM, concretament ficar diferents articles i textos del gran filòsof català Francesc Pujols, aquell que va dir que que Els catalans aniríem pel món i ho tindríem tot pagat.

Parteixo d’una rom que ja és un llibre, un llibre en polonès: Ziarno_Prawdy_-_Book_by_Andrzej_Sapkowski_polish.gbc. Encara que no tinc ni punyetera idea de polonès, arrenco la rom amb l’emulador i la idea està clara: amb els botons pots navegar pels diferents capítols, pots anar a l’inici, i tens dos modes de lectura: línia a línia, o pàgina a pàgina. La idea és localitzar les posicions de memòria on està la informació rellevant, i substituir-ho per la informació (els bytes) que interessa.

Dic que aquest projecte és bastant senzill perquè tenim 5 capítols amb un tamany concret i m’he de limitar a aquestes posicions i blocs d’informació. Allò xulo seria poder ficar més capíols, de longitud variable, i poder navegar per tots els capítols. Però per fer-ho s’hauria de desensamblar el codi i entendre com funcionen els jumps als diferents capítols, i això sí que seria interessant i més difícil.

Bé, mans a l’obra. Faig servir la utilitat xxd com a lector de fitxers binaris, que dóna una sortida hexadecimal i a la part dreta es pot localitzar la informació textual rellevant.

0004040: 0000 0000 0000 0000 0000 0000 0000 0000 …………….
0004050: 2020 2020 2020 2020 2020 2041 6e64 727a Andrz
0004060: 656a 2053 6170 6b6f 7773 6b69 2020 2020 ej Sapkowski
0004070: 2020 2020 2020 2020 2020 2020 2020 2020
0004080: 2020 2020 205a 6961 726e 6f20 5072 6177 Ziarno Praw
0004090: 6479 2020 2020 2020 2020 2020 2020 2020 dy

En aquest bloc hem localitzar el títol i l’autor. El llibre es diu Ziarno Prawdy i l’autor és Adrzej Sapkowski (un nom ben polonès). La posició de l’autor comença a 405b (hex), que és 16475 bytes en decimal. I on acaba Prawdy és la posició 4091 hex = 16529. Per tant, són 16529-16475=54 bytes, que jo substituiré per “EL PENSAMENT I LA FILOSOFIA DE FRANCESC PUJOLS“. Amb aquesta tècnica hem de substituir el títol i autor, el menú, i els diferents capítols (hi ha 5 capítols).

Mostro un exemple de codi amb llenguatge C per substituir en un fitxer binari uns bytes per uns altres en una posició determinada. Un exemple senzill seria:

#include
#include
#include

int main()
{
int posicio = 10;
int tamany;

char *str = “En un lugar de la Mancha”;
printf(“%d\”, strlen(str));
tamany = strlen(str);

int counter;
FILE *ptr_myfile;

ptr_myfile=fopen(“b.gbc”,”r+b”);
if (!ptr_myfile)
{
printf(“Unable to open file!”);
return 1;

}

fseek(ptr_myfile,sizeof(char)*posicio,SEEK_SET);
fwrite(str, 1, sizeof(char)*tamany, ptr_myfile);

fclose(ptr_myfile);
return 0;
}

Partint d’aquest exemple que funciona ja podem fer tota la substitució de les cadenes.

0004040: 0000 0000 0000 0000 0000 0000 0000 0000 …………….
0004050: 2020 2020 2020 2020 2020 2045 4c20 5045 EL PE
0004060: 4e53 414d 454e 5420 4920 4c41 2046 494c NSAMENT I LA FIL
0004070: 4f53 4f46 4941 2044 4520 4652 414e 4345 OSOFIA DE FRANCE
0004080: 5343 2050 554a 4f4c 5320 2020 2020 2020 SC PUJOLS
0004090: 2000 2020 2020 2020 2020 2020 2020 2020 .
00040a0: 492e 2042 494f 4752 4146 4941 0a0a 4c27 I. BIOGRAFIA..L’
00040b0: 6573 6372 6970 746f 722c 2070 6f65 7461 escriptor, poeta
00040c0: 2069 2066 696c c3b2 736f 6620 6361 7461 i fil..sof cata
00040d0: 6cc3 a02c 2046 7261 6e63 6573 6320 5075 l.., Francesc Pu

I el hack ha funcionat com pots veure (i llegir a la foto). En qualsevol cas, la Gameboy no és la millor consola per llegir llibres, i d’altra banda com era d’esperar els accents no funcionen. Pots descarregar el codi sencer a la wiki:

Arcade a la discoteca Cocoa de Mataró

El divendres passat vam llogar màquines arcade a la discoteca Cocoa de Mataró. Va ser una experiència interessant, les màquines van estar enceses des de les 12 fins les 6 del matí. La gent va xal·lar d’allò més amb els jocs clàssics. El públic era de vint-i-pocs, eren d’una altra generació, je, je. Ja ben entrada la nit, algun torrat mamporrejava el joystick amb totes les forces com si fos el canvi de marxes, en fi.

Es poden treure unes quantes conclusions. Per exemple, quan es tracta d’un event com ara aquest, amb poca llum i gent amb poca paciència, de res serveix oferir un catàleg de 1000 jocs i haver d’explicar una vegada i una altra com van els botons. Si amb sis botons ja era prou difícil, costa poc imaginar què passaria amb 9 botons i més jocs i emuladors. En aquest cas, allò simple és el millor.

Consoles de la infantesa: Temco (Pong)

Aquest últim Nadal vaig treure d’un calaix el joc del Pong que encara conservem des que érem petits. Es tracta del model Temco T-800 que els meus pares van portar d’Andorra, devia ser a finals dels anys 70, no puc recordar exactament l’any. En aquella època vam disfrutar molt amb el joc, era una autèntica novetat. Connectavem la consola (en aquella època no existia la paraula consola) a la tele en blanc i negre (les teles només eren en blanc i negre), i procedíem al ritual de la sintonització (per cercar el canal en què la visió era més nítida, sense soroll).

Per als meus germans i jo aquell joc, que vam jugar bàsicament a Bagà, era el Temco. No sabíem el que era el Pong. El PONG (http://ca.wikipedia.org/wiki/PONG) és un dels primers videojocs comercials i domèstics, que va popularitzar Atari allà per l’any 72. Poc més tard van sortir altres versions i llicències, com ara el Temco, que incorporava a part del Tennis, el joc del Hockey (el que pots veure a la foto) i del Squash.

A casa ja no disposem de tele amb entrada d’antena analògica, o sigui que vam haver d’anar a casa de la veïna per tal de què ens en deixés una. Per a la Maria i el Pere això de sintonitzar la tele i cercar el canal va ser una novetat. Val a dir que van xal·lar d’allò més jugant al Temco, i que de seguida li van agafar el tranquillo. Jugar al Temco va ser una de les activitats amb què vam amenitzar la nit de Cap d’Any. Vam fer una petita competició: quarts de final, semifinals i final. La final la vam jugar el Jan Santandreu i jo, que finalment va guanyar ell. A veure si puc organitzar un torneig més seriós de Temco amb amics i nebots.

Un dels propòsits per a aquest any 2015 serà fer un moble que incorpori una tele de tubo, i programar un emulador el més fidedigne possible al Temco. Serà el meu petit homenatge a aquestes consoles primitives. En propers posts hi haurà més informació al respecte. De moment he d’aconseguir una petita tele de tubo de 14 polzades. La tauleta ja la tinc, una tauleta rodona on hauré de fer un forat quadrat al mig per incorporar la tele, i tallar un vidre rodó. Amb dos potenciòmetres i un botó hauria de ser suficient per controlar el joc. El sistema haurà de tenir un frontend per poder escollir els quatre jocs i les diferents opcions, i des del frontend llençar qualsevol dels quatre jocs.