Sábado, 16 de septiembre de 2017

¡Buenas!

Hace tiempo que me rondaba por la idea hablar de las evoluciones del VDP de los MSX1, así que al final me he liado la manta a la cabeza y aquí os dejo un primer tochete que continuará más adelante.

El VDP de los MSX1 es el TMS9918A, de Texas Instruments (aunque algunos MSX pueden contar con el TMS9928A o el TMS9929A, de los que ya hablé hace tiempo en el blog), pero no es exclusivo de los MSX, ya que otros ordenadores y consolas como ColecoVision, Sega SG-1000 o Texas Instruments TI-99/4, que incluía el TMS9918 (sin la A), que no ofrecía el modo que conocemos como Screen 2.

A partir de este chip de vídeo, se han creado otros más evolucionados y en este post vamos a ver dos líneas diferenciadas: los chips de los MSX y los chips de las consolas Sega.

El origen: MSX1 vs. SG-1000

Partamos del origen: el TMS9918A. Este chip, como ya he dicho, está presente (con variantes) en los MSX1 y en la consola SG-1000 y el ordenador SC-3000 de Sega, antecesores de la Sega Mark III (más conocida como Master System por estos lares).

En este punto ambas máquinas tienen exactamente las mismas capacidades gráficas, ya que el chip de vídeo de ambas es idéntico. Este chip es de sobra conocido por todos los amantes del MSX: 16Kb de VRAM y 16 colores fijos, uno de ellos transparente. Estos son los modos de vídeo oficiales que podemos configurar (entre paréntesis indico el nombre oficial del modo de pantalla):

ModoResoluciónColoresSprites
Screen 0
(Text)
40x24 caracteres en pantalla de un único set de 256 tiles de 6x8 pixels Dos colores en toda la pantalla No
Screen 1
(Graphic 1)
32x24 caracteres en pantalla de un único set de 256 tiles de 8x8 pixels Cada tile puede tener 2 colores Si
Screen 2
(Graphic 2)
32x24 caracteres en pantalla dividida en tres sets de 256 tiles de 8x8 pixels Cada línea de estos tiles puede tener 2 colores Si
Screen 3
(Multicolor)
64x48 pixels en pantalla Cada pixel puede tener un color diferente Si

Soporta un total de 32 sprites de 8x8 o 16x16 simultáneamente en pantalla, aunque sólo 4 pueden estar en la misma línea horizontal (el quinto no se dibuja). Cada sprite sólo puede tener un color (más el transparente).

Primera evolución: MSX2 vs. Master System

Y llegaron las evoluciones del TMS9918A separándose en dos líneas diferentes:

Por un lado tenemos el V9938 de Yamaha, presente en los MSX2: tiene cuatro posibles configuraciones de VRAM: Puede mostrar 16 colores de una paleta de 512 colores o bien 256 colores simultáneos en Screen 8. Tiene dos modos de sprites: Es posible hacer scroll vertical de la pantalla, por lo que hay que considerar que las pantallas tienen una resolución virtual de 256 pixels de alto. Además todos los modos de pantalla pueden mostrar dos resoluciones verticales: 192 pixels (como MSX1) o 212 pixels. Y cuando digo todos, me refiero a todos: desde Screen 0 a Screen 8. Vale, es cierto que con trucos es posible incluso llegar a 224 pixels, pero aquí nos vamos a limitar a las características "oficiales" de los chips sin recurrir a trucos que requieran de la intervención de la CPU. En este punto no olvidemos el modo entrelazado, que "duplica" la resolución vertical.

Veamos los modos de pantalla que este chip añade a los presentes en el TMS9918A (nuevamente, entre paréntesis figura el nombre oficial del modo):

ModoResoluciónColoresSprites
Screen 0 a 80 columnas (Text2) 80x24 (80x26.5) caracteres en pantalla de un único set de 256 tiles de 6x8 pixels Dos (o cuatro, si se usa blinking) colores en toda la pantalla No
Screen 4
(Graphic 3)
32x24 (32x26.5) caracteres en pantalla dividida en cuatro sets de 256 tiles de 8x8 pixels Cada línea de estos tiles puede tener 2 colores Modo 2
Screen 5
(Graphic 4)
256x192 (256x212) pixels en pantalla Cada pixel puede tener un color diferente de entre 16 Modo 2
Screen 6
(Graphic 5)
512x192 (512x212) pixels en pantalla Cada pixel puede tener un color diferente de entre 4 Modo 2
Screen 7
(Graphic 6)
512x192 (512x212) pixels en pantalla Cada pixel puede tener un color diferente de entre 16 Modo 2
Screen 8
(Graphic 7)
256x192 (512x212) pixels en pantalla Cada pixel puede tener un color diferente de entre 256. Estos colores son fijos (no van por paleta) Modo 2
¡Paleta fija!

Voy a aprovechar para hacer algunas consideraciones: la primera es que en cualquier modo (incluso los heredados del TMS9918A) se puede acceder a toda la VRAM. Es perfectamente posible trabajar con Screen 0 y tener un montón de páginas en VRAM. Lo mismo sucede con la paleta de colores, que se puede utilizar desde Screen 0 hasta Screen 7.

