Skip to content
56K

56K

La web de Fanta

Menu
  • Unix/Linux
  • Cacharreo
  • Games
  • Streaming
  • Notas
  • /dev/null
Menu

Anatomía de un archivo – 0x00 – Los archivos .nes

Posted on 31/03/202116/01/2023 by fanta

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).

A la izquierda Metroid (no guarda partida) y en la derecha Zelda (si guarda partidas)

 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Comentarios recientes

  • fanta en i3wm en el ordenador del trabajo con 3 pantallas
  • Punk en i3wm en el ordenador del trabajo con 3 pantallas
  • Twicsy en Eliminar kernels viejos en redhat y liberar espacio en /boot
  • fanta en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • Jorge en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • fanta en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • Camilo en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • eovoltio en Mastodon.madrid se apaga el 12 de Octubre
  • fanta en Time Machine – Las Nuevas Aventuras de la Maquina del Tiempo sobre GNU+Linux
  • Alberto Salvia Novella en Time Machine – Las Nuevas Aventuras de la Maquina del Tiempo sobre GNU+Linux
©2023 56K | Built using WordPress and Responsive Blogily theme by Superb