NES (Nintendo Entertainment System)

A pesar de su tremendo éxito, la NES es una consola de escasa potencia, gobernada por una CPU lenta, y que dispone de muy poca memoria RAM y de video. No obstante se las apañó francamente bien para hacer muchas, y muy grandes cosas. Ha demostrado con creces que su capacidad es suficiente para hacer buenisimos juegos. Introduciré un poco los términos que se manejan en el mundo de la NES.

Mapeadores

Los mapeadores son la clave para entender como funcionan los cartuchos de la NES. La CPU de esta consola sólo puede manejar 64Kb de memoria, contando con la memoria interna de la consola, la memoria del cartucho, es decir, el juego, y si éste tiene memoria extra, para salvar partidas o para lo que sea.

La NES dedica los 64Kb de memoria así:

8Kb: Los primeros 8Kb los usa para acceder a su RAM interna.
8Kb: Los siguientes son para acceder a diversos registros de la maquina.
8Kb: Esta zona es para diversas cosas que no vienen a cuento ;)
8Kb: Dedicada a la posible memoria WRAM del cartucho.
32Kb: Esta zona se reserva para el juego.

O sea que sólo se pueden manejar juegos de 32Kb sin ayuda extra. Realmente hoy en día se puede meter poca cosa en 32Kb, y sino que se lo digan al Windows XP. Hoy, en una época en la que los juegos ocupan 4 Gigas, cuesta pensar que algo pueda ser tan pequeño. No ocupa 32Kb ni el ?Bloc de notas? (sin comentarios). Pero, y en la época de la NES?

Sorprendentemente, hay juegos de NES que son suficientemente pequeños como para poder ser manejados por la CPU sin ayuda, en concreto, todos los que ocupan como mucho 32Kb. El Super Mario Bros es un ejemplo (su memoria de programa es de sólo 32Kb, aunque el cartucho dispone de otros 32Kb que almacenan los gráficos, pero esta memoria es accedida por el procesador gráfico, por lo que no cuenta). Si queremos un juego más grande, lo cual no es difícil, tenemos que inventarnos algo. Y lo que Nintendo decidió fue mapear, es decir, partir las roms de los juegos en ?trozos? de 16Kb, e ir permitiendo el acceso a dos de estos ?trozos?, pero los llamamos bancos , que eso de ?trozos? suena muy poco técnico. La CPU sigue teniendo acceso a sólo 32Kb del juego, pero ahora puede cambiar CUALES de los 32Kb de la rom son accesibles en un momento dado. Cuando uno ya se haya usado, lo ?sacamos? y ?metemos? otro en su lugar.

Esta técnica de ir cambiando de bancos se denomina bankswitching. Y quien controla el tema del bankswitching? El MAPEADOR .

Ejemplo: Si tenemos una rom de 128Kb, y la partimos en trozos de 16Kb, tenemos 8 bancos de 16Kb. En un momento dado, sólo dos de esos bancos serán accesibles.

Existen distintos mapeadores, para ser más concretos, en el caso de la NES son los ciento y pico, aunque los más comunes son el MMC1 y el MMC3.


La consola...


CPU

La unidad central de proceso, en otras palabras, el chip encargado de procesar los programas, y de controlar el sistema. Es una versión simplificada del procesador 6205, a 1.79 Mhz, que fue bastante famoso en su época.

PPU

Picture procesing unit, o en español, unidad de proceso de imagen. Este chip le da a la NES casi todo lo que tiene. Se encarga de manejar y dibujar los gráficos y los sprites, del scroll, etc. Ha sido diseñada específicamente para la NES, y es distinta en la versión NTSC que en la PAL.

RAM

Memoria que usa como almacenamiento temporal. Se la suele llama WRAM (supongo que Work RAM). Es accesible desde la CPU, y sólo tiene 2Kb de capacidad. Los juegos que requieren más, necesitan incorporarla dentro del cartucho. Esta memoria suele ser de 8Kb, lo que da un total de 10Kb.

VRAM

