Es posible descargar la rom de Legend of Zelda y con el comando «xdd» comprobar los primeros 3 bytes así:
$ wget "http://fanta.56k.es/00-Games/03-Nes/Legend_of_Zelda-English.nes"
$ xxd -u -g 3 -l 3 -c 3 Legend_of_Zelda-English.nes
Y si cambiamos el 3 por un 16 vamos a poder ver los primeros 16 bytes en hexadecimal.
La Cabecera del archivo .nes explicada
0 = N
1 = E
2 = S
3 = Final de Línea (sería 1A en Hexadecimal)
4 = Tamaño de la ROM PRG. Se convierte de hexadecimal a decimal y se multiplica por 16384 (16K).
«NES» en los primeros bytes sirve para identificar el archivo. Esos bytes en la cabecera indican que se trata de un archivo .nes , es decir, de un archivo que cargado en un emulador nos permitirá poder disfrutar de un determinado juego.
Por tanto una de las primeras cosas que realizarán los emuladores de Nintendo (de la NES) es comprobar si la cabecera (los primeros 16 bytes) contienen en esos 4 primeros: 4e45531a
Posteriormente comprobarán el byte 4 (comenzando por 0) para determinar cuanto ocupa la ROM PRG.
En el caso del juego Legend of Zelda de NES esa ROM ocupa: 8*16384 = 131072 bytes (octetos).
No ha sido necesario convertir el 08 a decimal ya que su valor es igual en hexadecimal como ocurre con el tetris:
Sobre las 2 ROM del cartucho de NES
La mayoría de los juegos de NES tienen 2 tipos de ROM:
– PRG-ROM y CHR-ROM (Program y Character respectivamente)
El primero contiene todo el código y los datos del juego, y el segundo tiene todo el contenido gráfico. Aquí pueden verse en una foto (el cartucho por dentro):
No obstante la placa del Legend of Zelda es diferente. Esa placa es la conocida como NES-SNROM.
No la utilizan muchos juegos. Algunos de los que la utilizan son el Zelda y el Metroid.
Esta placa utiliza CHR-RAM en vez de CHR-ROM. La placa puede llevar una Pila (la del zelda la lleva).
Un cartucho de NES normalmente consta de 2 chips de memoria: PRG (conectado a la CPU) y CHR (conectado a la PPU).
Siempre hay al menos una ROM PRG pero puede haber una RAM PRG adicional para almacenar datos (como en el caso del Zelda).
Muchos otros cartuchos tienen una ROM CHR que contiene datos fijos de gráficos disponibles para ser usados por la PPU (Picture Processing Unit) desde que se enciende la consola.
El listado de placas existentes para cartuchos de NES es el siguiente:
Para el siguiente post me dejo lo siguiente
Los siguientes flags de esa cabecera de 16 bytes los explicaremos en un segundo post sobre la materia en cuestión.
- 5: Size of CHR ROM in 8 KB units (Value 0 means the board uses CHR RAM)
- 6: Mapper, mirroring, battery, trainer
- 7: Mapper, VS/Playchoice, NES 2.0
- 8: PRG-RAM size
- 9: TV system
- 10: TV system, PRG-RAM presence
- 11-15: Unused padding