Что такое VGA и чем он отличается от видеокарты?

30

Руководства по разработке операционной системы позволяют точно получить данные экрана путем записи непосредственно в VGA или EGA или Super VGA, но я не понимаю, какова реальная разница между записью на фиксированный адрес для отображения и записью на видеокарту напрямую, либо на борту или съемный? Я просто хочу, чтобы основные разъяснения моей путаницы по этому вопросу по моей проблеме

И поскольку дело обстоит не так просто с переменными в картах, соединительных интерфейсах, шинах, архитектурах, системах на кристалле, встроенных системах и т. Д., Мне трудно найти способ понять идею, лежащую в основе этих 100%. , Будут ли фиксированные адреса отличаться от высокопроизводительного графического процессора до низкоуровневого встроенного? Почему и почему нет?

Одна из моих целей в программировании - разместить ядро ​​и создать операционную систему, и это действительно надуманная мечта. Непонимание терминологии не только мешает мне в некоторых областях, но и заставляет меня казаться глупым в вопросах аппаратного обеспечения.

ДОПОЛНИТЕЛЬНО: Некоторые из этих текущих ответов говорят об использовании максимально адресуемой памяти процессора в спецификациях на 16-разрядных. Проблема заключается в некоторых из этих возникающих проблем:

1. Как насчет собственной памяти карты? Это не требует системной оперативной памяти для самих данных экрана.

2. А что в старших битовых режимах? И вы не можете не пренебрегать BIOS в реальном режиме (x86) и по-прежнему обращаться к памяти через AL?

3. Как концепция записи по фиксированному адресу останется неизменной на графическом процессоре с множеством регистров и производительностью на уровне или выше фактического микропроцессора?


источник
Для небольшого исторического контекста, проверьте мой ответ на связанный вопрос: superuser.com/questions/357328/…
Рассел Борогове
Следует отметить, что, помимо ссылки на технологию / протокол видеокарты, появился термин, обозначающий конкретные электрические стандарты и разрешения дисплея. Трудно угадать, какое значение применяется, даже когда вы видите термины «в контексте».
Даниэль Р Хикс

Ответы:

65

Технически VGA означает Video Graphics Array , видеостандарт 640x480, представленный в 1987 году. В то время это было относительно высокое разрешение, особенно для цветного дисплея.

До появления VGA у нас было несколько других графических стандартов, таких как hercules, которые отображали либо текст (80 строк по 25 символов), либо для относительной монохромной графики высокой четкости (в разрешении 720x348 пикселей).

Другими стандартами того времени были CGA ( цветной графический адаптер ), который также допускал до 16 цветов при разрешении до 640x200 пикселей. Результат будет выглядеть так:

введите описание изображения здесь

Наконец, примечательным стандартом для ПК был улучшенный графический адаптер (EGA), который позволял разрешать изображения до 640 × 350 с 64 цветами.

(Я не обращаю внимания на стандарты, не относящиеся к ПК, чтобы сохранить этот показатель относительно коротким. Если я начну добавлять стандарты Atari или Amiga - до 4096 цветов одновременно - тогда это будет довольно длинным.)

Затем в 1987 году IBM представила компьютер PS2. Он имел несколько примечательных отличий по сравнению со своими предшественниками, которые включали новые порты для мышей и клавиатур (ранее мыши использовали последовательные порты с 25 контактами или последовательные порты с 9 контактами, если у вас была мышь); стандартные 3,5-дюймовые диски и новый графический адаптер с высоким разрешением и множеством цветов.

Этот графический стандарт назывался Video Graphics Array . Для передачи аналоговых сигналов на монитор использовался 3-рядный 15-контактный разъем. Этот разъем просуществовал до нескольких лет назад, когда его заменили превосходные цифровые стандарты, такие как DVI и порт дисплея.

После VGA

Прогресс не остановился на стандартах VGA. Вскоре после введения VGA возникли новые стандарты, такие как VGA 800x600 S uper (SVGA), в котором использовался тот же разъем. (Hercules, CGA, EGA и т. Д. Имели свои собственные разъемы. Вы не могли подключить монитор CGA к VGA-карте, даже если пытались отобразить достаточно низкое разрешение).

С тех пор мы перешли к дисплеям с гораздо более высоким разрешением, но наиболее часто используемым названием остается VGA. Даже если правильные имена будут SVGA, XVGA, UXGA и т. Д. И т. Д.

введите описание изображения здесь

(Графика предоставлена ​​Википедией)


Еще одна вещь, которая называется «VGA», - это разъем DE15, используемый с оригинальной картой VGA. Этот обычно синий разъем - не единственный способ передачи аналоговых сигналов VGA на монитор, но он является наиболее распространенным.

Слева: DB5HD Справа: альтернативные разъемы VGA, обычно используемые для лучшего качества) введите описание изображения здесь


