Categories: Tecnología

Mantener y modificar

Hold-And-Modify, generalmente abreviado como HAM, es un modo de visualización de la computadora Commodore Amiga. Utiliza una técnica altamente inusual para expresar el color de los píxeles, lo que permite que aparezcan muchos más colores en la pantalla de lo que de otro modo sería posible. El modo HAM se usaba comúnmente para mostrar fotografías digitalizadas o marcos de video, arte de mapa de bits y ocasionalmente animación. En el momento del lanzamiento de Amiga en 1985, esta pantalla casi fotorrealista no tenía precedentes para una computadora doméstica y fue ampliamente utilizada para demostrar la capacidad gráfica de Amiga. Sin embargo, HAM tiene importantes limitaciones técnicas que evitan que se use como un modo de visualización de propósito general.

Fondo
El chipset Amiga original utiliza una pantalla plana con un espacio de color RGB de 12 bits que produce 4096 colores posibles.

El mapa de bits del campo de juego se mantuvo en una sección de la memoria principal conocida como chip RAM, que se compartió entre el sistema de visualización y la CPU principal. Debido a consideraciones de tiempo, el conjunto de chips solo tuvo tiempo para leer 6 bits por píxel antes de que fuera el momento de dibujar el siguiente píxel en la pantalla. Para reducir la cantidad de datos necesarios para describir una imagen y así encajar dentro de esta limitación, el sistema de visualización utilizó un sistema de color indexado con una paleta de colores.

El hardware contenía 32 registros que se podían establecer en cualquiera de los 4096 colores posibles, y la imagen podía acceder a cualquiera de estos 32 valores usando 5 bits por píxel. El sexto bit disponible fue utilizado por un modo de visualización conocido como Extra Half-Brite que redujo la luminosidad de ese píxel a la mitad, proporcionando una manera fácil de producir efectos de sombreado.

Modo de mantener y modificar
Cuando se diseñó por primera vez el conjunto de chips Amiga, operaba directamente en los valores de croma, matiz y luminancia de la señal NTSC, como era habitual en las computadoras hogareñas para las que se usaban los televisores. Esto condujo a la posibilidad de reducir en gran medida la cantidad de memoria necesaria para mostrar una imagen de un solo color, como el televisor en blanco y negro, estableciendo el valor del color al inicio de una línea de escaneo y luego hacer que los valores del mapa de bits modifiquen solo el valor de luminancia. Como las imágenes de televisión analógica solo pueden cambiar de negro a blanco en varios píxeles, no inmediatamente de una a la siguiente, cuatro píxeles serían suficientes para proporcionar una imagen confiable en «blanco y negro», reduciendo a la mitad la cantidad de memoria necesaria para almacenar una imagen.

Como el diseño de Amiga migró de una consola de juegos a una computadora doméstica, el chipset también se movió del modelo de color HSL al modelo de color RGB moderno. Para citar a Jay Miner:

» Mantener y modificar vino de un viaje para ver simuladores de vuelo en acción y tuve una especie de idea sobre un tipo primitivo de realidad virtual. NTSC en el chip significaba que podía mantener el matiz y cambiar la luminancia solo alterando cuatro bits. Cuando cambiamos a RGB dije que ya no era necesario porque no era útil y le pedí al chico del diseño de chip que se lo quitara. Volvió y dijo que esto dejaría un gran agujero en el medio del chip o tomaría un rediseño de tres meses y no podríamos hacer eso. No pensé que alguien lo usaría. Me equivoqué nuevamente, ya que eso realmente le ha dado al Amiga su ventaja en cuanto a la paleta de colores. »
Hold-And-Modify fue esencialmente una modificación del concepto original de solo luminancia, pero esta vez permite la modificación de uno de los tres componentes de color, rojo, verde o azul. HAM se puede considerar una técnica de compresión con pérdida; en el modo HAM6, el campo de juego está codificado en la mitad de la memoria que normalmente se requiere para un espacio de color de 12 bits. La mayor fidelidad global del color se logra a expensas de la resolución de croma horizontal. El espacio de color codificado HAM se ‘descomprime’ mediante el hardware de visualización en tiempo real a medida que se visualiza el búfer gráfico.

