TOP

El logo de Nintendo - Game Boy

De esto que llegas un día y no sabes cómo pero te topas con este vídeo:




Acostumbrado a ver el mítico startup de Game Boy con el logo de Nintendo, me entró la curiosidad y me puse a investigar sobre esto.

Startup Nintendo Game boy


Las compañias mayoritariamente tailandesas que fabricaban videojuegos no tenían licencia, y para publicar sus juegos y no infringir los derechos de copyright hacían su propio logo y se las ingeniaban para saltarse la protección del logo (en la Game Boy para cargar un juego se leía la cabecera de este, comprobaba si el logo de Nintendo se había modificado y en caso de modificación el juego no arrancaba).

Estas empresas conseguían eludir este sistema porque en game boy se leía dos veces el logo: una vez para mostrarlo en pantalla y otra para compararlo con el logo interno de la consola, unos mediante hadware (como habéis podido ver en el vídeo que en puesto al principio del post) y otros haciendo una redirección en la misma ROM a la dirección 0108h donde se alojaba el modificado y la segunda vez que leía el logo lo hacia en la dirección original 0104h. (El logo ocupaba 48 Bytes)

En Game Boy Color a diferencia de su antecesora comprobaba solo la mitad de los Bytes.
En este video de un juego tailandés de GBC se puede observar como se las han ingeniado para cambiar "Nintendo" por "Niutoude" aprovechando que solo comprueba la mitad del logo



Después de investigar cómo cambiaban el logo me puse  con el editor hexadecimal a ver el logo de Nintendo.
Si con un editor de hex vamos de la dirección 0104h a la 0133h ahi estará el logo en hexadecimal que es el siguiente:
CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E 
Si tenemos a mano la imagen del logo original nos daremos cuenta de que 48 bytes no nos dan para los  1664 pixeles (104x16), ni a un bit por pixel. Esto es porque para representar la imagen se utilizan bloques de 2x2 pixeles y el logo de marca registrada  (®) no esta incluido en ese código. Y ahora si hacemos cuentas si nos dará 1 bit por 1 pixel.


Si ahora tratamos de representarlo usando el 0=blanco y 1=negro nos saldrá una cosa que no se parece en nada al logo. La explicación de esto es porque el logo está codificado, alterando el orden de los nibbles (4 bits).

Gracias a un código en python de un usuario llamado codeman38  que publicó  un comentario en esta web http://fuji.drillspirits.net/?post=87 averigüé el proceso para decodificar el logo de Nintendo:

1º Se divide el hex en grupos de 4 bytes y se reordenan de la siguiente manera: El primer grupo serán los primeros 4 bytes del código, el segundo los primeros 4 bytes de la mitad del código, el tercero los siguientes cuatro bytes  del principio del código, el cuarto los siguientes cuatro bytes de la mitad del código, etc. Es decir vamos alternando los grupos de 4 bytes siguiendo el orden del principio y por la mitad del código.

2º Se agrupan en pares de bytes y se combinan entre ellos de la siguiente forma (una imagen vale más que mil palabras) :




3º Nuestras filas serán  las columnas de pixel de la imagen (en el caso de que se haya reordenado como la siguiente imagen), por lo que cambiamos las columnas por las filas y, ¡ya tendremos el logo decodificado!



Ahora si, nuestro código pasado a binario será 0=blanco y  1=negro.
Sabiendo ya esto podríamos hacer nuestro propio logo personalizado para algún juego de GB o GBC.

En el caso de Game Boy Advance y Nintendo DS se sigue comprobando el logo, pero este se encuentra en la dirección 004h, ocupa 156 Bytes y está comprimido en Huffman.

Y esto es todo por hoy. ¡Espero que les haya gustado el post!