Modo de texto VGA - VGA text mode
O modo de texto VGA foi introduzido em 1987 pela IBM como parte do padrão VGA para seus computadores IBM PS / 2 . Seu uso em compatíveis com IBM PC foi generalizado durante a década de 1990 e persiste até hoje para alguns aplicativos em computadores modernos. As principais características do modo de texto VGA são caracteres coloridos ( paleta de cores programáveis com 16 cores ) e seu fundo, piscando, várias formas do cursor (bloco / sublinhado / estático oculto / piscando) e fontes carregáveis (com vários tamanhos de glifos). O console do Linux tradicionalmente usa modos de texto VGA de hardware, e o ambiente do console Win32 tem a capacidade de mudar a tela para o modo de texto em alguns tamanhos de janela de texto.
Arranjo de dados
Buffer de texto
Cada caractere da tela é representado por dois bytes alinhados como uma palavra de 16 bits acessível pela CPU em uma única operação. O byte inferior, ou caractere, é o ponto de código real para o conjunto de caracteres atual e o byte superior, ou atributo, é um campo de bits usado para selecionar vários atributos de vídeo, como cor, piscar, conjunto de caracteres e assim por diante. Este esquema de pares de bytes está entre os recursos que o VGA herdou do EGA , CGA e, em última análise, do MDA .
Atributo | Personagem | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Piscar | Cor de fundo | Cor do primeiro plano | Ponto de código |
- ^ Dependendo da configuração do modo, o bit de atributo 7 pode ser o bit intermitente ou o quarto bit da cor de fundo (que permite que todas as 16 cores sejam usadas como cores de fundo).
- ^ O atributo bit 3 (intensidade do primeiro plano) também seleciona entre as fontes A e B (vejaabaixo). Portanto, se essas fontes não forem iguais, esse bit é simultaneamente um bit de ponto de código adicional.
- ^ O bit de atributo 0 também ativa o sublinhado, se alguns outros bits de atributo forem definidos como zero (consulte aseguir).
As cores são atribuídas da mesma forma que nos modos gráficos de cores indexadas de 4 bits (consulte a paleta de cores VGA ). Os modos VGA não precisam dos atributos reverso e brilhante do MDA porque as cores do primeiro plano e do plano de fundo podem ser definidas explicitamente.
Sublinhado
O hardware VGA tem a capacidade de habilitar um sublinhado em qualquer caractere que tenha o bit 0 de atributo definido. No entanto, como este é um recurso compatível com o MDA, os bits de atributo não usados pelo MDA devem ser definidos como zero ou o sublinhado não será mostrado. Isso significa que apenas os bits 3 (intensidade) e 7 (intermitente) podem ser definidos simultaneamente com o bit 0 (sublinhado). Com a paleta VGA padrão, definir o bit 0 para ativar o sublinhado também alterará a cor do texto para azul. Isso significa que o texto em apenas duas cores pode ser sublinhado (5555FF e 0000AA com a paleta padrão).
Apesar de tudo isso, o sublinhado não é normalmente visível nos modos de cores, já que a localização do sublinhado é padronizada para uma linha de varredura abaixo do glifo do caractere, tornando-o invisível. Se a localização do sublinhado for definida como uma linha de varredura visível (como é por padrão ao alternar para um modo de texto monocromático compatível com MDA), o sublinhado aparecerá.
Fontes
As fontes de tela usadas em EGA e VGA são fontes raster monoespaçadas contendo 256 glifos. Todos os glifos em uma fonte têm o mesmo tamanho, mas esse tamanho pode ser alterado. Normalmente, os glifos têm 8 pontos de largura e 8-16 pontos de altura, no entanto, a altura pode ser qualquer valor até um máximo de 32. Cada linha de um glifo é codificada em um byte de 8 bits , com bits altos à esquerda do glifo e bits baixos à direita. Junto com várias fontes dependentes de hardware armazenadas na ROM do adaptador , o modo de texto oferece 8 fontes carregáveis. Dois ponteiros de fonte ativos (fonte A e fonte B) selecionam duas das fontes disponíveis, embora geralmente apontem para a mesma fonte. Quando cada um deles aponta para fontes diferentes, o bit de atributo 3 (veja acima ) atua como um bit de seleção de fonte em vez de um bit de cor de primeiro plano. Em hardware VGA real, isso substitui o uso do bit para seleção de cores, mas em muitos clones e emuladores, a seleção de cores permanece - o que significa que uma fonte é exibida como intensidade normal e a outra como alta intensidade. Esse erro pode ser superado alterando os registros da paleta para conter duas cópias de uma paleta de 8 cores.
Existem modos com uma largura de caixa de caracteres de 9 pontos (por exemplo, o modo padrão 80 × 25), no entanto, a 9ª coluna é usada para espaçamento entre os caracteres, portanto, o conteúdo não pode ser alterado. Está sempre em branco e desenhado com a cor de fundo atual. Uma exceção a isso é no modo Line Graphics Enable , que faz com que os pontos de código 0x C0 a 0xDF inclusive tenham a 8ª coluna repetida como a 9ª. Esses pontos de código cobrem os caracteres de desenho de caixa que devem se estender até o lado direito da caixa de glifo. Por esse motivo, deve-se evitar colocar caracteres semelhantes a letras nos pontos de código 0xC0–0xDF. Os caracteres de desenho de caixa de 0xB0 a 0xBF não são estendidos, pois não apontam para a direita e, portanto, não precisam ser estendidos.
Cursor
A forma do cursor é restrita a um retângulo com a largura total da caixa do caractere e preenchido com a cor de primeiro plano do caractere na localização atual do cursor. Sua altura e posição podem ser definidas em qualquer lugar dentro de uma caixa de caracteres ;. O EGA e muitos clones VGA permitiam um cursor de caixa dividida (aparecendo como dois retângulos, um na parte superior da caixa de caracteres e um na parte inferior), definindo o final do cursor antes do início, no entanto, se isso for feito em o VGA original, o cursor fica completamente oculto. O padrão VGA não fornece uma maneira de alterar a taxa de intermitência, embora as soluções alternativas comuns envolvam ocultar o cursor e usar um glifo de caractere normal para fornecer o chamado cursor de software.
Um cursor do mouse na TUI (quando implementado) geralmente não é a mesma coisa que um cursor de hardware, mas um retângulo móvel com fundo alterado ou um glifo especial.
Algumas interfaces baseadas em texto, como a do Impulse Tracker , foram ainda maiores para fornecer um cursor do mouse mais suave e com aparência mais gráfica. Isso foi feito constantemente regenerando glifos de caracteres em tempo real de acordo com a posição do cursor na tela.
Métodos de acesso
Geralmente, há duas maneiras de acessar o modo de texto VGA para um aplicativo: por meio da interface do BIOS de vídeo ou acessando diretamente a RAM de vídeo e as portas de E / S. O último método é consideravelmente mais rápido e permite uma leitura rápida do buffer de texto, razão pela qual é preferido para programas TUI avançados.
O buffer de texto VGA está localizado no endereço de memória física 0xB8000. Como esse endereço é geralmente usado por processos x86 de 16 bits operando em modo real, ele também é a primeira metade do segmento de memória 0xB800. Os dados do buffer de texto podem ser lidos e gravados, e operações bit a bit podem ser aplicadas. Uma parte da memória do buffer de texto acima do escopo do modo atual está acessível, mas não é mostrada.
Os mesmos endereços físicos são usados no modo protegido . Os aplicativos podem ter essa parte da memória mapeada para seu espaço de endereço ou acessá-la por meio do sistema operacional . Quando um aplicativo (em um sistema operacional multitarefa moderno ) não tem controle sobre o console , ele acessa uma parte da RAM do sistema em vez do buffer de texto real.
Para computadores na década de 1980, a manipulação muito rápida do buffer de texto, com o hardware gerando os pixels individuais tão rápido quanto eles podiam ser exibidos, era extremamente útil para uma IU rápida. Mesmo em hardware relativamente moderno, a sobrecarga da emulação de modo de texto por meio dos modos APA (gráficos) de hardware (em que o programa gera pixels individuais e os armazena no buffer de vídeo) pode ser perceptível.
Modos e tempos
Sinal de vídeo
Do lado do monitor, não há diferença no sinal de entrada em um modo de texto e um modo APA do mesmo tamanho. Um sinal de modo de texto podem ter os mesmos horários como VESA modos padrão. Os mesmos registros são usados no lado do adaptador para configurar esses parâmetros em um modo de texto como nos modos APA. O sinal de saída do modo texto é essencialmente o mesmo que nos modos gráficos, mas sua fonte é um buffer de texto e gerador de caracteres, não um framebuffer como no APA.
Modos de texto comuns para PC
Dependendo do adaptador gráfico usado, uma variedade de modos de texto estão disponíveis em computadores compatíveis com IBM PC . Eles estão listados na tabela abaixo:
Modo (s) (decimal) |
Modo (s) (hex) |
Modelo | Res. De texto (L × A) |
Caracteres. Tamanho | Graphics res. | Cores / modelo de memória |
Adaptadores |
---|---|---|---|---|---|---|---|
7 | 0007h | Texto VGA | 80 × 25 | 9 × 14 | 720 × 350 | 2 (mono) / MTEXT |
MDA , Hercules |
6 | 0006h | VGA G | 80 × 25 | 8 × 8 | 640 × 200 | 2 (mono) / CGA |
Hercules, CGA, PCjr , EGA, MCGA |
0, 1 | 0000h, 0001h | Texto VGA | 40 × 25 | 8 × 8 | 320 × 200 | 16 / CTEXT |
CGA , EGA |
2 | 0002h | Texto VGA | 80 × 25 | 8 × 8 | 640 × 200 | 16 (cinza) / CTEXT |
CGA, EGA |
2, 3 | 0002h, 0003h | Texto VGA | 80 × 25 | 9 × 16 | 720 × 400 | 16 / CTEXT |
CGA, EGA |
16 | 0010h | VGA G | 80 × 25 | 8 × 14 | 640 × 350 | 4 / PL4, 16 / PL16 | 64k EGA , 256k EGA, VGA |
17 | 0011h | VGA G | 80 × 30 | 8 × 16 | 640 × 480 | 2 (mono) / PL1 |
VGA, MCGA, ATI EGA, ATI VIP |
23, 88 | 0017h, 0058h | Texto VGA | 80 × 43 | 8 × 8 | 640 × 350, 640 × 348 | 16 / CTEXT |
NEL Electronics BIOS, EGA |
102 | 0066h | Texto VESA, VGA G, Vídeo 7 G | 80 × 50 | 8 × 8 | 640 × 400 | 16 / CTEXT, 256K / LINEAR, 256 / LINEAR8 | Vídeo 7 V-RAM VGA, WD90C, Diamond Speedstar 24X |
38, 67, 82, 264 | 0026h, 0043h, 0052h, 0108h | Vídeo7 Texto, VGA G | 80 × 60 | 8 × 8 | 640 × 480 | 16 / CTEXT, 256K / LINEAR | Tseng Labs EVA, Tseng ET3000 / 4000, VEGA VGA, Trident TVGA 8800/8900, Video7 V-RAM VGA, Super VGA compatível com VESA |
35, 20, 23, 27, 39, 65, 2369, 265 | 0023h, 0014h, 0017h, 001Bh, 0027h, 0041h, 0941h, 0109h | Texto VESA, VGA G | 132 × 25 | 8 × 14, 9 × 14, 8 × 16, 8 × 8 | 1056 × 350, 1188 × 350, 1056 × 400, 1056 × 200 | 2 (mono) / MTEXT, 4 (cinza) / TEXT, 16 / CTEXT, 256K / LINEAR | Tseng ET3000, Tseng ET4000, ATI EGA / VGA Wonder, Cirrus CL-GD5420 / 5422/5426, Super VGA compatível com VESA |
29, 66, 84, 86, 266 | 001Dh, 0042h, 0054h, 0056h, 010Ah | Texto VESA, VGA G | 132 × 43 | 9 × 11, 8 × 9, 9 × 9 | 1188 × 473, 1056 × 387, 1188 × 387 | 16 / CTEXT, 256K / LINEAR | Super VGA compatível com VESA |
34, 51, 99, 2370 | 0022h, 0033h, 0063h, 0942h | Texto VESA | 132 × 44 | 8 × 8, 9 × 8 | 1056 × 352, 1188 × 352 | 16 / CTEXT |
Tseng Labs EVA, ATI EGA Wonder, ATI VIP, Genoa SuperEGA |
81, 97, 105, 267 | 0051h, 0061h, 0069h, 010Bh | Texto VESA | 132 × 50 | 8 × 8 | 1056 × 400 | 16 / CTEXT |
MORSE VGA, Cirrus 5320, WD90C, Super VGA compatível com VESA |
33, 82, 30, 268 | 0021h, 0052h, 001Eh, 010Ch | Texto VESA | 132 × 60 | 8 × 8, 9 × 8 | 1056 × 480, 1188 × 480 | 16 / CTEXT |
Tseng ET4000, MORSE VGA, Realtek RTVGA, Super VGA compatível com VESA |
47 | 002Fh | Vídeo7 Texto, VGA G | 160 × 50 | 8 × 8,. | 1280 × 400, 720 × 512 | 16 / CTEXT, 256 / LINEAR8 | Ahead B (Wizard / 3270), VEGA VGA, Gênova |
68.2372 | 0044h, 0944h | Video7 Text | 100 × 60 | 8 × 8 | 800 × 480 | 16 / CTEXT |
Vídeo7 V-RAM VGA, VEGA VGA, Tatung VGA |
As placas VGA e compatíveis suportam os modos MDA, CGA e EGA. Todos os modos coloridos têm o mesmo design de atributos de texto. Os modos MDA têm alguns recursos específicos (veja acima ) - um texto pode ser enfatizado com atributos de brilho, sublinhado, reverso e piscante.
O modo de texto mais comum usado em ambientes DOS e consoles iniciais do Windows é o padrão de 80 colunas por 25 linhas, ou 80 × 25 , com 16 cores e caracteres grandes de 8 × 16 pixels. As placas VGA sempre têm uma fonte interna desse tamanho, enquanto outros tamanhos podem exigir o download de uma fonte de tamanho diferente. Este modo estava disponível em praticamente todos os computadores pessoais IBM e compatíveis.
O kernel Linux 2.6 e posterior assume modos de 0000h a 00FFh como padrão (hexadecimal), se o BIOS VGA suportar, e ele os entende como aumentados em 0x0100. O mesmo para os modos BIOS VESA de 0100h a 07FFh (o Linux aumenta em 0x0100). Os modos de 0900h a 09FFh são modos especiais Video7, (Normalmente 0940h = 80 × 43, 0941h = 132 × 25, 0942h = 132 × 44, 0943h = 80 × 60, 0944h = 100 × 60, 0945h = 132 × 28 para o padrão BIOS Video7 ). O Linux 2.x permite verificar as resoluções de vídeo suportadas pelo argumento do kernel "vga = ask" ou "vga = <MODE_NUMBER>".
As versões posteriores do Linux permitem especificar a resolução por modos de 1000h a 7FFFh . O código tem a forma "0xHHWW" em que HH é um número de linhas e WW é um número de colunas. Por exemplo, 1950h (0x1950) corresponde a um modo 80 × 25, 2B84h (0x2b84) a 132 × 43 etc. (Linux 3.xe posterior permite definir a resolução por "vídeo = <conn>: <xres> x <yres> ", mas é para o modo gráfico de buffer de quadro de vídeo .)
Existem dois outros modos de texto VGA, 80 × 40 e 80 × 50 , mas são menos comuns. O Windows NT 4.0 exibiu suas mensagens de sistema durante o processo de inicialização no modo de texto 80 × 50.
Os tamanhos dos caracteres e as resoluções gráficas para os modos de texto Super VGA compatíveis com VESA estendido dependem do fabricante . Alguns cartões (por exemplo, S3 ) suportavam modos de texto personalizados muito grandes, como 132 × 43 e 132 × 25. Como nos modos gráficos, os adaptadores gráficos dos anos 2000 geralmente são capazes de configurar um modo de texto de tamanho arbitrário (em limites razoáveis) em vez de escolher seus parâmetros em alguma lista.
SVGATextMode
Em sistemas Linux e DOS com as chamadas placas SVGA, um programa chamado SVGATextMode pode ser usado para configurar modos de texto de melhor aparência do que os padrões EGA e VGA. Isso é particularmente útil para monitores grandes (≥ 17 "), onde a resolução de 720 × 400 pixels do modo de texto VGA normal de 80 × 25 é muito menor do que um modo gráfico típico seria. SVGATextMode permite a configuração do clock de pixel e uma taxa de atualização mais alta , tamanho de fonte maior, tamanho do cursor, etc., e permite um melhor aproveitamento do potencial de uma placa de vídeo e monitor. Em sistemas não Windows, o uso de SVGATextMode (ou opções alternativas como o framebuffer do Linux ) para obter um texto nítido é crítico para monitores LCD de 1280 × 1024 (ou resolução superior) porque nenhum dos modos de texto padrão denominados se ajusta a esse tamanho de matriz. SVGATextMode também permite um ajuste fino de temporizações de sinal de vídeo.
Apesar do nome deste programa, apenas alguns de seus modos suportados estão em conformidade com os padrões SVGA (ou seja, VESA).
Restrições gerais
O modo de texto VGA tem algumas limitações impostas pelo hardware. Como eles são muito restritivos para aplicativos modernos (pós 2000), o modo de texto de hardware em adaptadores de vídeo compatíveis com VGA tem apenas um uso limitado.
Parâmetro | VGA original | Adaptadores de vídeo modernos | Observações |
---|---|---|---|
Largura da célula de caractere (glifo) |
8 ou 9 pontos | ≤ 9 pontos | Nem todo hardware oferece suporte a glifos mais estreitos do que 8 pontos. |
Altura da célula do caractere (glifo) |
≤ 32 pontos | ||
Número de células de caracteres | Pelo menos 4.000 (alcançado em 80 × 50) |
≤ 16.384 = 2 14 (limitações de endereçamento de memória) |
Um adaptador moderno, se suportar modos não padrão, pode produzir uma tela de texto razoavelmente densa, mesmo em um monitor grande. |
Largura nas células de caracteres ( caracteres por linha ) |
Pelo menos 80 |
≤ 256 (?) | |
Altura nas células de caracteres (número de linhas) |
Pelo menos 50 (alcançado em 80 × 50) |
||
Tamanho da página de código (número de glifos diferentes exibidos simultaneamente) |
≤ 512 = 2 9 (se a fonte A ≠ fonte B) |
Mesmo 512 é insuficiente para suporte Unicode abrangente . | |
≤ 256 = 2 8 (se fonte A = fonte B) |
|||
Número de cores |
primeiro plano: 16 * fundo: 8 ou 16 ** |
16 de cores escolhidas arbitrariamente , não fixas. |
* 8 cores podem ser usadas pela fonte A e outras 8 cores pela fonte B; portanto, se a fonte A ≠ fonte B (modo de 512 caracteres), a paleta deve ser dividida pela metade e um texto pode efetivamente usar apenas 8 cores.
** Normalmente, as primeiras 8 cores da mesma paleta. Se o piscar estiver desativado, todas as 16 cores estarão disponíveis para o plano de fundo.