Uso
Cuando se lanzó el Amiga en 1985, el modo HAM ofrecía una ventaja significativa sobre los sistemas de la competencia. HAM permite mostrar todos los 4096 colores simultáneamente, aunque con las limitaciones antes mencionadas. Esta pantalla pseudo-fotorrealista no tenía precedentes para una computadora hogareña de la época y permitía la visualización de fotografías digitalizadas e imágenes renderizadas en 3D. En comparación, el EGA estándar de IBM PC permitía 16 colores en pantalla desde una paleta de 64. El sucesor de EGA, VGA lanzado en 1987 con su modo de juego insignia, Modo 13h, permitió 256 colores en pantalla de 262.144. El modo HAM se usaba con frecuencia para demostrar la capacidad de Amiga en las pantallas de la tienda y las presentaciones comerciales, ya que el hardware de la competencia no podía igualar la profundidad del color. Debido a las limitaciones descritas anteriormente, HAM se utilizó principalmente para la visualización de imágenes estáticas y los desarrolladores evitaron en gran medida su uso con juegos o aplicaciones que requieren animación.

Con la introducción de la Arquitectura Gráfica Avanzada, una imagen planar convencional podría tener una paleta de 256 colores, ofreciendo una fidelidad de color significativamente más alta. El modo HAM original con su resolución de color limitada se volvió mucho menos atractivo para los usuarios de una máquina AGA, aunque todavía se incluía para compatibilidad con versiones anteriores. El nuevo modo HAM8 era mucho menos útil para el conjunto de chips AGA que el modo HAM para el conjunto de chips original, ya que una paleta planar de 256 colores aumentaba enormemente las opciones para el artista sin sufrir los inconvenientes del modo HAM. Un modo planar rebanado bien programado podría ser más útil que HAM8. El propósito original de HAM, que era permitir más resolución de color a pesar del tamaño limitado del búfer de video y el limitado ancho de banda de la memoria, ya no era tan relevante.

Como las computadoras modernas son capaces de pantallas Truecolor de alta resolución, ya no es necesario utilizar técnicas de visualización como HAM. Los gráficos planares ahora también son obsoletos para la informática de propósito general, ya que el hardware de gráficos moderno tiene suficiente ancho de banda de memoria para usar píxeles empaquetados.

Limitaciones
El modo HAM impone restricciones sobre el valor de los píxeles adyacentes en cada línea horizontal del campo de juego. Para representar dos colores arbitrarios adyacentes, puede tomar hasta dos píxeles intermedios para cambiar al color deseado (si los componentes rojo, verde y azul deben ser todos modificados). En el peor de los casos, esto reduce la resolución de croma horizontal de 704 píxeles a tan solo 240 (para comparación, las tecnologías contemporáneas como VHS tenían una resolución de croma de 40 a 0,4 MHz). Este problema es particularmente notable en áreas de fuerte contraste (fuertes gradientes de imagen horizontales), donde puede aparecer un artefacto indeseable de múltiples tonos o «flecos». Se usaron varias técnicas de renderizado para minimizar el impacto de «franja» y las pantallas de HAM a menudo se diseñaron para incorporar degradados de color horizontales sutiles, evitando los bordes verticales y los contrastes.

Mostrar una imagen a todo color en modo HAM requiere un preprocesamiento cuidadoso. Debido a que HAM solo puede modificar uno de los componentes RGB a la vez, las transiciones de color rápidas a lo largo de una línea de escaneo se pueden lograr mejor utilizando uno de los registros de color preestablecidos para estas transiciones. Para renderizar una imagen arbitraria, un programador puede elegir primero examinar la imagen original para la más notable de estas transiciones y luego asignar esos colores a uno de los registros, una técnica conocida como paletas de adaptación. Sin embargo, con solo 16 registros disponibles en el modo HAM original, es común cierta pérdida en la fidelidad del color.

Además, el modo HAM no permite fácilmente la animación arbitraria de la pantalla. Por ejemplo, si una parte arbitraria del campo de juego debe moverse a otra posición en pantalla, los valores de Mantener y modificar pueden ser recalculados en todas las líneas de origen y destino para mostrar la imagen correctamente (una operación no muy adecuado para la animación). Específicamente, si el borde más a la izquierda del objeto animado contiene píxeles ‘modificar’, o si la imagen inmediatamente a la derecha del objeto contiene píxeles ‘modificar’, entonces los valores de Mantener y modificar deben ser recalculados. Un intento de mover un objeto alrededor de la pantalla (como con el uso del blitter) creará franjas notables en los bordes izquierdo y derecho de esa imagen, a menos que los gráficos estén especialmente diseñados para evitar esto. Para evitar volver a calcular los valores de Mantener y modificar y sortear las franjas, el programador debería asegurarse de que el píxel más a la izquierda de cada objeto brillante y el píxel más a la izquierda de cada línea de un campo de juego desplazable sea un píxel «establecido». La paleta debería diseñarse de modo que incorpore cada uno de esos píxeles de la izquierda. Alternativamente, una pantalla HAM puede ser animada generando valores de píxel a través de la generación de procedimientos, aunque esto generalmente es útil solo para imágenes sintéticas, por ejemplo, los efectos ‘arcoíris’ usados ​​en demostraciones.

