Gráficos en consolas antiguas (V): Famicom/NES

En la entrada de la Colecovision he observado que WordPress me ha subido un borrador inacabado, tenéis la versión definitiva y corregida ya subida, leedla antes de leer esta entrada ya que hay una serie de elementos que no repetire en las siguientes entradas para hacer las entradas lo menos pesadas posibles.

___________________________________________________________

La popular 8 bits de Nintendo no necesita presentación.

Wikipedia_NES_PAL

Su procesador gráfico, el cual fue llamado Picture Processing Unit (PPU), fabricado por Ricoh para Nintendo se podría decir que extraoficialmente es un hack del TMS9918A aunque Nintendo jamás ha mencionado la relacion con chip de Texas Instruments esta claro que comparten algunos elementos en común y que va más allá de una simple inspiración. En primer lugar comparten resolución horizontal, 256 pixeles dibujados en pantalla por escaneo de linea y 340 ciclos de reloj por cada una, el hecho que comparte los 8 registros de 16 bits para la configuración (los cuales son directamente exactos) y que los modos gráficos sean exactamente los mismos.

Por cierto y como inciso… ¿Nunca os habéis preguntado como es que las intros en los juegos de NES se veían como se veían?

Ninja_Gaiden_II_(NES)_07

Esto era porque utilizaban el modo 2, en realidad la Famicom/NES utilizaba por lo general una versión modificada del Modo 2 y dado que esto era en general para todo el software se puede concluir que los modos 0, 1 y 3 se encontraban desactivados en el caso de la Famicom/NES.

No obstante, los cambios en el hardware son lo suficientemente profundos como para decir que estamos hablando de un chip completamente nuevo, en especial en el apartado de la memoria ya que esta se encuentra dividida no en un solo banco sino en varios bancos distintos de memoria en el que operar, los cuales están configurados de la siguiente manera

  • 2 KB de VRAM externa al chip pero dentro de la consola. Carga la posición de la memoria en la que se encuentra la colección de sprites/patrones a cargar y el orden de estos. El TMS9918A de la Colecovision tenía un mapa de pantalla  de unos 768 bytes de tamaño para almacenar como se distribuían en pantalla, gracias a que la Famicom/NES tenia 1024 bytes la resolución podía ser de 256×224. Esta memoria recibe el nombre de CIRAM.
  • 256 bytes de memoria para el almacenamiento de los patrones/sprites, dibujados durante la pantalla actual, esta memoria recibe el nombre de OAM (Object Atribute Memory) y puede almacenar hasta 64 patrones/sprites en su interior.
  • 32 Bytes de memoria interna para el almacenamiento de la paleta de colores. También es una memoria interna dentro del chip.

Estos cambios permitieron una serie de mejoras gráficas que son las siguientes:

  • 4 colores distintos por sprite/patrón en vez de solo 2.
  • Paleta de colores mucho más amplia.
  • 8 Patrones/Sprites distintos por escaneo de linea.
  • 64 Patrones/Sprites distintos por pantalla.
  • Resolución de 256×224 pixeles

Pero la mayor novedad de la Famicom/NES fue el soporte para scroll/desplazamiento de pantalla a nivel de pixel (lo cual hacía que este fuese más suave) y por hardware mientras que la Colecovision tenía que controlar el scroll por software. Ambas consolas tenían dos espacios de pantalla distintos en memoria, esto permitía realizar desplazamiento horizontal o vertical. En juegos como The Legend of Zelda el sistema no sabía hacía donde tenía que tirar el jugador por lo que solo cargaba en los 2KB de memoria un mapa/tabla y cuando el jugador cambiaba de pantalla el sistema rapidamente cargaba desde la memoria del cartucho a los 2KB de memoria para mapas/tablas. Sí os habéis fijado muchos juegos de NES tenian que cambiar de escena para cambiar el tipo de desplazamiento/scroll utilizado.

¿Pero que ocurre con juegos como este?

smb3nes

 

Combina los dos tipos de scroll, el truco esta en que el sistema realmente soporta hasta 4 tablas/mapas a traves de su mapeado de memoria pero solo tiene memoria en el sistemas para dos así que necesita memoria adicional para poder mover las cuatro tablas… ¿Y de donde saca la memoria adicional? Pues de los cartuchos,

La Famicom/NES en comparación con otros sistemas de su época solo tenia 2KB de RAM  para la CPU aparte de la memoria antes asignada por lo que los lo los datos gráficos y los datos de programa se cargaban desde el cartucho, el cual tenía cuatro tipos de chips en su interior:

  • PRG-ROM: Datos de programa en una ROM de solo lectura.
  • PRG-RAM: Aumenta la cantidad de RAM disponible para la CPU.
  • CHR-ROM: Datos gráficos en una ROM de solo lectura. La PPU puede leer directamente datos desde estos sin tener que copiarlos en ninguna memoria intermedia para su lectura.
  • CHR-RAM: Aumenta la cantidad de RAM disponible para la PPU.

La gran novedad de la Famicom/NES respecto a consolas anteriores es que añadió dos canales de acceso distintos desde el sistema a los cartuchos, uno para programa y otro para gráficos. En la Colecovision cuando el sistema gráfico necesitaba acceder a los datos gráficos del cartucho para cargarlos en memoria este entraba en conflicto con el uso por parte de la CPU. En el caso de la Famicom/NES el sistema gráfico podía leer directamente del cartucho sin necesidad de volcar los datos en memoria, por lo que reducía la latencia de renderizado pero la magía que llevo a la Famicom/NES fue el hecho que ni la CPU ni la PPU tenían acceso directo a la memoria sino que este era llevado por los chips MMC, los cuales se encontraban en los cartuchos.

Dado que el 6502 solo podía direccionar 16 bits de memoria (64KB), los programas no podían ser más grandes de ese tamaño, pues bien, gracias a los chips MMC era posible cargar en la consola juegos con un tamaño mucho más grande (hasta 1MB (8 Megabits) de tamaño. En cuanto a la parte gráfica, sabemos que el TMS9918A solo podía cargar hasta 16KB de memoria de video en total, la Famicom/NES soportaba solo 8KB de memoria de video adicional a través del cartucho, por lo que contando también la memoria del sistema como mucho podía disponer de poco más de 10KB de memoria total en el sistema.

Los primeros juegos cargaban datos gráficos y datos de programa en un PGR-ROM, haciendo que los datos gráficos fuerán volcados en la CHR-RAM pero posteriormente se paso a utilizar CHR-ROM, las cuales podían ser de mayor tamaño (Hasta 32KB) y gracias a los MMC más avanzados soportaban multiples chips de memoria con un bus directo a cada uno de ellos a través del MMC. Nintendo jamás realizo cartuchos con varios chips CHR-RAM por lo que estos solo tenían un ancho de banda de 1.34Mhz x 8 bits de memoria, dado que los 256 bytes de memoria interna procesaban los patrones/sprites de la linea actual y esta tenía una velocidad mucho mayor que la CHR-RAM esta acabo cayendo en desuso a la hora de dibujar la escena en pantalla, no obstante se le vieron usos como ampliación de espacio para la CIRAM. La CHR-ROM por otro lado, era un tema distinto, había mapeadores que podían soportar multiples chips por lo que el ancho de banda de lectura pasaba a ser numero de chips CHR-ROM*1.34Mhz*8 bits en total, por lo que con ese “enorme” ancho de banda la PPU podía leer directamente los datos necesarios desde el cartucho y cargar la lista de 64 sprites directamente en la memoria OAM de una manera muy rápida.

Hasta aquí la explicación del sistema gráfico de la Famicom/NES.

Anuncios