O que exatamente é VGA e qual a diferença entre ele e uma placa de vídeo?

30

Os tutoriais de desenvolvimento do sistema operacional identificam o alcance dos dados da tela gravando diretamente em VGA ou EGA ou Super VGA, mas o que não entendo é qual é a diferença real entre gravar em um endereço fixo para exibição e gravar diretamente em uma placa de vídeo, a bordo ou removível? Eu só quero o esclarecimento básico da minha confusão sobre isso na minha questão

E como não é um caso tão simples com variáveis ​​em cartões, interfaces conectivas, barramentos, arquiteturas, sistema em um chip, sistemas embarcados etc., acho difícil encontrar uma maneira de entender a ideia por trás disso 100% . Os endereços fixos diferem de uma GPU de ponta para uma integrada a bordo de gama baixa? Por que e por que não?

É um dos meus objetivos na programação hospedar um kernel e criar um sistema operacional, e um grande sonho. Falhar em entender a terminologia não apenas me atrapalha em algumas áreas, como me faz parecer tolo nos assuntos de hardware.

EXTRA: Algumas dessas respostas atuais falam sobre o uso da memória endereçável máxima do processador nos detalhes específicos de 16 bits. O problema é alguns desses outros problemas que surgem:

1.What sobre a própria memória do cartão? Isso não precisaria da RAM do sistema para os próprios dados da tela.

2.O que acontece nos modos de bits mais altos? E você não pode negligenciar o BIOS no modo real (x86) e ainda endereçar a memória através do AL?

3. Como o conceito de gravar em um endereço fixo permaneceria inalterado em uma GPU com multidões de registros e desempenho igual ou superior ao microprocessador real?


fonte
Por um pouco de contexto histórico, veja a minha resposta a uma pergunta relacionada: superuser.com/questions/357328/...
Russell Borogove
Deve-se notar que, além de se referir à tecnologia / protocolo da placa de vídeo, o termo veio para designar padrões elétricos específicos e resoluções de tela. É difícil adivinhar qual significado está sendo aplicado, mesmo quando você vê os termos "no contexto".
Daniel R Hicks

Respostas:

65

Tecnicamente, VGA significa Video Graphics Array , um padrão de vídeo de 640x480, introduzido em 1987. Na época, havia uma resolução relativamente alta, especialmente para telas coloridas.

Antes da introdução do VGA, tínhamos outros padrões gráficos, como hercules, que exibiam texto (80 linhas de 25 caracteres) ou gráficos monocromáticos de alta definição relativa (em 720x348 pixels).

Outros padrões da época eram o CGA ( adaptador gráfico colorido ), que também permitia até 16 cores com uma resolução de até 640x200 pixels. O resultado disso seria assim:

insira a descrição da imagem aqui

Finalmente, um padrão de PC digno de nota foi o EGA (Enhanced graphics adapter), que permitiu resoluções de até 640 × 350 com 64 cores.

(Estou ignorando os padrões que não são os PCs para manter isso relativamente curto. Se eu começar a adicionar os padrões Atari ou Amiga - até 4096 cores no momento! -, isso ficará muito tempo.)

Então, em 1987, a IBM lançou o computador PS2. Havia várias diferenças notáveis ​​em comparação com seus antecessores, que incluíam novas portas para mouses e teclados (anteriormente, os mouses usavam portas seriais de 25 pinos ou 9 portas seriais, se você tivesse um mouse); unidades padrão de 2,5 cm e um novo adaptador gráfico com alta resolução e muitas cores.

Esse padrão gráfico foi chamado de Matriz de gráficos de vídeo . Ele usou um conector de 15 linhas e 15 pinos para transferir sinais analógicos para um monitor. Esse conector durou até alguns anos atrás, quando foi substituído por padrões digitais superiores, como DVI e porta de vídeo.

Após VGA

O progresso não parou com os padrões VGA. Logo após a introdução do VGA, surgiram novos padrões, como o 800x600 S uper VGA (SVGA), que usava o mesmo conector. (Hercules, CGA, EGA, etc, todos tinham seus próprios conectores. Você não podia conectar um monitor CGA a uma placa VGA, nem mesmo se tentasse exibir uma resolução suficientemente baixa).

Desde então, passamos a telas de resolução muito mais alta, mas o nome mais usado continua sendo VGA. Mesmo que os nomes corretos sejam SVGA, XVGA, UXGA, etc.

insira a descrição da imagem aqui

(Cortesia gráfica da Wikipedia)


Outra coisa que é chamada de 'VGA' é o conector DE15 usado com a placa VGA original. Esse conector geralmente azul não é a única maneira de transferir 'sinais VGA' analógicos para um monitor, mas é o mais comum.

Esquerda: DB5HD Direita: conectores VGA alternativos, geralmente usados ​​para obter melhor qualidade) insira a descrição da imagem aqui


Uma terceira maneira de 'VGA' é usada é descrever uma placa de vídeo, mesmo que essa placa possa produzir resoluções totalmente diferentes da VGA. O uso está tecnicamente errado ou deve ser pelo menos 'placa compatível com VGA', mas a fala comum não faz essa diferença.


