Archivo por meses: febrero 2015

Hackear una ROM de Gameboy

He tenido bastantes problemas para emular los juegos de Gameboy en la Raspberry Pi. Finalmente el emulador Fednafen es el que funciona, tal y como se hace en Pimame. El mundo de los emuladores es bastante complicado. Para entender cómo funciona una ROM por dentro y cómo se programa un emulador que trabaje con estas ROMs se tiene que estudiar la arquitectura del Z80, conocer el ensamblador, y técnicas avanzadas de depuración en lenguaje C. Pero aquí vamos a hacer una cosa relativamente sencilla.

Se trata de hacer un pequeño hack de una rom de Gameboy. Se trata de poner un libro dentro de la ROM, concretamente meter diferentes artículos y textos del gran filósofo catalán Francesc Pujols, aquél que dijo que un día Los catalanes iríamos por el mundo y lo tendríamos todo pagado.

Parto de una rom que ya es un libro, un libro en polaco: Ziarno_Prawdy_-_Book_by_Andrzej_Sapkowski_polish.gbc. Aunque no tengo ni puñetera idea de polaco, arranco la rom con el emulador y la idea está clara: con los botones puedes navegar por los diferentes capítulos, puedes ir al principio, y tienes dos modos de lectura: línea a línea, o página a página. La idea es localizar las posiciones de memoria donde está la información relevante, y substituirlo por la información (los bytes) que interesa.

Digo que este proyecto es bastante sencillo porque tenemos 5 capítulos con un tamaño concreto y me tengo que limitar a estas posiciones y bloques de información. Lo chulo sería poder meter más capítulos, de longitud variable, y poder navegar por todos los capítulos. Pero para hacerlo se tendría que desensamblar el código y entender cómo funcionan los jumps a los diferentes capítulos, y esto sí que sería interesante y más difícil.

Bien, manos a la obra. Uso la utilidad xxd como lector de ficheros binarios, que a una salida hexadecimal y en la parte derecha se puede localizar la información textual relevante.

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 este bloque hemos localizado el título y el autor. El llibro se llama Ziarno Prawdy y el autor es Adrzej Sapkowski (un nombre muy polaco). La posición del autor empieza en 405b (hex), que es 16475 bytes en decimal. Y donde acaba Prawdy es la posición 4091 hex = 16529. Por tanto, son 16529-16475=54 bytes, que yo substituiré por «EL PENSAMENT I LA FILOSOFIA DE FRANCESC PUJOLS«. Con esta técnica hemos de substituir el título y el autor, el menú, y los diferentes capítulos (hay 5 capítulos).

Muestro un ejemplo de código en lenguaje C para substituir en un fichero binario unos bytes por otros en una posición determinada. Un ejemplo sencillo sería:

#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;
}

Partiendo de este ejemplo que funciona ya podemos hacer toda la substitución de las cadenas.

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 funcionado como se puede ver (y leer) en la foto. En cualquier caso, la Gameboy no es la mejor consola para leer libros, y por otra parte como era de esperar los acentos no funcionan. Puedes descargar el código entero en la wiki.

Arcade en la discoteca Cocoa de Mataró

El viernes pasado se alquilaron máquinas arcade en la discoteca Cocoa de Mataró. Fue una experiencia interesante, las máquinas estuvieron encendidas des de las 12 hasta las 6 de la madrugada. La gente se lo pasó en grande con los juegos clásicos. El público era de veintitantos, eran de otra generación, je, je. Ya bien entrada la noche, alguno pasado de vueltas mamporreaba joystick con todas sus fuerzas como si fuera el cambio de marcha, en fin.

Se sacaron una cuantas conclusiones. Por ejemplo, cuando se trata de un evento como este, con poca luz y con la gente con poca paciencia, de nada sirve ofrecer un catálogo de 1000 juegos y tener que explicar una y otra vez como van los botones. Si con seis botones ya era difícil, ni imaginar qué pasaría con 9 botones y más juegos y emuladors. En este caso, lo simple es lo mejor.

Consolas de la infancia: Temco (Pong)

Estas últimas Navidades saqué de un cajón de casa el juego del Pong que todavía conservo de cuando éramos pequeños. Se trata del modelo Temco T-800 que mis padres trajeros de Andorra, debía ser a finales de los años 70, no puedo recordar exactamente el año. En aquella época disfrutamos mucho con el juego, era una auténtica novedad. Conectábamos la consola (en aquella época no existía la palabra consola) a la tele en blanco y negro (las teles sólo eran en blanco y negro), y procedíamos al ritual de la sintonización (para buscar el canal en que la visión era más nítida, sin ruido).

Para mis hermanos y yo aquel juego, que jugamos más que nada en Bagà, era el Temco. No sabíamos lo que era el Pong. El PONG (http://es.wikipedia.org/wiki/PONG) fue uno de los primeros videojuegos comerciales y domésticos, que popularizó Atari allá por el año 72. Poco más tarde salieron otras versiones y licencias, como el Temco, que incorporaba a parte del Tennis, el juego del Hockey (como se puede ver en la foto) y del Squash.

En casa ya no disponemos de tele con entrada de antena analógica, o sea que fuimos a casa de la vecina para que nos dejase una. Para Maria y Pere esto de sintonizar la tele y buscar el canal fue toda una novedad. Se lo pasaron en grande jugando al Temco, y en seguida le cogieron el tranquillo. Jugar al Temco fue una de las actividades programadas para la Nochebuena del 31 de enero. Hicimos una pequeña competición: cuartos de finales, semifinales y final. La final la jugamos Jan Santandreu i yo mismo, que finalmente ganó él. A ver si puedo organizar un torneo más serio de Temco con amigos y sobrinos.

Uno de los propósitos para este año 2015 será hacer un mueble que incorpore una tele de tubo, y programar un emulador lo más fiel posible al Temco original. Será mi pequeño homenaje a estas consolas primitivas. En próximos posts habrá más información al respeto. De momento tengo que conseguir una pequeña tele de tubo de 14 pulgadas. La mesita ya la tengo, una mesita redonda donde tendré que practicar un agujero cuadrado para inquibir la mesa, y cortar un vidrio redondo. Con dos potenciómetros y un botón Arcade tendría que ser suficiente para controlar el juego. El sistema tendrá un front-end para poder escoger los cuatro juegos y las diferentes opciones, y desde el frontend se tendrá que lanzar las partidas de los diferentes juegos.