# Hercules Graphics Card

La Hercules Graphics Card (HGC) (Tarjeta de Gráficos Hercules) es una tarjeta gráfica creada y fabricada por Hercules Computer Technology, Inc. que, por su popularidad, se convirtió en una resolución de pantalla extensamente soportada. Era común en los compatibles del IBM PC conectados con un monitor monocromático (verde, ámbar, o blanco). Soportaba un modo de texto de alta resolución y un solo modo de gráficos. En 1984 su precio era de 499 dólares, algo menos que el precio sugerido por el fabricante.
Su disposición de un modo de texto de alta calidad compatible con el Monochrome Display Adapter, conjuntamente con modo de gráficos de alta resolución (para ese tiempo) de 720 x 350, así como un precio agresivo, hizo a la tarjeta Hercules extraordinariamente popular en los primeros días del compatible IBM PC. La existencia de drivers/TSR de emulación de la CGA, que permitieron a usuarios de Hercules correr programas escritos para los modos gráficos estándar de la tarjeta CGA (aunque solamente en modo monocromático, sin color real), también pudo haber sido un factor contribuyente a su éxito, especialmente porque la programación para el modo de gráficos nativo de la tarjeta Hercules fue algo obstaculizado por el hecho de que no había ningún soporte de BIOS ni estandarización por parte de IBM (después de todo, el HGC era una tecnología de la competencia). Programas muy populares en el IBM PC como la hoja de cálculo Lotus 1-2-3 y Autodesk AutoCAD incluían sus propios drivers para manejar en DOS el modo gráfico de la Hercules.
Tiempo después de su principio, la tarjeta Hercules continúa siendo popular para aplicaciones especializadas, como algunos depuradores y programas CAD, porque puede ser usado para conectar un monitor secundario junto a otro adaptador gráfico (de color). Algunos programas como Autodesk AutoCAD o varios depuradores detectan la HGC y la usan como una pantalla adicional de datos mientras que corría la aplicación en la otra pantalla gráfica (por ejemplo un área de trabajo del CAD sería exhibida en la pantalla principal y una lista de comandos de dibujo sería mostrada en la pantalla monocromática manejada por la HGC). Esto es posible por ocupar direcciones diferentes de las de las tarjetas gráficas, y hasta la aparición del Accelerated Graphics Port no existió en el mundo del compatible IBM ninguna alternativa.

## Historia

Hercules fue desarrollado en 1982 por Van Suwannukul, fundador de Hercules Computer Technology. El sistema fue inicialmente creado por Suwannukul de modo de poder trabajar en su tesis doctoral en un IBM PC usando el alfabeto tailandés (su lengua materna).

## Conector

Conector DE-9. Usando una señal eléctrica TTL de 5V.
Frecuencia horizontal de 18,425 +/-0,5 kHz, frecuencia vertical 50 Hz.

## Especificaciones técnicas

Su modo de texto monocromático podía exhibir caracteres de texto de 80×25 y era compatible con el MDA. Como tal, desplegaba caracteres en una caja de 9x14 pixels, de los cuales 7×11 hacían el carácter en sí mismo (los otros píxels siendo usados para el espacio entre las columnas y las líneas de los caracteres). Esto ascendió a una exhibición de texto marcadamente más clara que el que podía ofrecer el adaptador CGA competidor. La resolución teórica total de este modo de texto era de 720×350 píxeles. A este número se llega al multiplicar el ancho del carácter de 9 píxeles por el número de columnas de texto en la pantalla (80): 9x80 = 720, y multiplicando el alto del carácter de 14 píxeles por el número de líneas de texto (25): 14x25 = 350. Sin embargo, en el modo de texto compatible con el MDA, estos píxeles no eran individualmente direccionables.
El modo de gráficos monocromático de la tarjeta de Hercules simplemente hacía a todos los píxeles directamente direccionables. Esto se traducía en una resolución no de 720×350 como pudiera esperarse, sino solamente de 720×348 píxeles (a 1 bit por pixel), porque por razones técnicas, la altura de la pantalla tenía que ser un múltiplo de cuatro.
La tarjeta Hercules soportó dos páginas gráficas, una en la dirección B0000h y una en la dirección B8000h. La segunda página se podía habilitar o deshabilitar por software. Cuando estaba deshabilitada, las direcciones usadas por la tarjeta no se solapaban con las usadas por adaptadores de color como el CGA o VGA. Esto hizo la operación dual de la pantalla posible simplemente a través de la instalación de una tarjeta Hercules al lado de, por ejemplo, un adaptador VGA.
Hercules también hizo una tarjeta compatible con la CGA, la Hercules Color Card, que podía coexistir con una HGC monocromática y todavía permitir que ambas páginas de gráficos fueran usadas. Ella detectaría cuando la segunda página de gráficos estaba seleccionada e inhabilitaría el acceso a su propia memoria, que de otra manera habría estado en las mismas direcciones de memoria.