Entroncando con lo anterior, el modo de Screen 8 no admite paleta. Permite mostrar 256 colores simultáneos en pantalla, pero son fijos. Es más, ¡los sprites usan una paleta fija! Es decir: no podemos tocar la paleta de los sprites a nuestro gusto si estamos en Screen 8.

Por último, quizás te haya sorprendido que diga que en Screen 4 hay cuatro bancos de tiles. ¡Pues ahí están! Y lo que es mejor: ¡también en Screen 2! ¿Cómo es esto posible?

Bien, pensemos que Screen 2 en los MSX1 sólo tiene 192 pixels de alto, lo que equivale a 3 bancos de 256 tiles. Pero ahora tenemos la posibilidad de ampliar la resolución vertical 20 pixels más. ¿De dónde saldrían los tiles extra? Pues ni más ni menos que de un cuarto banco que normalmente no es visible. Sólo cuando ampliamos la resolución o hacemos scroll vertical entrará en acción ese cuarto banco. Esto es algo que hay que tener en cuenta a la hora de trabajar con estos modos de pantalla en MSX2 o superior.

Por último, recordemos que el V9938 puede generar interrupciones en cualquier línea horizontal de la pantalla y que posee un motor de comandos por hardware para manejar la VRAM en los modos bitmap de diferentes formas. Como no es esa la intención, no profundizaremos más en estos detalles.

Bien, vistas por encima las características del V9938, pasemos a ver (también por encima) las características del VDP de la Master System, el cual también está presente en las tarjetas Franky y PlaySoniq para MSX.

En primer lugar, este VDP puede direccionar un total de 16Kb de VRAM, así que en esta característica sale claramente perdiendo con respecto al V9938.

Pasemos a hablar ahora de los modos de pantalla y vamos a dividirlos en dos grupos: ¿Por qué he hecho esta distinción? Pues sencillamente porque todas las características extra de la Master System sólo están presentes en el Modo 4. Eso quiere decir que, por ejemplo, en Screen 1 no es posible modificar la paleta de colores ni hacer scroll. ¿Y por qué están presentes estos modos de pantalla? Porque la Master System es compatible con la SG-1000 y requiere estos modos de pantalla para poder ejecutar los juegos de dicha consola. Esta característica es la que aproveché para hacer que QBIQS funcionase directamente en la Franky (y PlaySoniq).

Centrémonos ahora en las características del Modo 4. Comencemos por la resolución: 256x192 pixels. Aunque en el VDP presente en las SMS2 y en el VDP de la Game Gear era posible utilizar resoluciones de 256x224 o incluso 256x240. En cuanto a resolución podríamos decir que pierde (pero no mucho) con respecto al V9938, que es más versátil en cuanto a resoluciones de pantalla.

También admite scroll vertical, aunque cuando la resolución vertical es de 192 pixels, la pantalla virtual tiene una resolución de 224 pixels verticales. Con resoluciones superiores sí que alcanza los 256 pixels verticales virtuales. Aquí también sale perdiendo... si no consideramos que es posible hacer que el scroll vertical no afecte a las 8 columnas de tiles a la derecha de la pantalla. Esto es muy útil para utilizar el scroll en el resto de la pantalla y utilizar esta zona para marcadores. Por lo tanto en la parte de scroll vertical, el V9938 tiene algunas características superiores y otras inferiores, aquí la comparación no es ventajosa para ninguno.

Permite scroll horizontal, característica que no está presente en los V9938 (que la pueden suplir con trucos). Además, de forma similar al scroll vertical, es posible hacer que el scroll no afecte a las dos primeras líneas de tiles, lo que facilita muchísimo la programación de side-scrollers. En esta característica el VDP de la Master System gana sin dudarlo al V9938.

Hablemos de los colores... La Master System es capaz de gestionar dos paletas de 16 colores a elegir entre 64. Esto significa que puede haber hasta 32 colores simultáneos en pantalla de una paleta de 64. Más colores... pero menos de dónde escoger. Mmmm, difícil elección en este punto. Vamos a separarlo en dos: obviando Screen 8, la SMS gana en colores simultáneos pero pierde en paleta de donde escoger.

Llegados aquí, hay que hacer un inciso. Seguro que muchos sabéis que la Game Gear es prácticamente una Master System portátil. Bien, esto es correcto. Sin embargo, hay una diferencia fundamental con respecto a los colores: las paletas de la Game Gear pueden escoger entre 4096 colores diferentes (anda, como los Amiga OCS/ECS). Así pues, el VDP de la Game Gear es superior en esto al del MSX2.

Y llegamos a los tiles y sprites, que me los he dejado para el final a propósito porque aquí la SMS gana, y por goleada, al V9938 (e incluso al V9958). Cada tile en modo 4 consiste en un grupo de 8x8 pixels cada uno de los cuales puede tener un color independiente al resto, a escoger de una paleta de 16 colores. Eso sí, cada tile sólo soporta una de las dos paletas existentes. Se pueden definir un máximo de 512 tiles diferentes que, a 32 bytes por tile, ocuparían toda la VRAM. En la práctica no es posible llegar a este número, ya que parte de la VRAM se ha de utilizar en la tabla de nombres y en la de atributos de sprites. Pero además, en la tabla de nombres es posible indicar que un tile se muestre normal o invertido horizontal y/o verticalmente, lo cual es una gran ventaja.

