Mostrando entradas con la etiqueta game boy. Mostrar todas las entradas
Mostrando entradas con la etiqueta game boy. Mostrar todas las entradas
TOP

Game Boy Logo Tool - Beta 1.0



Autor:
@Nitehack

Descripción:
Esta es una herramienta simple que te muestra por pantalla el logo de presentación que contiene una rom de un juego tanto oficial como no oficial de Game boy o Game Boy Color. También extrae el logo en hexadecimal. 
Como extra se puede ver información básica del juego como el título, la región del juego, el tipo de cartucho, funcionalidades que tiene, la compañía, etc.

La idea de esto se me ocurrió en esta entrada . Solamente los juegos oficiales tienen el famoso logo de Nintendo, en cambio los juegos "piratas" traen un logo alternativo, el cual se puede ver con esta herramienta.

Más abajo dejo la primera versión de esta herramienta. La hice hace ya unos 4 meses, por unas cosas u otras al final no la he vuelto a revisar, por lo que tendrá algunos bugs. Perdonad el retraso.

• Instrucciones de uso:
-Escribir el nombre completo de la rom y pulsar enter. (Debe de estar en la misma carpeta que el programa y no tener espacios), Ejemplo: Mario-Bros.gbc

Capturas:
Captura 1: A la izquierda rom de un juego oficial, a la derecha rom de un juego no oficial

Versiones:
Beta 1.0:
-Representación del logo de la rom en consola de comandos,
-Extrae logo en hexadecimal.
-Información básica de la rom.




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!