Я постараюсь прояснить «вуду», стоящее за всем этим, объясняя, как работало старое оборудование. Современные графические процессоры не работают так, как они, но они эмулируют интерфейс процессора к графической карте.
ТЛ; др
Графические чипы / карты в 80-х и начале 90-х годов должны были производить вывод очень быстро (относительно тактовой частоты), поэтому они не выполняли инструкции, а имели фиксированные схемы. Они просто высасывали данные из ОЗУ, поэтому ЦП просто нужно было выгрузить данные в ОЗУ в нужном месте, и графический чип мог бы их забрать и выбросить на экран. Процессор также может устанавливать различные переменные конфигурации на графическом чипе.
Детали:
В 80-х годах на домашних компьютерах был действительно «тупой» графический чип с несколькими фиксированными характеристиками. Это будет иметь смысл, если я пройду по конвейеру задом наперед.
ЭЛТ-мониторы
Этим мониторам нужны аналоговые входы. Другими словами, более высокое напряжение = более яркий выход. Цветные мониторы имели 3 канала (красный, зеленый и синий (или, например, YUV или YIQ ) ). Эти напряжения регулировали силу электронного пучка. Простые вещи
ЭЛТ-мониторы буквально использовали электромагниты для отклонения электронного пучка слева направо, затем начинали снова немного ниже и двигались слева направо и так далее сверху вниз. Затем вернитесь к началу и повторите.
DAC
Графические чипы имели «цифро-аналоговый» преобразователь (очень распространенный электрический компонент ). Это преобразует цифровые значения (например, 2, 4 или 8 бит) в напряжения, которые могут подаваться на монитор.
сканирование
Графические чипы должны были «идти в ногу» с электронным лучом, посылая правильное значение в ЦАП, чтобы он мог выводить соответствующее напряжение в нужное время. (Для этого были использованы часы, в которые я не буду вдаваться.) Здесь не было времени выполнять инструкции. Все было запрограммировано и занимало небольшое фиксированное количество тактов.
Режимы видео
Ранние чипы были не очень быстрыми и имели ограниченную оперативную память. Из-за этого они имели тенденцию разрешать выбор различных режимов и других параметров конфигурации, например, цвета фона, выбора шрифта, расположения и размера курсора, выбора палитры и спрайтов. Большинство предлагали режим «только для символов» с высоким разрешением и попиксельные режимы с более низким разрешением.
Три заслуживающих внимания режима VGA:
- 16-ти (цветной) текстовый режим 80x25 (именно так выглядит экран загрузки BIOS)
- 16-цветный режим высокого разрешения 640x480
- 256-цветный режим высокого разрешения 320x200
Пиксельные краски
Грубо говоря, в зависимости от графической системы, конвейер выглядит примерно так:
Текущее расположение пикселей ⇒ Обрабатывать символ / шрифт / спрайт / пиксель / данные конфигурации ⇒ Значения пикселей ⇒ Палитра ⇒ ЦАП
Это тот второй шаг, который нужно прочитать из нескольких мест оперативной памяти. Например, в текстовом режиме ищется 1-байтовый символ. Это сформировало бы индекс в таблицу шрифтов. Из этой таблицы можно посмотреть немного, указывающее, должен ли этот пиксель быть основным или фоновым цветом. Третий байт будет выбран для получения этого цвета переднего плана / фона. Всего 3 байта считываются из оперативной памяти.
Но этот «поток» в значительной степени представляет собой набор простых фиксированных цепей, которые расположены точно так же, как и описанный поток.
Интерфейс шины памяти
У процессоров Intel есть эта досадная вещь, называемая шиной ввода-вывода, но это не важно, поэтому я сделаю вид, что ее там нет.
Процессоры обращаются к ОЗУ, передавая запрос READ или WRITE и адрес на шине памяти. Хотя большинство действительных адресов вызывают ответ из ОЗУ, определенные диапазоны обрабатываются устройствами . Например, ЧТЕНИЕ с определенного адреса может дать вам информацию о нажатиях клавиш клавиатуры.
Записывая нужные части «графического диапазона», вы можете записать как содержимое экрана, так и установить параметры конфигурации видеокарты. «Тупой» графический чип не выполняет никаких инструкций. Он просто продолжает двигаться, имея несколько байтов, проходящих по его цепям и выводящих напряжения.
В VGA фактически имеется ОЗУ на графической карте, поскольку вы можете настроить графическую карту для предварительной обработки данных перед их записью в графическое ОЗУ, чтобы повысить производительность в некоторых ситуациях.
VESA
Видеокарты после VGA предлагали более высокие разрешения и хорошую глубину цвета, но работали по аналогичным принципам. Многие современные видеокарты все еще обеспечивают совместимость с этим, чтобы обеспечить более высокое разрешение при загрузке. Но VGA - это «защита от дурака», которую будет эмулировать практически каждая карта.