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?
Respostas:
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:
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.
(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)
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.
( Fonte do mapa ASCII).
fonte
Dx-nn
famí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-subminiatureEscrever 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.
fonte
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.
fonte
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.
fonte