Sin embargo, tenga en cuenta que Mantener y modificar solo se aplica a los píxeles del campo de juego. 128 píxeles de datos de sprites (en modo DMA) por scanline están todavía disponibles para su ubicación en la parte superior del campo de juego HAM.

Implementaciones
Modo chip original HAM (HAM6)
El modo HAM6, llamado así por los 6 bits de datos por píxel, se introdujo con el conjunto original de chips y se conservó en el conjunto de chips mejorado posterior y en la arquitectura avanzada de gráficos. HAM6 permite mostrar hasta 4096 colores simultáneamente a resoluciones de 320 × 200 a 360 × 576.

Related Post

La codificación HAM6 utiliza seis bits por píxel: dos bits para control y cuatro bits para datos. Si los dos bits de control se ponen a cero, los cuatro bits restantes se utilizan para indexar uno de los 16 registros de colores preestablecidos, que funcionan como un mapa de bits indexado normal. Los otros tres posibles patrones de bits de control indican que se debe usar el color del píxel anterior (a la izquierda) en la línea de exploración y los bits de datos en su lugar se deben usar para modificar el valor del componente rojo, verde o azul. En consecuencia, hay cuatro posibilidades:

Conjunto: utilice los 4 bits de datos para indexar un color de la paleta de 16 colores. Usa ese color para este pixel.
Modificar rojo: mantenga los componentes de color verde y azul del píxel anterior. Utilice los 4 bits de datos como el nuevo componente de color rojo de este píxel.
Modificar verde: mantenga los componentes de color rojo y azul del píxel anterior. Utilice los 4 bits de datos como el nuevo componente de color verde de este píxel.
Modificar azul: mantenga los componentes de color rojo y verde del píxel anterior. Utilice los 4 bits de datos como el nuevo componente de color azul de este píxel.
Un modo similar, HAM5, también está disponible, pero es bastante inútil. En HAM5, el sexto bit es siempre cero, por lo que solo se puede modificar el componente de color azul.

Modo HAM rebanado (SHAM)
El chipset original de Amiga incluía un chip de soporte conocido como el «Cobre» que manejaba interrupciones y otras tareas de temporización y limpieza independientemente de la CPU y el sistema de video. Usando Copper, era posible volver a llamar a la CPU para ejecutar tareas cortas mientras la pantalla de video manejaba la interrupción en blanco vertical u horizontal (HBI). Esto permitió a los programadores vincular el código de máquina a la pantalla sin causar artefactos visuales, lo que hace que muchos efectos de video sean mucho más simples de implementar.

Usando esta técnica, los programadores desarrollaron el modo HAM o SHAM rebanado, también conocido como HAM dinámico. SHAM usó un código de computadora que fue llamado en líneas de escaneo seleccionadas, o todas ellas, que cambiaron la paleta durante el HBI. Esto significaba que cada línea de escaneo podía tener su propio conjunto de 16 colores base. Esto hace que sea mucho más simple elegir la paleta, lo que ahora se puede hacer por línea en lugar de por imagen. El único inconveniente de este enfoque es que la imagen ya no se mantenía únicamente en la memoria RAM del chip, ya que el programa de control tenía que contener múltiples paletas, y había cierta complejidad para configurar el modo SHAM.

Esta técnica no se limitaba a HAM, y también se usaba ampliamente con los modos gráficos más convencionales de la máquina. Dynamic HiRes utiliza una técnica similar de cambio de paleta para producir 16 colores por línea en los modelos de alta resolución, mientras que HAM está limitada a baja resolución, pero permite tanto 16 colores indexados como modificaciones de los mismos.

La idea de SHAM quedó en desuso cuando se introdujo HAM8, ya que incluso una imagen HAM8 sin cortar tiene una resolución de color mucho mayor que una imagen HAM6 en rodajas. Sin embargo, SHAM sigue siendo el mejor modo HAM disponible en esas Amigas con el chipset original.

Modo HAM de Advanced Graphics Architecture (HAM8)
Con el lanzamiento de Advanced Graphics Architecture (AGA) en 1992, el modo HAM original se renombró «HAM6», y se introdujo un nuevo modo «HAM8» (el sufijo numerado representa los planos de bits utilizados por el modo HAM respectivo). Con AGA, en lugar de 4 bits por componente de color, el Amiga ahora tenía hasta 8 bits por componente de color, lo que da como resultado 16.777.216 colores posibles (espacio de color de 24 bits).

