« Arquitectura de la Nintendo Entertainment System (NES) (index)

Arquitectura de la Nintendo Entertainment System (NES)

Chapter 4: CPU


Tabla de contenidos

  1. Un poco de contexto
  2. Funcionalidad central
    1. El enigma de la licencia de Ricoh
    2. Funcionalidad descartada
  3. Memoria
    1. Fallo de segmentación
    2. Datos del cartucho/juego
    3. Más allá de las capacidades existentes

La CPU de la NES es un Ricoh 2A03 , basado en el popular MOS Technology 6502 de 8 bits que trabaja a 1.79 MHz (o 1.66 MHz en sistemas PAL). Este es el componente central que ejecuta el código del cartucho del juego.

Un poco de contexto

Para entender los circuitos que alberga la placa base de la NES, conviene echar antes un vistazo al estado de la industria en aquella época. El mercado de procesadores a finales de los 70 y principios de los 80 fue bastante diverso.

Image
Un Commodore PET, con una CPU 6502.

Image
Un Tandy TRS-80, con una CPU Z80.

El panorama de los ordenadores de los años 70, también proporcionado por el Centre for Computing History (Cambridge, Reino Unido).

Si una compañía planeaba construir un microordenador asequible, las opciones disponibles eran:

De forma análoga a lo ocurrido con Intel, ingenieros de Motorola frustrados con la falta de interés de la compañía en capitalizar el potencial del 6800 se unieron a una pequeña pero ambiciosa empresa de semiconductores, MOS, donde desarrollaron una versión rediseñada del 6800: el MOS 6502. Pese a ser incompatible con el resto, el nuevo chip era mucho, mucho más barato de producir y fue cuestión de tiempo que muchos de los famosos fabricantes de ordenadores (Commodore, Tandy, Apple, Atari, Acorn y otros) eligieran el 6502 como pieza central de sus máquinas.

En Japón, Nintendo necesitaba un CPU barato y conocido, por lo que optó por utilizar el 6502. Ricoh, su proveedor de procesadores, fabricó con éxito un procesador compatible con el 6502.

Funcionalidad central

Para comprender las capacidades de esta consola, conviene examinar primero lo que ofrece el MOS 6502 original:

Como puede apreciarse, la notable ingeniería del 6502 permitió a MOS ofrecer un producto sólido a un precio enormemente asequible.

El enigma de la licencia de Ricoh

Hasta hoy en día sigue sin ser claro cómo Ricoh logró clonar el 6502. Uno esperaría que MOS le diera la licencia del diseño del chip a Ricoh, pero hay muchas contradicciones al respecto:

Funcionalidad descartada

El 2A03 de Ricoh omite el modo Binary-Coded Decimal (BCD) incluido originalmente en el 6502 . El BCD permite la codificación de cada dígito decimal de un número como un binario separado de 4 bits. El 6502 usa palabras de 8 bits - lo que significa que cada palabra almacena dos dígitos decimales.

Como un ejemplo para los curiosos, el número decimal 42 se representa como:

Este modo es útil en aplicaciones que requieran tratar cada dígito decimal por separado (como por ejemplo, un reloj digital). Sin embargo, requiere más almacenamiento ya que cada palabra de 8 bits solo puede codificar hasta el número decimal 99 - mientras que el binario tradicional puede codificar hasta el 255.

Ricoh deliberadamente rompió el modo BCD en su chip cortando las líneas de control que lo activan. Esto se hizo presumiblemente para evitar el pago de regalías a MOS, dado que BCD estaba patentado por ellos (y la legislación que permitía registrar derechos de autor sobre diseños de circuitos integrados no se estableció sino hasta 1984 ).

Memoria

Tanto el Ricoh 2A03 como el MOS 6502 contienen un bus de datos de 8 bits y un bus de direcciones de 16 bits, lo que les permitía acceder hasta a 64KB de memoria. Entonces, ¿cómo llenó Nintendo ese espacio de memoria?

Por un lado, la placa base contiene un chip que otorga 2 KB de RAM estática (SRAM) . Nintendo llama esta área «Work RAM» (WRAM) y puede usarse para almacenar:

Por el otro lado, los componentes del sistema son mapeados en memoria , lo que significa que son accedidos usando direcciones de memoria, por lo que ocupan parte del espacio de direcciones del procesador. Por lo tanto, el espacio de memoria del procesador se llena de direcciones que apuntan al cartucho del juego, la WRAM, el PPU, la APU y dos controles (no se preocupen por cada componente, ya que se explican a lo largo de este artículo).

Fallo de segmentación

Heredada del diseño de MOS, esta consola incorpora también una 'anomalía' especial denominada Bus abierto (Open Bus): si una instrucción intenta leer desde una dirección no mapeada o inválida, se devuelve en su lugar el último valor leído . Si el programa no lo gestiona adecuadamente, la ejecución puede continuar en un estado impredecible.

Datos del cartucho/juego