¿Y cómo se forman los sprites? Pues los sprites están formados por los mismos tiles que el fondo. Eso quiere decir que un único sprite puede tener hasta 16 colores (los sprites utilizan la segunda paleta de colores). La resolución de los sprites es de 8x8 o bien de 8x16 y es posible utilizar hasta 64 simultáneamente y un máximo de 8 por línea horizontal. Vale, ahora me diréis que al final el MSX2 es mejor aquí, porque puede poner 8 sprites de 16x16 en la misma línea y la SMS sólo 8 de 8x16. Correcto, pero no olvidemos que si queremos sprites más coloridos hay que mezclar dos o más, cosa que no se necesita en la SMS. Así pues, los sprites de la SMS son superiores a los del V9938. Pero eso no es todo. Si aún no os habéis convencido sobre los sprites de la SMS, os comento que en la tabla de nombres es posible indicar que cualquier tile tenga mayor prioridad que los sprites, lo que permite que éstos "pasen por detrás" del escenario, algo ideal en algunos momentos.

Por último, comentar que el VDP de la Master System también puede generar interrupciones en cualquier línea horizontal de la pantalla, pero no posee un motor de comandos similar al del V9938.

Vamos a resumir las características de ambos VDP en una tabla comparativa:
ChipVRAMResoluciónScroll hardwarePaletaColores simultáneosTilesSprites
V9938
  • 16Kb
  • 64Kb
  • 128Kb
  • 192Kb
  • 256x192
  • 256x212
  • 512x192
  • 512x212
  • Modo entrelazado
  • Vertical
  • 16 colores de entre 512
  • 2 (Screen 0)
  • 4 (Screen 0 y 6)
  • 16 (Screen 1, 2, 3, 4, 5, 7)
  • 256 (Screen 8)
  • Tamaño 8x8
  • Dos colores por línea horizontal
  • Tamaño 8x8 ó 16x16
  • 32 simultáneos en pantalla
  • 8 simultáneos por línea horizontal
  • Un color por cada línea
  • Mezclando sprites se puede aumentar a 3, 7 o 15 colores por línea
Master System
  • 16Kb
  • 256x192
  • 256x224
  • 256x240
  • Vertical
  • Horizontal
  • Posibilidad de bloquear el scroll en zonas de la pantalla
  • Dos paletas de 16 colores de entre 64
  • Dos paletas de 16 colores de entre 4096 (Game Gear)
  • 2 (Screen 0)
  • 16 (Screen 1, 2, 3)
  • 32 (Modo 4)
  • Tamaño 8x8
  • Un color independiente por pixel
  • Pueden invertirse por hardware
  • Tamaño 8x8 ó 8x16
  • 64 simultáneos en pantalla
  • 8 simultáneos por línea
  • Un color por pixel
  • Pueden esconderse tras el escenario

Vale, entonces... ¿qué VDP es mejor? Pues la respuesta, como siempre en estos casos, depende de para qué se vaya a utilizar. Si se quiere hacer un juego basado en tiles, primando velocidad de respuesta sobre vistosidad gráfica, no hay duda que el chip adecuado es el de la Master System. Por el contrario, si se necesitan muchos colores en pantalla, a costa de ralentizar la acción, siempre podemos acudir a Screen 8 del V9938.

Por otro lado, la Master System no es capaz de mostrar un dibujo a 256x192 en el que controlemos individualmente cada pixel (para eso necesitaríamos un total de 768 tiles y no hay VRAM suficiente), pero ahí tenemos Screen 5 (y Screen 8) que nos lo permiten... siempre que no necesitemos que el dibujo se mueva mucho, claro está. Tampoco nos olvidemos de los AVG japoneses hechos en Screen 7 (sí, los de los dibujos tramados) o que el MSX es un ordenador de propósito general y, por tanto, un Screen 0 a 80 columnas es ideal para aplicaciones en modo texto.

En definitiva, cada chip para lo que fue pensado es perfecto (dentro de sus limitaciones). El VDP de la Master System fue pensado para ser utilizado en una máquina de juegos y se primó el modo de tiles, mientras que el V9938 fue pensado para un ordenador, creando nuevos modos bitmap. Personalmente echo mucho en falta un modo de tiles más potente en el V9938 (y en su sucesor, el V9958), lo cual habría permitido juegos más vistosos basados en tiles.

Creo que por hoy es suficiente con llegar hasta este punto. En un futuro post seguiremos la comparativa al analizar el V9958, el V9990 y el chip de la Megadrive. ¿Por qué no comparo el V9958 con el VDP de la Master System? La verdad es que esta comparación nos dejaría unos resultados similares a la que vemos aquí, ya que el V9958 sólo añade modos bitmap con más colores y scroll horizontal por hardware. Los modos de tiles, identicos a los del V9938, seguirán perdiendo contra el modo 4 de la SMS.