Gráficos en consolas antiguas (IX): Sega Genesis/Mega Drive

Originalmente tenía pensado hacer una entrada sobre la PC-Engine/TurboGrafx pero es una consola tan oscura en cuanto a información que he decidido saltar directamente a la 16 bits de Sega, la Genesis/Mega Drive.

genesis_system

Sus especificaciones técnicas eran las siguientes:

  • CPU Motorola 68K a 7.67 Mhz  (1 MIPS)+Z80 a 3.58Mhz (0.4 MIPS) como co-procesaor
  • 64KB RAM.
  • Sega Custom VDP.
  • 64KB VRAM.

Como siempre vamos a dejar el sonido aparte. En primer lugar cabe destacar el uso del Motorola 68000 como CPU de la consola, una eleccion lógica si tenemos en cuenta que se había convertido en el procesador estandar de los sistemas de 16 bits, tanto ordenadores (Amiga, Atari ST, X68000…) como en las placas recreativas. En Mega Drive/Genesis el 68000 era responsable de varios efectos realizados por software sobre los gráficos como la rotación de sprites:

El Z80 por otro lado se utilizaba como co-procesador del sonido y no participaba en la generación de la escena a excepción en el modo de compatibilidad con Master System a través del Master Gear Converter, un adaptador en la ranura de cartuchos de MegaDrive que permitía colocar los cartuchos de su antecesora.

El procesador gráfico de Genesis/Mega Drive era una versión altamente mejorada del de Master System pero añadiendo una serie de cambios en el sistema que colocaban a la generación de gráficos una generacion por encima. La consola tenía dos modos gráficos, el primero estaba heredado del Modo 4 de Master System y tenia exactamente el mismo funcionamiento:

Modo4

El otro era el realmente utilizad por los juegos de la 16 bits de Sega, lo llamaron Modo V/5.
Modo5La composición de la escena era de tres planos distintos Sprite en el primer plano, Window/Scroll en el segundo plano y Scroll B en el tercer plano. A través del controlador de prioridad se evaluaba que celda se dibujaba en pantalla cuando estos coincidían en posición. Ahora bien… ¿como se generaba la pantalla? Pues de la misma manera que hemos dicho hasta ahora, a través de las Name Tables, solo que en el caso de MegaDrive/Genesis nos encontramos con dos resoluciones distintas:

  • Modo H32: 32*28 Celdas (256*224 Pixeles en pantalla).
  • Modo H40: 40*28 Celdas (320*224 Pixeles en pantalla).

El Motorola 68000 funcionaba a unos 7.67Mhz y era un procesador con un bus de 16 bits, esto significa que podía escribir unos 16 bits por ciclo de reloj. Por otro lado dado que el espacio de la VRAM era de 16 bits (64K) y la información de las celdas

se almacenaba en la misma entonces cada una de las celdas de la Name Table tiene que contener una dirección de memoria en un espacio de 16 bits. El Motorola 68K tarda unos unos cuatro ciclos en escribir en memoria un dato, ¿os acordáis de la limitación que tenían la Colecovision y la Master System a la hora de generar la Name Table? Hagamos memoria de como funcionaba el TMS9918A:

Para acceder a la VRAM la CPU tenía que hacer tres envios, los dos primeros para decir la operación que se quería realizar: Leer de la VRAM, escribir en la VRAM, Escribir en la Color RAM/Paleta o escribir en uno de los ocho registros del TMS9918A que sirven para su configuración, esto ocupaba dos bits en total. Los otros 14 bits eran para decir la dirección de la memoria de video que se quiere manipular, de ahi a que el 9918A como mucho tenga unos 16KB de memoria VRAM asignada y no más. El tercer envió es para escribir el dato que queremos escribir.

Pues bien, Sega elimino esa limitación en Genesis/MegaDrive, ahora si se quiere manipular un dato en concreto en la VRAM desde la CPU creando dos registros nuevos, uno para lectura y otro para escritura, ambos de 16 bits en los que se marcaba la dirección de memoria que se quería modificar y a continuación se pasaban los datos en el siguiente envio. Esto permitía utilizar un espacio de 16 bits en vez de uno de 14 bits y este simple cambio permitió el uso de unos 64KB de memoria de video, lo que suponía un aumento de 4 veces respecto a Master System y por tanto la posibilidad de almacenar más información.

Al igual que ocurría con Master System, se utilizaba espacio adicional para añadir celdas en las que almacenar las celdas que componían el fondo/scroll, esto se hacía para evitar que el jugador no viese la formación del escenario ya que el plano que se desplazaba realmente era el fondo/scroll. En el caso de Mega Drive cada uno de los dos fondos podían tener una Name Table asignada de hasta 8KB para cada uno mientras que el primer plano el de Sprites solo necesitaba calcularse para la pantalla actual por lo que su Name Table asignada solo tenía un tamaño de 960 bytes. Eso si, en cada fotograma la Name Table creada por la CPU era es de 960 bytes y cuanto tocaba dibujar la escena en pantalla se dibujaba según la Name Table generada por la CPU.

