Cabecera de los cartuchos de Game Boy

Después de investigar como funciona el Nintendo Logo Check, me ha picado la curiosidad de como esta diseñada la estructura de una ROM/Cartucho de Game Boy.

??????????????????????

La parte mas interesante es la Cabecera de la ROM/Cartucho, este área esta definida entre las posiciones 0100 y 014F, recordemos que una vez se validaba el cartucho se saltaba a la dirección 0100 donde esta el programa principal del cartucho.

Inicio de Ejecución 0100-0103

Normalmente esta área de 4 bytes se rellena con instrucciones NOP (no hacer nada en ensamblador) seguida de un JP  0150h (salta a la dirección 0150 ).

Logo de Nintendo 0104-0133

En esta área se encuentra la imagen con el logo de Nintendo que se usa en el Nintendo Logo Check, como curiosidad si cambiamos el logo a partir de la byte 19h la Game Boy Color arrancara mostrando la mitad superior de logo cambiado y la inferior no, en cambio una Game Boy Pocket no funcionara ya que verifica todo el logotipo.

Titulo de Juego 0134-0143

Aquí se guarda en ASCII el titulo del juego en mayúsculas, si el tamaño es inferior a 16 caracteres se rellena con ceros, este espacio fue reducido en la Game Boy Color, es el titulo que habitualmente se muestra en lo emuladores, catalogadores cartuchos flash etc..

Código del Fabricante 013F-0142

Este área aparece en los juegos de Game Boy Color, recortando el Titulo del juego a 11 caracteres, supuestamente forma parte del control de fabricación por terceros.

Marca Game Boy Color 0143

En los cartuchos mas antiguos este campo también formaba parte de titulo. Esta marca se utiliza en los cartuchos para indicar si son compatibles con Game Boy Color, Game Boy o ambas. En el caso de ser compatibles con ambas e introducir el juego en un modelo monocromo se cancela la inicialización de paletas.

Nuevo Código de Licencia 0144-0145

Un código de dos caracteres ASCII que identifica al editor del juego, supuestamente forma parte del control de las licencias con las third party.

Marca Super Game Boy 0146

Especifica si el cartucho dispone de soporte para Super Game Boy, solo se activa el modo SGB si este byte contiene el valor 03h.

Tipo de Cartucho  0147

Identifica que tipo de Memory Bank Controller (MBC) usa el cartucho, si es que usa alguno y si dispone de algún tipo de hardware añadido.

  00h  ROM ONLY                 13h  MBC3+RAM+BATTERY
  01h  MBC1                     15h  MBC4
  02h  MBC1+RAM                 16h  MBC4+RAM
  03h  MBC1+RAM+BATTERY         17h  MBC4+RAM+BATTERY
  05h  MBC2                     19h  MBC5
  06h  MBC2+BATTERY             1Ah  MBC5+RAM
  08h  ROM+RAM                  1Bh  MBC5+RAM+BATTERY
  09h  ROM+RAM+BATTERY          1Ch  MBC5+RUMBLE
  0Bh  MMM01                    1Dh  MBC5+RUMBLE+RAM
  0Ch  MMM01+RAM                1Eh  MBC5+RUMBLE+RAM+BATTERY
  0Dh  MMM01+RAM+BATTERY        FCh  POCKET CAMERA
  0Fh  MBC3+TIMER+BATTERY       FDh  BANDAI TAMA5
  10h  MBC3+TIMER+RAM+BATTERY   FEh  HuC3
  11h  MBC3                     FFh  HuC1+RAM+BATTERY
  12h  MBC3+RAM

Tamaño de la ROM 0148

Identifica el tamaño de la ROM incluida en el cartucho normalmente son multiplos de 32KBytes

  00h -  32KByte (no ROM banking)
  01h -  64KByte (4 banks)
  02h - 128KByte (8 banks)
  03h - 256KByte (16 banks)
  04h - 512KByte (32 banks)
  05h -   1MByte (64 banks)  - only 63 banks used by MBC1
  06h -   2MByte (128 banks) - only 125 banks used by MBC1
  07h -   4MByte (256 banks)
  52h - 1.1MByte (72 banks)
  53h - 1.2MByte (80 banks)
  54h - 1.5MByte (96 banks)

Tamaño de la RAM 0149

Identifica el tamaño de la RAM externa incluida en el cartucho.

  00h - None
  01h - 2 KBytes
  02h - 8 Kbytes
  03h - 32 KBytes (4 banks of 8KBytes each)

Código Destino 014A

Especifica si la versión de este juego es para ser vendida en Japón o no. 00h – Japones / 01h No Japones ¿?¿?

Código Licencia anterior 014B

Identifica a la compañía o editor con un código entre 00 y FFh. A excepción del código 33h que se usa para indicar el uso del Nuevo Código de Licencia en la dirección 0144-0145.

Numero de versión del juego 0140C

Normalmente 00h.

Comprobación de Cabecera 014D 

Contiene una suma de comprobación de 8 bits con el contenido de la direcciones 0134 a 014C.
Los 8 bits más bajos del resultado del checksum deben coincidir con el valor almacenado en esta posición. El juego no funcionará si esta suma de comprobación no es correcta.

Comprobación Global 014E – 014F

Contiene una suma de comprobación de 16 bits usando toda la ROM del cartucho. Producida por la adición de todos los bytes del cartucho (excepto para los dos bytes de suma de comprobación). La Gameboy no verifica esta suma de comprobación.

Después de esta disección un poco rollo, os dejo una herramienta para que podáis ver las cabeceras de distintas ROM.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s