Третий способ использования VGA - это описание графической карты, хотя эта карта может давать совершенно другие разрешения, чем VGA. Использование является технически неправильным или, по крайней мере, должно быть «VGA-совместимой картой», но обычная речь не имеет значения.


Это оставляет запись в VGA

Это происходит из-за того, что память на IBM XT была разделена. Процессор может получить доступ к 1 МБ (1024 КБ) памяти. Нижние 512 КБ были зарезервированы для оперативной памяти, верхние 512 КБ - для дополнительных карт, ПЗУ и т. Д.

В этой верхней области отображена память карт VGA. Вы можете напрямую написать в него, и результат будет отображаться на дисплее.

Это использовалось не только для VGA, но и для альтернатив того же поколения.

  G = графический режим видео RAM
  M = монохромный текстовый режим видео RAM
  C = Цветной текстовый режим Видео RAM
  V = видео ROM BIOS (будет "а" в PS / 2)
  a = Плата адаптера ПЗУ и ОЗУ специального назначения (свободное пространство UMA)
  r = дополнительная BIOS ПЗУ материнской платы PS / 2 (бесплатный UMA ​​в системах, отличных от PS / 2)
  R = BIOS материнской платы
  b = IBM Cassette BASIC ROM (в IBM совместимых будет "R")
  h = Большая область памяти (HMA), если загружен HIMEM.SYS.

Обычная (базовая) память:   
Первые 512 КБ (или 8 блоков по 64 КБ). 