Una ventaja que tiene Genesis/Mega Drive en lo que al enorme tamaño de la Name Table para el Scroll 1 y el Scroll 2 se ve cuando vamos a toda velocidad con Sonic. Dado que un enorme espacio de la escena tiene el fondo dibujado fuera de escena cuando Sonic pasa a toda velocidad no vemos como se forma el escenario. Pero esto además es posible gracias a lo en el marketing de Sega llamaron…

blast-processing

Aquí entramos en el otro añadido de Mega Drive/Genesis respecto a su predecesora,  en Master System lo que se hacía era que la CPU escribiese la Name Table directamente en la VRAM. En Genesis/MegaDrive añadieron un mecanismo DMA para la transferencia de datos dentro de la propia consola y es a eso a lo que se refería Sega en el marketing con Blast Processing. Dicho mecanismo era mucho más complejo que el mecanismo DMA de la Famicom/NES, las operaciones que podía realizar y su rendimiento se puede ver en la siguiente tabla:

MegaDriveGenesisDMA

Los escaneos activos son las lineas de escaneo en las que se dibuja y por tanto solo es accesible la memoria durante el periodo de HBlank, esta capacidad de escribir en memoria durante el HBlank permitía hacer ciertas operaciones gráficas que más adelante comentare.

Para generar la Name Table, la CPU escribía sobre la RAM y luego el DMA se encargaba de volcarlo directamente de la VRAM sin intervención alguna de cualquier otro procesador y de una forma muy, muy rápida. El VRAM Fill permitía volcar directamente la información gráfica del cartucho a la VRAM y el VRAM Copy permitía trasladar información de una parte de la VRAM a otra. De esta manera uno de los problemas asociados a la consola de 8 bits quedaba completamente resuelto. Una vez que hemos pasado los datos a la VRAM para que el VDP los dibuje en pantalla, en este modo podemos  definir hasta 64 sprites distintos en el modo H32 y 80 sprites distintos en el modo H40, por escaneo de linea en el modo H32 unos 16 Celdas y en el modo H40 unos hasta unas 20 celdas. La tabla de Sprites utilizada para generar la escena era de 512 bytes en el modo H32 y 1024 bytes en el modo H40 y al igual que en Master System se encontraba en la VRAM.

La consola además disponía de un modo entrelazado en el que dibujaba dos pantallas en horizontal al mismo tiempo, una para cada jugador. Cada una de las pantallas tenía sus propias name tables para la generación de la imagen.

sonic2000

Por otro lado, el motivo por el cual me estoy refiriendo a celdas en vez de patrones/sprites es por el hecho que la concordancia del tamaño de los patrones/sprites y las celdas donde se mapean las Name Table ya no coinciden ya que los sprites en Genesis/MegaDrive podía- Estos pueden ir desde los 8×8 pixeles hasta los 32×32 pixeles, permitiendo personajes de gran tamaño en pantalla en comparación con los sistemas de 8 bits.

genesis_super_street_fighter_ii_-_the_new_challengers_2 super_hang_on_sega_vintage_collection_5

En el tema del color, sí la Master System podía cambiar el valor de color cada cuatro pixeles, en Mega Drive/Genesis Sega duplico el ancho de banda permitiendo que por escena el número de colores pasase de ser de 32 colores a 64 colores distintos de una paleta de 9 bits (512 colores). Una cantidad que en comparación con los 256 colores en pantalla de SNES y PC-Engine y la paleta de 15 bits de SNES era el talón de aquilés mas importante que tenía la consola de Sega a nivel visual en comparación con sus competidoras. Una forma de aumentar los colores en pantalla más allá de los 64 teóricos era que la CPU cambiase los valores de la paleta durante el periodo del HBlank para así permitir una mayor cantidad de colores, esto se puede ver muy claramente en el nivel Labyrinth del primer Sonic de Genesis/MegaDrive:

Labyrinth

En cuanto el número de colores, al igual que Master System puede utilizar 16 colores por plano, existiendo hasta cuatro planos esto hace un total de 64 colores en pantalla.

En fin, eso es todo sobre Genesis/MegaDrive, el resto de cosas se deduce a partir de las explicaciones que he dado de las consolas anteriores ya que muchas cosas se heredaron en esta consola.

En fin, eso es todo, si tenéis alguna duda preguntad en los comentarios.

Anuncios