HAM8 funciona de la misma manera que HAM6, utilizando dos bits de «control» por píxel, pero con seis bits de datos por píxel en lugar de cuatro. La operación de ajuste selecciona de una paleta de 64 colores en lugar de 16. La operación de modificación modifica los seis bits más significativos del componente de color rojo, verde o azul: los dos bits menos significativos del color no pueden ser alterados por esta operación y permanecen según lo establecido por la operación de conjunto más reciente. En comparación con HAM6, HAM8 puede mostrar muchos más colores en pantalla. Se informó ampliamente que la cantidad máxima de colores en pantalla con HAM8 era de 262.144 colores (espacio de color RGB de 18 bits). De hecho, la cantidad máxima de colores únicos en pantalla puede ser mayor que 262.144, dependiendo de los dos bits menos significativos de cada componente de color en la paleta de colores 64. En teoría, todos los 16,7 millones de colores podrían mostrarse con una pantalla lo suficientemente grande y una paleta base adecuada, pero en la práctica las limitaciones para lograr una precisión total significan que los dos bits menos significativos generalmente se ignoran. En general, la profundidad de color HAM8 percibida es más o menos equivalente a una visualización de color alta.

Las resoluciones de visualización vertical para HAM8 son las mismas que para HAM6. La resolución horizontal puede ser de 320 (360 con overscan) como antes, duplicarse a 640 (720 con overscan) o incluso cuadruplicarse a 1280 píxeles (1440 con overscan). El chipset AGA también presentó resoluciones aún más altas para los modos de visualización planar tradicionales. El número total de píxeles en una imagen HAM8 no puede exceder 829,440 (1440 × 576) usando modos PAL pero puede exceder 1,310,720 (1280 × 1024) usando hardware de pantalla de terceros (Indivision AGA flicker-fixer).

Al igual que el modo HAM original, una pantalla HAM8 no puede mostrar ningún color arbitrario en ninguna posición arbitraria, ya que cada píxel depende de una paleta limitada o depende de hasta dos componentes de color del píxel anterior. Al igual que con el modo HAM original, los diseñadores también pueden elegir «cortar» la pantalla (ver a continuación) para eludir algunas de estas restricciones. Un modo HAM7 también está disponible pero no se usa ampliamente.

Emulación HAM
HAM es exclusivo de Amiga y sus chipsets distintos. Para permitir la representación directa de imágenes antiguas codificadas en formato HAM, se han desarrollado emuladores HAM basados ​​en software que no requieren el hardware de visualización original. Las versiones anteriores a la 4.0 de AmigaOS pueden usar el modo HAM en presencia del chipset Amiga nativo. AmigaOS 4.0 y superior, diseñado para hardware radicalmente diferente, proporciona emulación HAM para su uso en hardware moderno de gráficos gruesos. Los emuladores Amiga dedicados que se ejecutan en hardware no nativo pueden mostrar el modo HAM mediante la emulación del hardware de la pantalla. Sin embargo, dado que ninguna otra arquitectura de computadora utilizó la técnica HAM, ver una imagen HAM en cualquier otra arquitectura requiere una interpretación programática del archivo de imagen. La fiel decodificación basada en software producirá resultados idénticos, dejando de lado las variaciones en la fidelidad del color entre las configuraciones de visualización.

Sin embargo, si el objetivo es simplemente mostrar una imagen SHAM en una plataforma que no sea Amiga, los valores de color requeridos pueden precalcularse en función de las entradas de la paleta que se programan a través de la lista de cobre, independientemente de si la paleta se modifica en en el medio de una línea de exploración. Siempre es posible convertir de forma ascendente una imagen HAM o SHAM sin pérdida a una paleta de 32 bits.

Implementaciones de HAM de terceros
Un dispositivo producido por Black Belt conocido como HAM-E fue capaz de producir imágenes con profundidad de color HAM8 a baja resolución horizontal de un Amiga con un Chipset original.

El Amiga se configuraría para producir imágenes de alta resolución (640 píxeles de ancho, 720 con overscan). Esto requirió el uso de cuatro aviones de bits a 70 ns por píxel. Las primeras líneas de la información codificada de la imagen para configurar la unidad HAM-E. Luego, cada par de píxeles se codificó con información para la unidad HAM-E, que convirtió la información en un píxel de 140 ns (generando una imagen de 320 píxeles de ancho, o 360 con sobreexploración, a una profundidad de color de ocho planos de bits). La calidad de HAM-E era comparable a una imagen HAM8 de baja resolución. La técnica HAM-E aprovechó el hecho de que una imagen de alta resolución con cuatro planos de bits proporciona un tercio más de ancho de banda de memoria y, por lo tanto, un tercio más de datos, que una imagen de baja resolución con seis planos de bits.

Share