« Arquitectura del PC Engine / TurboGrafx-16 (index)

Arquitectura del PC Engine / TurboGrafx-16

Chapter 5: Gráficos


Tabla de contenidos

  1. Organizando el contenido
  2. Construyendo el frame
    1. Tiles
    2. Almacenando tiles
    3. Capa de fondo
    4. Capa de sprites
    5. Resultado
  3. Salida de vídeo

Los gráficos los gestiona el Hudson Soft HuC6270, un chip independiente también denominado Video Display Controller o 'VDC'. El HuC6270 dibuja todo lo que el jugador ve en la pantalla y su funcionalidad es muy similar a la contraparte de Sega. En este artículo me centraré en los aspectos diferenciales de la propuesta de Hudson.

Organizando el contenido

Lo primero es lo primero: el VDC es un tile engine (más o menos el estándar hasta que apareció la 5ª generación), pero cabe señalar que el PC Engine incluye 64 KB de VRAM, una cantidad considerable comparada con la competencia. Esto puede dar lugar a nuevos tipos de contenido, que exploraremos más adelante.

Image
Arquitectura de memoria del VDC.

La forma en que se organizan los datos gráficos puede resultar un poco confusa: tanto la CPU como el VDC utilizan direcciones de 16 bits, pero mientras que la CPU solo puede manejar palabras de 8 bits, el HuC6270 almacena palabras de 16 bits en la VRAM . Esto significa que una sola dirección en la RAM contiene un byte, mientras que una dirección en la VRAM almacena dos bytes, así que los desarrolladores tenían que tener en cuenta esta discrepancia al transferir datos a la VRAM.

La razón de esto se reduce a cómo Hudson organizó la circuitería: el VDC tiene un bus de dirección de 16 bits, pero solo se controlan las primeras 15 líneas (la última siempre está configurada en '0'), por lo que las direcciones impares se obtienen del segundo byte. No sé por qué Hudson eligió este camino, pero sí sé que todo esto tendría más sentido si el sistema tuviera en su lugar 128 KB de VRAM (ya que un bus de dirección de 16 bits solo puede acceder hasta 64 KB, así que al duplicar el bus de datos de alguna manera, se pueden recuperar hasta 128 KB). ¿Quizás ese era el plan original de Hudson/NEC?

Construyendo el frame

Además de la peculiaridad de granularidad mencionada anteriormente, el VDC es, funcionalmente, muy sencillo. El subsistema tiene tres componentes principales: el VDC y la VRAM, que ya he mencionado, y el Video Colour Encoder (también llamado 'VCE'; hablaremos más sobre esto a su debido tiempo).

El sistema es compatible con múltiples resoluciones, ya que el juego puede alterar un conjunto de registros que actúan como parámetros para controlar los tiempos de visualización, que a su vez modifican los tiempos de barrido del CRT. La resolución mínima es de 256 × 224 píxeles , mientras que algunos proyectos homebrew han demostrado que este sistema puede alcanzar hasta 512 × 240 píxeles.

Ahora veamos cómo se dibuja un fotograma paso a paso; para ello, tomaré prestados los assets de Bonk's Adventure.

Tiles

Image
Tiles de fondo en la VRAM.

Image
Tiles de sprite en la VRAM.

Los dos tipos de tiles en la VRAM.

Como breve recordatorio, los tiles son solo bitmaps de 8x8 píxeles que el renderizador obtiene para dibujar porciones de la pantalla. Con el VDC, el fotograma se compone de dos planos: la capa de fondo y la capa de sprites.

Dentro de la VRAM hay un área llamada Character Generator donde se definen los tiles exclusivos para la capa de fondo. Cada píxel de un tile ocupa cuatro bits, por lo que puede usar hasta 16 colores. En teoría, se pueden definir hasta 4096 tiles de fondo, pero esto se reduce en la práctica debido a que la VRAM es mucho más pequeña.

Los sprites, por otro lado, se dibujan usando tiles desde una ubicación de memoria separada en la VRAM, denominada Sprite Generator, que difiere del anterior Character Generator ya que los tiles aquí son de 16x16 píxeles.

El codificador de vídeo es un chip separado que almacena 32 paletas de colores (16 para el fondo y 16 para los sprites) ; cada paleta almacena 16 colores y cada color tiene una amplitud de 9 bits (3 bits para Rojo + 3 bits para Verde + 3 bits para Azul).

Almacenando tiles

Image
Estructura de un tile de fondo.

