# CGA

A CGA (Color Graphics Adapter), introduzida em 1981, foi a primeira placa de vídeo colorida da IBM e o primeiro padrão de vídeo colorido para o IBM PC.
A placa de vídeo padrão CGA da IBM era equipada com 16 kbytes de memória de vídeo. A placa CGA permitia diversos modos gráficos e modos texto com resoluções de até 640x200 com até 2 cores (embora não nessa resolução). Comumente considerava-se que a CGA era capaz de exibir um máximo de 4 cores numa resolução de 320x200; entretanto, havia diversas formas (algumas oficiais, outras não) de exibir mais cores.

## A paleta de cores CGA

Paleta CGA completa de 16 cores (valores hexa adaptados da especificação do MC6845) :
| 0 — preto #000000 | 8 — cinza (escuro) #545454 |
| 1 — azul #0000A8 | 9 — azul claro #5454FE |
| 2 — verde #00A800 | 10 — verde claro #54FE54 |
| 3 — ciano #00A8A8 | 11 — ciano claro #54FEFE |
| 4 — vermelho #A80000 | 12 — vermelho claro #FE5454 |
| 5 — magenta #A800A8 | 13 — magenta claro #FE54FE |
| 6 — marrom (laranja) #A85400 | 14 — amarelo #FEFE54 |
| 7 — cinza claro #A8A8A8 | 15 — branco #FEFEFE |

## Modos texto padrão

A CGA oferecia dois modos de texto:
* 40×25 caracteres em até 16 cores. Cada caractere era um padrão de 8x8 pontos. A resolução efetiva nesse modo era de 320x200 pixels (aspecto 5:6), apesar de os pixels individuais não poderem ser endereçados independentemente. A escolha de padrões de desenho para cada posição era limitada a uma das 256 opções de caracteres disponíveis. (Os caracteres de 129 a 255 podiam ser redefinidos pelo usuário, mas só seriam detectados pela BIOS nos modos gráficos. Sendo assim, as fontes eram fixas no modo texto e não podiam ser modificadas.) Este modo permitia que cada caractere tivesse cores de fundo e de face escolhidas livremente dentre toda a paleta CGA (veja a tabela) — i.e. texto vermelho sobre fundo amarelo para um caractere, preto sobre branco para outro e ciano sobre cinza para outro e assim por diante. A placa tinha memória suficiente para 8 páginas diferentes de texto.
* 80×25 caracteres em até 16 cores. Cada caractere era também um padrão de 8x8 pixels com aspecto de 5:6. A resolução efetiva nesse modo era 640x200 pixels. Novamente, os pixels não podiam ser independentemente endereçados. A placa tinha memória RAM de vídeo suficiente para 4 páginas de texto..

## Modos gráficos padrão

| | Paleta fixa de 4 cores CGA #1 | Paleta fixa de 4 cores CGA #1 |
| | padrão | 5 — magenta |
| | 3 — ciano | 7 — cinza claro |
| Paleta fixa de 4 cores CGA #2 ||
| | padrão | 4 — vermelho |
| | 2 — verde | 6 — marrom |
A CGA oferecia dois modos gráficos comumente utilizados:
* 320×200 pixels, como no modo texto de 40 colunas. No modo gráfico, entretanto, cada pixel podia ser endereçado independentemente. Entretanto, apenas 4 cores poderiam ser utilizados ao mesmo tempo e estas não podiam ser livremente escolhidas a partir da paleta CGA — havia apenas duas paletas oficiais para esse modo:
** Magenta, ciano, branco
** Vermelho, verde, marrom e cor de fundo (preto por padrão).
    O aspecto de 5:6 precisava ser considerado quando se desenhavam figuras geométricas grandes na tela.
* 640×200 pixels, como no modo texto de 80 colunas. Todos os pixels podiam ser endereçados independentemente. Este modo era monocromático, oferecendo apenas as cores branco e preto (embora isso pudesse ser mudado), com um aspecto de 5:12.

## Os modos de vídeo composto

Pouco conhecido era o modo gráfico adicional com resolução 160x200 (com aspecto de 1.67:1) que podia utilizar 16 cores (não exatamente a mesma tabela de 16 cores CGA, mas uma similar). Este modo era raramente utilizado. Não há suporte em BIOS para o programador menos experiente. Apenas alguns softwares utilizavam este modo gráfico, a maioria deles jogos. Em placas que não suportavam este modo(incluindo a ATI Graphics Solution), ele era idêntico ao modo gráfico 640x200.

## Outros modos gráficos e truques

Existiam diversas características (oficiais e não-oficiais) que permitiam se atingir imagens melhores num monitor.
* No modo gráfico 320x200, a cor de fundo, que por padrão era preta na inicialização do modo, podia ser mudada para qualquer uma das outras 15 cores da paleta CGA. Isso permitia alguns efeitos como o piscar de um relâmpago, pois era possível mudar a cor de todo o fundo da tela sem ter que redesenhá-la.
* No modo gráfico 640x200, ambas as cores podiam ser mudadas; por exemplo, alguém podia ter azul e laranja em vez de preto e branco.
* A cor da borda (mostrada fora da área regular da tela), usualmente preta, podia ser mudada para qualquer uma das outras 15 cores.
* Era possível conseguir uma paleta de 4 cores adicional ligando-se o bit monochrome (monocromático) enquanto se estivesse no modo gráfico 320x200. Isto mudava a paleta para vermelho, ciano, branco e a cor de fundo.
* Com um bom controle de temporização era possível mudar de paleta enquanto a tela estava sendo desenhada, o que permitia que 2 ou mais paletas de 4 cores fossem combinadas.
* Cores adicionais podiam ser aproximadas utilizando-se a técnica de dithering, embora a baixa resolução tornasse muito aparente o uso desta técnica.
Alguns desses truques podiam ser combinados entre si. Pode-se encontrar exemplos em diversos jogos:
* California Games
* GCA tweaked

### O modo 160×100 de 16 cores

Tecnicamente, este não era um modo gráfico mas sim um truque utilizando o modo texto 80x25. O registrador de altura de caracteres era modificado para que apenas as 2 linhas superiores de cada caractere (8 pixels cada) fossem desenhadas, quadruplicando assim a quantidade de linhas de texto na tela de 25 para 100.
O caractere número 221 na tabela ASCII estendida consiste em um retângulo que ocupa toda a metade da esquerda do espaço reservado a um caractere. (O caractere 222 é o extremo oposto ocupando toda a metade da direita.)

## Bugs e errata

O bug de hardware mais comum da CGA era a neve no modo texto 80x25. A memória RAM de vídeo na placa CGA IBM original não era dual-ported, ou seja, não era possível efetuar operações de leitura e de escrita simultaneamente. Sendo assim, pixels aleatórios eram exibidos na tela sempre que a CPU escrevesse na memória de vídeo ao mesmo tempo que esta estivesse sendo lida pelo hardware de display. Este bug foi corrigido na maioria de clones de terceiros, mas ainda existiu em alguns modelos (como o adaptador de vídeo AT&T PC 6300).