Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
05/08/1991

< Minhas Memórias >
< Parte III: O Vídeo >


Vocês sabem como os micros da linha PC exibem informações no vídeo? É um processo interessante. Elas são codificadas e armazenadas em uma região da memória, que o chip controlador de vídeo está sempre "lendo" e mostrando no vídeo. Se um programa deseja exibir algo na tela, simplesmente o coloca ali. Essa região é chamada de "memória de vídeo", e se situa entre os endereços 640K até 768K. E quanto se "gasta" de memória para armazenar uma tela?

A tela mais simples, no modo texto, contém apenas caracteres. Que informações devem ser armazenadas para definir uma dessas telas? As mais importantes são o código de cada caractere e sua posição na tela. As demais são a cor do caractere, a cor do fundo sobre o qual ele é exibido, a intensidade e o fato dele estar ou não "piscando". Quantos bytes são necessários para guardar essas informações? Bem, o conjunto de caracteres da linha PC tem 256 elementos, logo um byte basta para armazenar o código. E todas as demais informações podem ser codificadas de modo a caberem em oito bits. Portanto, dois bytes são suficientes para caracterizar um caractere. Uma tela comum em modo texto apresenta 25 linhas de 80 caracteres. Para saber a posição de cada um na tela, basta observar a localização dos dois bytes correspondentes na memória de vídeo: os primeiros correspondem ao caractere do canto superior esquerdo, os seguintes ao que está a seu lado na primeira linha, e assim sucessivamente. Quantos bytes uma tela em modo texto ocupa na memória de vídeo? Ora, a dois bytes por caractere, basta multiplicar: 25 linhas x 80 caracteres x 2 bytes. O que dá 4000 bytes, menos de 4K. Tão pouco, que o DOS reservou espaço para armazenar na memória de vídeo quatro dessas telas, chamadas páginas de vídeo, e permite passar de uma para outra instantaneamente - recurso muito usado por programadores para exibir telas de ajuda. E todas essas quatro "páginas" ocupam menos de 16K dos 128K disponíveis.

Mostrar uma tela de texto é simples, pois o micro tem gravado em BIOS a "forma" de cada caractere. Mas a coisa se complica ao se exibir informações gráficas: as figuras têm que ser "desenhadas" ponto a ponto na tela. No jargão computerês, cada um desses pontos se chama "pixel", acrônimo de "picture cell", ou "célula de imagem" em inglês. E quantos pixels há em uma tela? Bem, isso depende do padrão de vídeo, responsável pela "definição" da imagem: quanto maior a definição, maior o número de pixels, e mais informação há que ser armazenada. E depende também do "modo de vídeo" que o programador escolheu para exibir a imagem.

O padrão de vídeo ainda mais comum no Brasil, o CGA, pode usar dois modos gráficos, além do modo texto. Desses, um é capaz de exibir 200 linhas de 320 pixels em quatro cores, e outro, também 200 linhas, mas de 640 pixels cada, em apenas duas cores. Ambos consomem a mesma quantidade de memória para uma tela. Vejamos quanto.

Que informações são necessárias para definir um pixel? Além da posição na tela, obtida de forma semelhante à usada pelo modo texto, apenas sua cor, pois não é preciso definir se o pixel está ou não "aceso": um pixel "apagado" corresponde à cor preta. Como quatro cores podem ser codificadas em dois bits, em um byte "cabem" quatro pixels. E uma tela de 320 x 200 pixels em quatro cores pode ser armazenada em 16000 bytes. Que é tudo que o padrão CGA precisa: aí ele armazena uma tela gráfica ou quatro telas texto. Menos de um oitavo dos 128K disponíveis. E c'est finí.

O padrão EGA tem uma definição muito maior. Além de todos os modos de vídeo usados pelo CGA, ele suporta outros, dos quais o de maior definição exibe 350 linhas de 640 pixels que podem usar 16 cores diferentes. Que podem ser codificadas em quatro bits. Logo, cada pixel usa meio byte. Multiplique: uma tela, nesse modo, gasta 112000 bytes, quase toda a memória de vídeo.

O padrão EGA, muito popular há alguns anos, praticamente caiu em desuso e foi substituído pelo VGA, que pode mostrar 480 linhas de 640 pixels em 16 cores, ou o super VGA, que chega a 780 linhas de 1024 pixels em 256 cores. Se vocês fizerem as contas, vão descobrir que este último necessita de quase 1 Mb de memória para armazenar uma única tela. Parece que algo está errado, não? Como "espremer" esse mega nos 128K da memória de vídeo? Bem, na placa controladora há um microprocessador capaz de fazer milagres: ele fica continuamente permutando blocos de memória armazenados nos chips RAM da placa, mostrando 128K de cada vez nos endereços da memória de vídeo, tão depressa que não se percebe nenhuma troca.

Todo esse processo é fascinante. Um exercício clássico para o programador iniciante é fazê-lo acessar diretamente a memória de vídeo e trocar um caractere ou atributo em uma dada posição de memória: a mudança aparece imediatamente na tela. Por outro lado, programar telas em modo gráfico levando em consideração todos os padrões de vídeo disponíveis pode ser um pequeno pesadelo. Mas que todo bom programa que usa telas gráficas deve encarar.

Pois é isso. Mas não apenas isso: memória é um tema tão extenso que muito falta ainda a ser abordado. O que faremos adiante.

Como? O mistério dos 64K desaparecidos? Ah, vocês ainda se lembram? Então, já que falamos de memória, vamos refrescar a dos que esqueceram: trata-se de uma frustração que acomete a maioria dos que trocaram um XT com vídeo CGA por um AT com vídeo EGA ou VGA. E encheram a placa mãe com megas e mais megas de memória. Apenas para descobrir que, no XT, podiam usar até 704K para programas, e no AT ficam restritos a 640K. Onde estão os 64K perdidos?

Bem, é que na verdade o DOS pode passar dos 640K para programas. Teoricamente, poderia chegar até 1Mb. Mas impõe uma condição inamovível: o campo de endereços tem que ser contínuo, sem interrupções, desde 0K até o final. E justamente no endereço 640K começa a memória de vídeo. Porém, e há sempre um porém, o padrão CGA usa apenas 16K de memória. Que não ocupa o trecho inicial da memória de vídeo, mas, sabe-se lá porquê, começa no endereço 736K.

Perceberam? Se seu micro usa vídeo CGA, existe um campo sem hiatos, desde 0K até 736K. Nele, pode-se "encaixar" onze segmentos de 64K, que vão até 704K. É claro que você vai precisar de ter em seus bancos de memória os chips correspondentes, e de um programa que obrigue o DOS a se espalhar por eles. Mas funciona.

Já os padrões EGA e VGA usam quase toda a memória de vídeo. Que começa, justamente, no endereço 640K. Resultado: com eles, não importa quanta memória você tenha na placa mãe, o DOS se restringe aos míseros 640K para programas. E temos conversado...

B. Piropo