Solo en caso de que no lo sepas, los juegos de NES se distribuyen en forma de cartuchos, y los buses del cartucho se conectan directamente al procesador.

Nintendo conectó las líneas del cartucho de forma que sólo se puede acceder a 49120 Bytes (~ 49.97 KB) de datos del cartucho . Ahora, ¿a qué me refiero con "datos del cartucho"? Bueno, a cualquier chip conectado a esos buses, por ejemplo:

El hecho de que haya diferentes combinaciones se debe a que al procesador no le importa de qué componente esté leyendo información, solo ve las ubicaciones de la memoria. Así que es a criterio de los desarrolladores de escoger (o crear) un esquema factible para guardar el juego.

Image
PCB de Super Mario Bros .

Image
La misma PCB con las partes importantes etiquetadas. El significado del chip "Lockout" se explica en la sección "Antipiratería".

Por ejemplo, 'Super Mario Bros' de Nintendo utilizó un diseño que llamaron NES-NROM-256 y que consiste de 32KB de programa ROM y 8KB de 'Character ROM' para gráficos (veremos más sobre esto en la sección de 'Gráficas') . La NES-NROM-256 también se preparó para almacenar hasta 3KB de WRAM extra, aunque el juego no haga uso de ella.

Más allá de las capacidades existentes

Una de las mayores limitaciones de los buses de direcciones de 16 bits (que afectan la 3ra y 4ta generación de consolas) es su espacio compacto de direcciones. Hoy en día, los ordenadores de 32 bits pueden direccionar hasta 4GB de memoria (y las máquinas de 64 bits se dan el lujo de disfrutar hasta 16 exabytes) así que esto ya no es una preocupación, pero en aquel entonces la NES sólo tenía 64KB de espacio de direcciones y una gran parte de este era ocupada por el hardware mapeado en memoria (algo que sus competidores evitaron).

Entonces, ¿esto significaba que los desarrolladores sólo podían desarrollar juegos que no excedieran el límite de 49.97KB? ¡Por supuesto que no! Si algo nos ha enseñado la historia, es que siempre hay una solución ingeniosa a un problema desafiante; y este problema se abordó con un Mapeador.

Image
Representación simplificada de cómo un mapeador extiende las capacidades de direccionamiento de la CPU. Con la inclusión de un mapeador, la CPU puede acceder a bancos extra (grupos de direcciones) de una gran ROM de programa. Aunque el juego/programa tiene la nueva tarea de cambiar manualmente entre bancos siempre que sea necesario.

Image
La misma configuración pero sin un mapeador instalado. Aunque es más simple y económico, la CPU solo puede acceder a un número finito de bancos.

Un mapeador es un chip extra incluido en el cartucho que se ubica entre la memoria del chip y la línea de direcciones de la consola. Su tarea principal es extender el espacio de direcciones para que los desarrolladores puedan tener más chips. Esto se logra a través de cambio de bancos: las direcciones de memoria se agrupan en bancos, y el mapeador dispone de interruptores (controlados por direcciones de memoria) para alternar entre bancos. Ahora, la CPU sigue viendo la misma cantidad de memoria, así que es el juego, que fue programado con un mapeador presente, quien está a cargo de operarlo. Debido a su rentabilidad, los mapeadores eran la orden del día en la tecnología de los 80 hasta principios de los 90.

Image
PCB de Super Mario Bros 2 . Super Mario Bros. 3 también usa este diseño, pero incluye una ROM de programa de 256 KB en su lugar.

Image
La misma imagen con las partes importantes marcadas. Al principio, pensé que la SRAM adicional era para guardar partidas, pero luego me di cuenta de que no hay guardados en este juego (y tampoco hay una batería). En realidad, ese chip de RAM se usa para almacenar un nivel descomprimido.

Volviendo a la NES, juegos como 'Super Mario Bros 2' y 'Super Mario Bros 3' venían con el mapeador 'MMC3' (fabricado por Nintendo) en sus cartuchos. En comparación, el MMC3 proporcionó hasta 512 KB de espacio para la ROM de programa, hasta 256 KB para Character memory y hasta 8 KB de WRAM extra . Ahora puedes ver porqué 'Super Mario Bros 3' difiere significativamente en calidad comparado con su primer entrega.

En general, mientras que esta consola pueda parecer limitada al examinar sus características internas, Nintendo se aseguró de que se pudiera adaptar a medida que evolucionaba la tecnología. Por otro lado, mientras que esta técnica ayudó a mantener los costos de la consola bajos, trasladó parte de la responsabilidad al cartucho del juego. Así, la calidad del juego y los costos del cartucho eran dos aspectos que los desarrolladores debían equilibrar.


Previous: 3. Modelos y variantes

Next: 5. Gráficos


Rodrigo Copetti © 2026 RSS Feed

Ir a la edición moderna

Inicio · Escritos · Soporte · Acerca del autor · Acerca del sitio web