Memoria que se usa para almacenar los niveles (mapa del plano de scroll, o Name Table) y sus atributos. Para los sprites y la paleta la consola dispone de otras pequeñas memorias adicionales en el interior del chip gráfico (de tan sólo 256 y 32 bytes respectivamente).? La SPR-RAM o memoria de sprites almacena su posición, el gráfico asociado a ellos, la paleta que debe usar y algunos pocos atributos más, de ahí que sea tan pequeña (dedica cuatro bytes a cada sprite, por lo que puede albergar un total de 64 sprites (256/4=64). Sólo es accesible a través de la PPU, al igual que la CHR-ROM y CHR-RAM, por lo que no cuenta como espacio dentro del mapa de memoria de 64Kb de la CPU.

La CHR-ROM o CHR-RAM, aunque forman parte de la VRAM, residen en el cartucho (algo atípico). Es aquí donde se almacenen los gráficos, o tiles de 8x8 píxels con los que se construyen el mapa del plano de scroll y los sprites.

La VRAM interna de la consola, de sólo 2 Kbytes, se usa para almacenar las llamadas Name Table y Attribute Table, es decir el mapa o la disposición de los tiles en el plano de scroll, así como la paleta que usan. Hay memoria para cubrir el área de dos pantallas de televisor, cada una de ellas de 32x30 tiles (256x240 píxels). Por una limitación de memoria, sólo de puede seleccionar la paleta que van a mostrar los tiles en bloques de 2x2, y no de forma individual. Esto es porque la Attribute Table es de sólo 64 bytes por pantalla. El scroll es más fácil de gestionar que en Master System, cuyo plano de scroll es practicamente igual al área visible del televisor. Sin embargo, la consola de SEGA puede seleccionar la paleta de cada tile, sin restricciones por bloques, y además puede voltear el gráfico de los tiles, y decidir si debe provocarse un oscurecimiento al ser tapado por un sprite. Gana en riqueza, pero como contrapartida requiere 1792 bytes de VRAM para almacenar lo que en NES requiere una única Name y Attribute Table, de sólo 1024 bytes. Nada es gratis. Los diseñadores de la NES sencillamente optimizaron más este apartado, a costa de perder flexibilidad.

Para poder escribir en la memoria de vídeo, el procesador debe hacer solicitarlo a la PPU a través del uso de puertos. Puede además hacer uso de un rudimentario controlador de DMA para acelerar la transferencia de los sprites desde el espacio de memoria de la CPU a su memoria en el sistema gráfico.

CIC

Seguro que mucha gente sabe que las consolas no pueden funcionar con juegos extranjeros que no hayan salido para la zona donde se compró. Realmente hay tres grandes zonas, Europa (PAL), Estados Unidos (NTSC) y Japón (NTSC).
El CIC es el mecanismo que usó Nintendo para evitar que se pudiera jugar con juegos de otras zonas en una SNES, y es un chip que va en la consola, y otro en el cartucho. Hay un CIC para versiones PAL, y un CIC para versiones NTSC. Al encender la consola, su CIC y el del cartucho se comunican. Si la consola es de una zona y el juego de otra, los CIC de consola y cartucho serán distintos, y por lo tanto, el sistema se bloquea (queda como en estado de reset indefinido).


Los cartuchos...


PRG-ROM

Es la memoria que almacena el código del programa. Como mucho 32Kb son accesibles a la vez, como ya he comentado.

CHR-ROM

Es la memoria que almacena los gráficos, basados en tiles de 8x8 píxeles y cuatro colores. Es opcional , es decir, algunos cartuchos no la tienen, y la sustituyen por una pequeña memoria RAM (ver a continuación). Se accede a ella a través de la PPU.

CHR-RAM

Sólo existe en los cartuchos que no utilizan CHR ROM. Los gráficos se meten dentro de la PRG-ROM, junto al código, como es habitual en otras consolas, y para mandarlos a la NES, primero se copian a esta memoria RAM, que actúa como si fuera una CHR-ROM de un solo banco. En sus 8 Kbytes se pueden almacenar 256 tiles para el plano de scroll y otros 256 tiles para los sprites (cada tile requiere 16 bytes de memoria, ya que tienen una profundidad de color de dos bits, por lo que 8x8píxels x 2bits / 8 = 16)

WRAM

Sinónimo de SRAM. Es una memoria RAM estática de 8 Kbytes que sirve para diversas tareas, y que es opcional . No todos los juegos la tienen. Algunos la usan como expansión de la escasa RAM de la NES, como ya dije, otros para salvar partidas, siempre y cuando el cartucho traiga una pila. Esto es debido a que la SRAM se borra cuando se desconecta de la alimentación, en nuestro caso cuando sacamos el cartucho. Si cada vez que apagáramos la consola perdiéramos las partidas salvadas, sería muy poco interesante. Así que la pila mantiene las preciadas partidas a salvo.

Mapeador (mapper)

Chip encargado de permitir el acceso a ROMs de juegos cuya PRG-ROM sea mayor de 32Kbytes, es decir, de casi todos. Hay muuuchos tipos de mapeadores en la NES (por desgracia, creo). Ejemplos conocidos son el MMC1 o el MMC3.

MMC

Multi Memory Controller. Así se llamaban los mapeadores hechos por Nintendo. Exsten varios modelos, y dentro de cada modelo varias versiones. Por cierto, en la GameBoy llamaron a los mapeadores MBC (Memory Bank Controller). No confundirlos.


Otros...


Mirroring : La NES no puede normalmente almacenar el nivel de un juego al completo, solo puede almacenar el equivalente en tamaño a dos pantallas de televisor. El mirroring hace referencia a cómo se colocan esas dos pantallas, si una al lado de la otra, o una sobre la otra. El primero se llama mirroring vertical, muy útil en juegos de scroll lateral, y el segundo se llama mirroring horizontal, adecuado para juegos donde el scroll es hacia arriba.