Fusion I: a evolução dos gráficos

Como e porque as coisas mudaram
O modelo original do PC não tinha gráfico de qualquer espécie. Sua controladora de vídeo era tão simples que controlava igualmente uma impressora (o que, para a época, fazia todo o sentido, já que vídeo e impressora eram os únicos dispositivos de saída do micrinho) e o padrão gráfico era o chamado MDA. Uma coisa tão antiga e tão fora de moda que, vejam vocês, para evitar imprecisões ao citar suas características, ao pesquisar na Internet a sigla “mda”, recebi mais de dez milhões de resultados que (pelo menos nas primeiras páginas) nada tinham a ver com o velho padrão de vídeo. Para consultar os dados que queria tive que entrar com “monochrome graphics display” por extenso, o nome completo do padrão. Que, como indica, usava tela monocromática (os monitores mostravam caracteres verdes ou âmbar) e apenas exibia texto, em 25 linhas de 80 caracteres cada. Veja, na Figura 1, obtida na página da IBM “The IBM PC debut“, o IBM PC, sua impressora matricial e sua tela texto.

Quem quisesse gráficos na tela do PC e, supremo luxo, gráficos coloridos, tinha que adquirir como opcional uma “placa CGA”, ou melhor, uma controladora de vídeo padrão “color graphics array“, capaz de exibi-los em esplendorosas 16 cores (atenção: dezesseis mesmo, não 16 milhões, como as propiciadas pelas placas modernas) e com uma resolução de 200 x 320 pixels (mas quem se contentasse com apenas quatro cores poderia aumentar a resolução para 640 x 200). Veja na Figura 2 uma tela destas, no esplendor de todas as suas 16 cores. E, senhores, observem-na com o devido respeito. Favor conter o riso. Mesmo porque a placa era cara.
Cara, capaz de exibir gráficos, mas ainda sem um coprocessador gráfico.
Sim, porque a controladora CGA, além de conter a memória de vídeo (16 KB, um absurdo para a época) apenas fazia a interface entre o processador e o monitor, convertendo os sinais digitais gerados pela máquina em analógicos, interpretados pelo velho tubo de imagem. Quem fazia todo o trabalho braçal de “desenhar” os gráficos e determinar a cor de cada pixel era o próprio 8088, o microprocessador do PC.
Quer dizer: o processamento de dados e o processamento gráfico eram feitos juntos no interior do próprio microprocessador, ou UCP, fundidos em uma única unidade de processamento.
Ocorre que ao longo de suas três décadas de vida o velho PC deixou de ser uma maquineta destinada a “fazer contas” e, vá lá, escrever textos, para se transformar em um monstro que “toca” música, exibe fotos em alta definição e “passa” filmes baixados da Internet em tempo real.
Complicou.
Mas complicou agora, porque no tempo do velho PC as coisas eram simples. A imagem da tela era gerada pela UCP (e por “imagem da tela” não me refiro necessariamente a gráficos: o “desenho” de cada caractere e sua posição em uma tela de texto também não deixa de formar uma imagem), suas características, na forma de dados digitalizados, eram transportadas para a controladora de vídeo através do barramento de entrada / saída (E/S), a controladora os convertia em sinais analógicos e os enviava ao monitor, que se encarregava de projetar a imagem na tela.
Tudo era muito simples porque os dados eram poucos. Para “produzir” a imagem de uma tela com 25 linhas de 80 caracteres cada, bastava alinhar sucessivamente os códigos (de um byte cada) de cada caractere (25 x 80 = 2.000) e juntar seus “atributos” (uma dentre as 16 cores disponíveis, além de características como “piscante”, sublinhado, intenso ou reverso) que, juntos, poderiam ser expressos também em um byte. Então, para formar uma tela inteira, usava-se apenas quatro mil bytes, dois por caractere: um para seu código, outro para seus atributos. E como a tela deveria ser renovada sessenta vezes por segundo para não causar a impressão de imagem “tremida”, bastava enviar 60 x 4.000 = 240.000 bytes/s para a controladora. Mais ou menos 240 KB/s.
Se a tela fosse gráfica a coisa complicava um pouco, mas não muito: como o padrão era o CGA, cujas imagens eram formadas por 200 linhas de 320 pontos, e como cada ponto podia exibir 16 cores (cujo código pode ser expresso em apenas quatro bits, ou meio byte), para formar cada tela eram necessários 200 x 320 x 0,5 = 32.000 bytes. Enviá-los para a controladora 60 vezes por segundo exigiria um tráfego pelo barramento de dados de 32.000 x 60 = 1.920.000 bytes/s, que corresponde a menos de 2 MB/s. Veja uma destas telas na Figura 2.

E como esse fluxo de dados se movia? Ora, através do barramento de E/S original do PC, de oito linhas e operando na mesma frequência da UCP, cerca de 5 MHz. Como oito linhas transportam um byte em cada ciclo de operação e o barramento opera a 5 MHz (cinco milhões de ciclos por segundo), sua capacidade de transportar dados chega a 5 MB/s. Basta comparar os 5 MB/s que o barramento pode transportar com os 2 MB/s que uma tela gráfica padrão CGA do velho PC exigia para perceber que o barramento trabalhava com folga.
Agora vamos adiante. E nem é preciso ir muito adiante, só dez anos, até o início dos anos noventa do século passado, quando as interfaces gráficas como Windows passaram a dominar o mercado e acabaram-se as telas texto. Pior: não apenas as telas passaram a ser gráficas como, para que se pudesse distinguir os ícones e os caracteres, a definição tinha que ser muito maior. E apareceram os padrões VGA e SVGA (“video graphics array” e “super video graphics array“), este último com suas telas de 768 linhas de 1.024 pontos, cada um deles podendo assumir até 65.526 (64K) cores diferentes, o chamado padrão “high color“.
Para exibir este número de cores, cada ponto da tela requer dois bytes. O total de bytes para formar uma tela SVGA é, portanto, 768 x 1024 x 2 = 1.572.864. Que devem ser enviados sessenta vezes por segundo através do barramento. Basta fazer as contas para concluir que isto demandaria um fluxo de 90 MB/s, muito acima da capacidade de transporte do barramento do PC. E olhe que eu nem mencionei a possibilidade de exprimir cores usando quatro bytes por pontos (o chamado padrão “true color“)