Isso deixa a escrita para VGA

Isso vem da maneira como a memória em um IBM XT foi dividida. A CPU pode acessar até 1MiB (1024KiB) de memória. O 512KiB inferior foi reservado para RAM, o 512 KiB superior para placas de expansão, ROM etc.

Essa área superior é para onde a memória dos cartões VGA foi mapeada. Você poderia escrever diretamente para ele e o resultado apareceria no visor.

Isso não foi usado apenas para VGA, mas também para alternativas da mesma geração.

  G = RAM de vídeo no modo gráfico
  M = RAM de vídeo em modo de texto monocromático
  C = RAM de vídeo em modo de texto em cores
  V = BIOS de ROM de vídeo (seria "a" no PS / 2)
  a = ROM da placa adaptadora e RAM de uso especial (espaço UMA livre)
  r = BIOS ROM da placa-mãe PS / 2 adicional (UMA gratuita em sistemas não-PS / 2)
  R = BIOS da placa mãe ROM
  b = ROM IBM Cassette BASIC (seria "R" em IBM compatíveis)
  h = Área de memória alta (HMA), se o HIMEM.SYS estiver carregado.

Memória convencional (base):   
Primeiros 512 KB (ou 8 pedaços de 64 KB). 

Área de memória superior (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa '
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrp
0F0000: RRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

( Fonte do mapa ASCII).

Hennes
fonte
1
Nit comment: Não é um conector "DB15". Um conector DB15 possui apenas 2 linhas de pinos (como DB9 e DB25). O conector VGA possui 3 linhas de pinos e é freqüentemente chamado de "HD15" (HD para alta densidade comparado ao DB) (embora alguns afirmem que "HD15" não é um nome oficial).
serragem
2
Nit comment # 2: O IBM PC original pode ter sido lançado com uma divisão 512/512, mas logo foi alterado para uma divisão 640/384 (isso é mencionado na página de origem). A memória gráfica inicia na marca 640K (hex 0A0000). Eu não acho que alguém realmente tenha se dado conta de um "limite de 512K" da maneira que o "limite de 640K" acabou se tornando um problema conhecido.
Hellion
2
@sawdust: HD15 definitivamente não é um nome oficial (mas é tão bom quanto hoje em dia). Na Dx-nnfamília de conectores, xé o tamanho do casco, nné o número de pinos. O Shell B tem o mesmo tamanho de uma porta paralela (ou uma porta serial antiga de 25 pinos de implementação completa). O shell E é do mesmo tamanho da porta serial. Portanto , tecnicamente , o conector VGA de 15 pinos seria o DE-15, mas isso nunca fez parte da linha original de conectores. AFAIK nunca existiu antes do uso da IBM no PS / 2 MCGA, VGA e 8514 / a. A Wikipedia tem uma boa explicação: en.wikipedia.org/wiki/D-subminiature
Alexios
3
Adoro a inflação superlativa das resoluções: matriz de gráficos ultra-larga-super-estendida-hiper-quad-gráfica. Você não pode chamá-lo de alta definição, porque um dia não será!
Aidan
2
@LackingConfidence, se você quiser o desempenho que os cartões podem oferecer, precisará usar suas interfaces proprietárias individuais. Se você não se importa com o desempenho, existe o BIOS VGA para configurar um buffer de quadro VESA para você. Veja o vesafb.txt do Linux para obter detalhes (e, claro, o código-fonte também no Linux).
Derobert
10

Escrever em um "endereço fixo" era essencialmente escrever diretamente em uma placa de vídeo. Todas essas placas de vídeo ISA de vídeo (CGA, EGA, VGA) tinham essencialmente algumas RAM (e registros) mapeadas diretamente na memória da CPU e no espaço de E / S.

Portanto, quando você escreveu um byte em um determinado local da memória, esse caractere (no modo de texto) apareceu na tela imediatamente, pois na verdade você escreveu em uma memória localizada em uma placa de vídeo, e a placa de vídeo apenas usou essa memória.

Tudo isso parece muito confuso hoje, especialmente considerando que as placas de vídeo de hoje às vezes são chamadas de VGA (e têm semelhança com as placas VGA "verdadeiras" da década de 1990). No entanto, mesmo as placas modernas imitam algumas das funcionalidades desses designs mais antigos (você pode inicializar o DOS nos PCs mais modernos e usar programas do DOS que gravam diretamente na memória de vídeo). Claro, hoje em dia tudo é emulado no firmware da placa de vídeo.

haimg
fonte
Então, como isso faria sentido com uma placa de vídeo integrada? Ainda não entendo como o VGA pode ser o addreds se o cartão não for ditado pelo VGA.
1
Mesmo se a placa de vídeo estiver integrada, ela ainda estará conectada ao restante do sistema através de algum tipo de barramento: PCIe, PCI, AGP, ISA etc. Esses barramentos podem conectar componentes externos à placa-mãe e componentes internos. dentro do chipset (SATA, vídeo, etc.)
haimg
1
Mas como os ônibus sabem o que fazer com os endereços? Isso será diferente entre placas PCI e onboard, até GPUs ou microprocessadores gráficos integrados.
1
Não há diferença alguma, se os fios são roteados para o conector PCI ou se todas as conexões estão dentro da ponte norte. en.wikipedia.org/wiki/PV_Convencional#PCI_address_spaces
haimg
3

Não há realmente nenhuma diferença: se você estiver escrevendo no endereço da memória de vídeo, o hardware o encaminhará para a placa de vídeo.

Se você estiver escrevendo seu próprio sistema operacional, provavelmente terá muito trabalho para fazer com que a placa gráfica mapeie sua memória da maneira que desejar, começando pela varredura do barramento PCI para encontrar a placa.

pjc50
fonte
Minha placa gráfica está integrada na minha ponte norte, não está conectada à PCI. Eu acho que é um Intel GMA.
3
Seu processador gráfico pode não ocupar um slot PCI , mas certamente está sentado em um dos barramentos do sistema ... mesmo se estiver na placa-mãe, mesmo se estiver integrado diretamente como parte de um sistema em um chip. Da mesma forma que os controladores SATA da sua placa-mãe, ou controladores USB, ou ... Você deve ver a GPU integrada (e controladores SATA, USB etc.), juntamente com seu ID de PCI, se você usar um barramento PCI suficientemente básico ferramenta de inspeção para o seu sistema operacional. No Linux, é apenas 'lspci' na linha de comando. Para Windows, prefiro o "SIW" de Gabriel Topala. Macs ... também pode ter um 'lspci'?
FeRD
O sistema operacional não importa nesse caso, porque a arquitetura e a plataforma de hardware é o que conta. O sistema operacional é construído sobre isso e é o principal ponto de entrada para interagir com todo o hardware que o kernel suporta um serviço. A especificação da arquitetura andnits é com a qual você está interagindo. Para determinar seu hardware, basta procurar sua placa-mãe online. Esse é um começo fácil para o fairlu.
+1 começando escaneando o barramento PCI para encontrar a placa.
N611x007
2

Até agora, as respostas explicaram que as placas de vídeo antigas funcionavam com a memória de vídeo mapeada no espaço de endereço do processador. Essa era a própria memória dos cartões. A northbridge sabe redirecionar solicitações para essa memória mapeada para o dispositivo VGA.

Além disso, houve amplas expansões e novos modos para placas compatíveis com VGA. Isso levou à criação de extensões de BIOS VESA (VBE), que operam completamente int 10h. Ele suporta aceleração 2D básica (BitBlt), cursores de hardware, buffer duplo / tripple, etc. Este é o método básico para exibição em cores em qualquer resolução suportada (incluindo altas resoluções). Isso normalmente também usa memória interna da placa, com o northbridge realizando o redirecionamento como no VGA clássico. Essa é a maneira mais simples de utilizar gráficos de alta resolução / cores mais intensas.

A seguir, apresentamos algum método direto de acessar a GPU sem usar a BIOS, que fornece acesso aos mesmos recursos que o VBE e possivelmente outros adicionais. Meu entendimento é bastante confuso aqui. Penso que esta interface é específica do dispositivo, mas não tenho a certeza disso.

Depois, há a interface da GPU que pode suportar a aceleração 3D / computação da GP-GPU etc. Isso definitivamente requer drivers ou especificações fornecidas pelo fabricante para uso total e, freqüentemente, existem diferenças substanciais mesmo entre dispositivos do mesmo fabricante.

Kevin Cathcart
fonte
Um driver devce é necessário apenas em um sistema operacional. Todo o hardware pode ser acessado diretamente na arquitetura.
1
Certamente, o problema com o acesso direto às partes 3D é que partes substanciais do protocolo são consideradas segredos comerciais por alguns dos principais fabricantes de GPU e, portanto, a menos que seja feita engenharia reversa ou seja assinado um contrato de confidencialidade, um driver que já contém esse conhecimento é necessário.
Kevin Cathcart
Depende do cartão. Se for nVidia ou AMD, será proprietário. Um Intel GMA integrado seria muito mais fácil do que um nVidia GEForce.
1
Atualizei a linha em questão para reqad "mergulhadores ou especificações". As especificações são suficientes quando você pode obtê-las, o que é realmente o caso de muitas soluções gráficas Intel recentes.
Kevin Cathcart
1
Pelo que vale a pena, todas as modernas placas gráficas da Intel e da AMD têm faixas muito grandes de suas especificações de programação publicadas. A Nvidia ainda permanece em silêncio sobre o assunto, mas o driver gráfico de código aberto Nouveau contém muita documentação (na forma de código-fonte) sobre a programação de placas gráficas da Nvidia. Intel / AMD / Nvidia são mais abertos do que os ARM ASICs proprietários atualmente; os chips embarcados / móveis são os mais secretos de todos.
allquixotic