Верхняя область памяти (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: рррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррррр
0F0000: RRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

( Источник карты ASCII).

Hennes
источник
1
Замечательный комментарий: это не разъем "DB15". Разъем DB15 имеет только 2 ряда контактов (как DB9 и DB25). Разъем VGA имеет 3 ряда контактов, и его часто называют «HD15» (HD для высокой плотности по сравнению с БД) (хотя некоторые утверждают, что «HD15» не является официальным названием).
опилки
2
Глубокий комментарий № 2: Возможно, оригинальный IBM PC был выпущен с разделением 512/512, но вскоре он был заменен на разделение 640/384 (на него есть ссылка на исходной странице). Графическая память начинается с отметки 640К (шестнадцатеричный 0А0000). Я не думаю, что кто-то когда-либо действительно осознавал «границу 512 КБ» таким образом, что «граница 640 КБ» в конечном итоге стала известной проблемой.
Геллион
2
@sawdust: HD15 определенно не является официальным названием (но так же хорошо, как в наши дни). В семействе Dx-nnразъемов, xэто размер корпуса, nnэто количество контактов. Размер оболочки B равен размеру параллельного порта (или старого 25-контактного последовательного порта полной реализации). Shell E имеет тот же размер, что и последовательный порт. Таким образом , технически , то VGA разъем 15-контактный разъем будет DE-15, но это никогда не было частью оригинальной линейки разъемов. AFAIK никогда не существовало до использования IBM на PSGA / MCGA, VGA и 8514 / a. В Википедии есть хорошее объяснение: en.wikipedia.org/wiki/D-subminiature
Алексиос
3
Я люблю превосходную инфляцию разрешений: сверхширокий, супер-расширенный, гипер-квад-графический массив. Вы не можете назвать это высоким разрешением, потому что однажды это не будет!
Эйдан
2
@LackingConfidence Если вы хотите получить производительность, которую могут предложить карты, вам нужно использовать их индивидуальные проприетарные интерфейсы. Если вы не заботитесь о производительности, есть VGA BIOS для настройки кадрового буфера VESA для вас. Посмотрите на vesafb.txt в Linux для деталей (и, конечно, исходный код также в Linux).
Дероберт
10

Запись по «фиксированному адресу» - это, по сути, запись непосредственно на видеокарту. Все эти видеокарты ISA (CGA, EGA, VGA) по существу имели некоторый объем ОЗУ (и регистров), отображаемый непосредственно в память ЦП и пространство ввода / вывода.

Поэтому, когда вы записали байт в определенную область памяти, этот символ (в текстовом режиме) сразу появился на экране, поскольку вы фактически записали в память, расположенную на видеокарте, а видеокарта просто использовала эту память.

Сегодня все выглядит очень запутанно, особенно если учесть, что сегодняшние видеокарты иногда называют VGA (и они имеют сходство с «настоящими» VGA-картами 1990-х годов). Однако даже современные карты эмулируют некоторые функции этих старых конструкций (вы можете загружать DOS на большинстве современных ПК и использовать программы DOS, которые напрямую записывают в видеопамять). Конечно, в наше время все это эмулируется в прошивке видеокарты.

haimg
источник
Так как это будет иметь смысл с бортовой видеокартой? Я все еще не понимаю, как VGA может быть дополнением, если карта не продиктована VGA.
1
Даже если ваша видеокарта встроена, она все равно подключается к остальной системе через какую-то шину: PCIe, PCI, AGP, ISA и т. Д. Эти шины могут подключать внешние компоненты к материнской плате и подключать внутренние компоненты. внутри чипсета (SATA, видео и т. д.)
haimg
1
Но как автобусы узнают, что делать с адресами? Это будет отличаться между PCI и встроенными картами, даже графическими процессорами или встроенными графическими микропроцессорами.
1
Нет никакой разницы, проложены ли провода к разъему PCI или все соединения находятся внутри вашего северного моста. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg
3

На самом деле разницы нет: если вы пишете на адрес видеопамяти, аппаратное обеспечение направит его на видеокарту.

Если вы пишете свою собственную операционную систему, вам, вероятно, придется проделать огромную работу, чтобы заставить видеокарту отображать свою память так, как вы хотите, начиная со сканирования шины PCI, чтобы найти карту.

pjc50
источник
Моя видеокарта установлена ​​на моем северном мосту, она не подключена по PCI. Я думаю, что это Intel GMA.
3
Ваш графический процессор может не занимать слот PCI , но он, безусловно, находится на одной из шин системы ... даже если он находится на материнской плате, черт возьми, даже если он интегрирован непосредственно как часть системы на кристалле. Точно так же, как контроллеры SATA вашей материнской платы, или контроллеры USB, или ... Вы должны увидеть список встроенных графических процессоров (и контроллеры SATA, USB и т. Д.) Вместе с его PCI ID, если вы используете достаточно простую PCI-шину инструмент проверки для вашей ОС. Под Linux это просто 'lspci' в командной строке. Для Windows я предпочитаю «SIW» Габриэля Топалы. Macs ... также может быть "lspci"?
февраля
В таком случае ОС не имеет значения, потому что важна аппаратная архитектура и платформа. ОС только что построена на этом, и это является основной точкой входа для взаимодействия со всем оборудованием, для которого ядро ​​поддерживает сервис. Спецификация архитектуры и узлов - это то, с чем вы взаимодействуете. Чтобы определить ваше оборудование, просто найдите свою материнскую плату в Интернете. Это легкое начало.
+1 начиная со сканирования шины PCI, чтобы найти карту.
n611x007
2

До сих пор ответы объясняли, что старые видеокарты работали с отображением видеопамяти в адресное пространство процессора. Это были карты собственной памяти. Северный мост знает, как перенаправлять запросы на эту сопоставленную память на устройство VGA.

Кроме того, появились новые расширения и новые режимы для VGA-совместимых карт. Это привело к созданию VESA BIOS Extensions (VBE), которые работают через int 10h. Это поддерживает базовое 2D ускорение (BitBlt), аппаратные курсоры, двойную / тройную буферизацию и т. Д. Это основной метод для полноцветного отображения при любом поддерживаемом разрешении (включая высокое разрешение). При этом обычно используется внутренняя память карты, а северный мост выполняет перенаправление, как в классическом VGA. Это самый простой способ использования графики полного цвета / полного разрешения.

Далее мы рассмотрим прямой метод доступа к графическому процессору без использования BIOS, который обеспечивает доступ к тем же функциям, что и VBE, и, возможно, к дополнительным. Мое понимание здесь довольно размыто. Я думаю, что этот интерфейс зависит от конкретного устройства, но я совсем не уверен в этом.

Кроме того, существует интерфейс графического процессора, который может поддерживать 3D-ускорение / вычисление GP-GPU и т. Д. Для этого, безусловно, требуются драйверы или спецификации, предоставляемые производителем, для полного использования, и часто существуют материальные различия даже между устройствами одного и того же производителя.

Кевин Кэткарт
источник
Драйвер devce необходим только в операционной системе. Все оборудование может быть доступно непосредственно на архитектуре.
1
Конечно, проблема с прямым доступом к трехмерным частям заключается в том, что некоторые крупные производители графических процессоров считают, что финансовые части протокола считаются коммерческими секретами, и, таким образом, если не будет разработано обратное решение или не будет подписано соглашение о неразглашении, драйвер, который уже содержит эти знания необходимы.
Кевин Кэткарт
Зависит от карты. Если это nVidia или AMD, то это будет запатентовано. Встроенный Intel GMA будет намного проще, чем nVidia GEForce.
1
Я обновил эту строку, чтобы указать «дайверы или спецификации». Спецификации достаточны, когда вы можете получить их, что действительно имеет место для многих последних графических решений Intel.
Кевин Кэткарт
1
Что бы это ни стоило, у всех современных Intel и большинства видеокарт AMD есть очень большие опубликованные спецификации программного обеспечения. Nvidia по-прежнему хранит молчание по этому вопросу, но графический драйвер Nouveau с открытым исходным кодом содержит много документации (в виде исходного кода) по программированию видеокарт Nvidia. Intel / AMD / Nvidia более открыты, чем проприетарные ARM ASIC; встроенные / мобильные чипы являются самыми скрытными из всех.
allquixotic