Image
Estructura de un tile de sprite.

Cómo se estructuran los tiles en la VRAM.

(Esta sección está escrita para aquellos interesados en cómo Hudson aprovechó los 64 KB de VRAM con esa granularidad de 16 bits, pero no es necesario entenderla completamente para seguir el resto del artículo).

Hasta ahora hemos discutido que cada píxel de un tile se almacena usando 4 bits (o medio byte, también llamado nibble). Ahora bien, Hudson dicta que los tiles están compuestos por cuatro bitmaps de 8x8 (llamados 'CH0', 'CH1', 'CH2' y 'CH3', respectivamente). Cada mapa tiene 1 bit de ancho, pero una vez que se combinan los cuatro, forman el tile final con píxeles de 4 bits.

Debido a la alineación de 16 bits, cada palabra de 16 bits almacena una sola fila de dos bitmaps de 1 bit (8 filas + 8 filas). Así que, después de escribir ocho entradas, se almacenarán dos mapas (en lugar de solo uno). Echa un vistazo a los diagramas para entenderlo mejor.

Lo mismo ocurre con los tiles de sprite, pero dado que son bitmaps de 16x16, cada bitmap ocupa 16 palabras. Dicho de otra manera, para almacenar un solo tile de sprite se necesitan 64 palabras (equivalente a 8 bytes en VRAM).

Capa de fondo

Image
Capa de fondo renderizada.

La capa de fondo se construye llenando la Background Attribute Table con entradas en la VRAM; la posición de cada entrada define las coordenadas X/Y del tile en la pantalla. Cada entrada contiene el índice del tile del Character Generator y la paleta de colores.

La dimensión máxima de esta capa es de 1024 x 512 píxeles (128 x 64 tiles), pero los programadores pueden configurar una capa de 256 x 256 píxeles (32 x 32 tiles) como mínimo.

Como siempre, esta capa es desplazable cambiando el valor de algunos registros en el VDC.

Capa de sprites

Image
Capa de sprites renderizada.

El VDC contiene una memoria interna llamada Sprite Attribute Table Buffer donde se pueden definir hasta 64 sprites. Cada entrada de la tabla almacena la posición X/Y independiente, la paleta de colores, el índice de tile y la inversión H/V. Además, hay un atributo que permite combinar un sprite con otro.

Cada entrada tiene una longitud de 8 bytes, aunque se desperdicia algo de espacio debido a la granularidad de 16 bits.

Para colmo, la CPU no puede acceder a esta tabla, por lo que debe completarse en VRAM primero y luego transferirse al VDC mediante un canal DMA.

En cuanto a las limitaciones, solo puede haber hasta 16 sprites por línea de barrido. Por otro lado, se pueden configurar interrupciones para notificar al juego en caso de desbordamiento de sprites o colisión.

Resultado

Image
¡Tachán!

Hasta ahora hemos visto cómo el VDC realiza la mayor parte del trabajo pesado, pero la tarea final es en realidad delegada al Video Colour Encoder o 'VCE'. Este chip, identificado en la placa base como el HuC6260, tiene como función principal recibir flujos de datos de 9 bits del VDC, aplicar las paletas de colores y enviar el resultado a la televisión en forma de señal analógica.

Si has leído artículos anteriores, quizá estés familiarizado con la importancia del timing. Este caso no es una excepción: para evitar artefactos no deseados (como la 'nieve'), el VCE solo puede actualizarse durante una interrupción vertical.

Salida de vídeo

El codificador de vídeo proporciona salidas RGB (junto con Sync) y YPbPr, lo cual es ideal para su uso con un cable SCART o un cable de componentes, respectivamente. Esto tiene buena pinta...

Image
Puerto RF en el lado derecho de la PC Engine.

Image
El 'Turbo Booster' para el TurboGrafx-16 , conectado al puerto de expansión para suministrar vídeo compuesto y energía.

... Por desgracia, Hudson decidió instalar un modulador de RF como única forma de obtener vídeo de serie, así que al fin y al cabo no es tan bueno. Ahora bien, la PC Engine fue diseñada en los años 80, así que este enfoque garantizaba la compatibilidad con la mayoría de los televisores de la misma región.

Por el lado bueno, el puerto de expansión contiene pines que llevan vídeo RGB y múltiples tipos de sincronización, pero se necesita un accesorio externo para poder aprovecharlos.


Previous: 4. CPU

Next: 6. Audio


Rodrigo Copetti © 2026 RSS Feed

Ir a la edición moderna

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