## Programación

En modos de texto, la memoria aparece justo como una tarjeta MDA. La pantalla tiene 80x25 caracteres, así que hay 80 pares de código/attributo ASCII por línea (160 bytes por línea). Para encontrar la dirección en memoria de una localización dada de la pantalla, se puede usar la fórmula...
    Dirección = (0xb0000) + (fila * 160) + columna
En modo de gráficos, las líneas son intercaladas así que es un poco más difícil. Hay 8 píxeles por byte, 90 bytes por línea. Las líneas consecutivas de la pantalla son intercaladas por 4 líneas en la memoria, así que en memoria se ve como esto...
* Línea de pantalla #0 en B000:0000
* Línea de pantalla #1 en B000:2000
* Línea de pantalla #2 en B000:4000
* Línea de pantalla #3 en B000:6000
* Línea de pantalla #4 en B000:005A...
Aquí está la fórmula para encontrar la dirección de memoria que contiene un pixel dado...
    Memoria = (0xb8000) + ((y&3)<<13)+(y>>2)*90+(x>>3)
... y este código fijaría el pixel correcto en ese byte...
    OR el contenido con (128 > > (x& 7))

## Tarjetas posteriores

El estándar HGC fue ampliado por dos tarjetas posteriores:
* La Hercules Graphics Card Plus (junio de 1986) permitía fuentes definidos por el usuario que se podían usar en el modo de texto 80x25.
* La Hercules InColor Card (abril de 1987) incluyó capacidades de color similares al EGA, con 16 colores de una paleta de 64 colores. Conservó los mismos dos modos - texto de 80×25 y gráficos de 720×348.

## Emulación CGA

La emulación de CGA en una tarjeta Hércules se puede hacer casi en su totalidad a través de hardware, o por medio de software copiando todos los datos durante una interrupción regular. La emulación hardware normalmente era algo hecho por los programadores de una aplicación, como por ejemplo un juego, como una manera "quick and dirty" de añadir soporte Hércules. La emulación software fue realizado por utilidades de terceros como una manera de conseguir que programas gráficos con sólo soporte CGA trabajaran en una Hércules.
La emulación de hardware se logra habilitando la segunda página de vídeo de la Hércules, que aparecen en el segmento B800h como CGA, y a continuación hacerla la página visible. El Motorola 6845 de la Hercules podía entonces ser reprogramado para mostrar 80 columnas de datos (640 píxeles) en vez de 90 (720). Los datos eran escritos a continuación, al igual que lo haría en una CGA (es decir, la pantalla de vídeo se actualiza escribiendo en el segmento B800h) con sólo cambios menores debido al entrelazado diferente de la estructura de la memoria. La ventaja de este método era no causar pérdida de velocidad durante la emulación: Los datos no deben ser considerablemente reformados del original CGA, sólo entrelazado de manera diferente. La desventaja fue que la imagen aparecía verticalmente "aplastada", pues los datos de la CGA sólo utilizan 200 líneas de las 350 disponibles.
El software de emulación tenía que copiar desde la posición de memoria de vídeo CGA a la ubicación de la memoria en la Hércules. Sería volver a formatear los datos de CGA (320 o 640 x 200 píxeles) a la mayor resolución (720 x 348) de la Hércules. Debido al reformateo de datos mientras se copian para llenar completamente el espacio de 720x348 píxels, y la penalización de velocidad causada por este método, causaba la aparición de artefactos cuando no se podía completar la copia antes del comienzo del siguiente ciclo de pantalla.