В этой главе мы опишем все основные регистры видеоадаптеров EGA и VGA, которые могут быть полезны при написании программ. Необходимо указать, что хотя программирование видеоадаптеров на уровне регистров позволяет увеличить скорость работы программ и решить некоторые задачи, которые нельзя решить при помоши функций BIOS, это может вызвать ряд проблем при переносе ваших программ на другие машины. Дело в том, что не все адаптеры совместимы на уровне регистров. Например, оригинальный видеоадаптер CGA создан на основе микросхемы Motorola 6845, а видеоадаптеры EGA и VGA используют более совершенный аналог этой микросхемы. Хотя EGA и VGA имеют регистры, соответствующие регистрам CGA, некоторые из них располагаются по другим адресам и могут выполнять какие-либо дополнительные функции. Кроме того, в каждом новом видеоадаптере расширяется набор используемых регистров.
Существуют модели видеоадаптеров EGA, VGA, Super VGA поддерживающие режим совместимости, когда они эмулируют адаптеры более низкого уровня (например MDA, Hercules, CGA). При этом эмуляция обычно происходит на уровне регистров, что гарантирует полную их совместимость. Режимы совместимости, если они поддерживаются, описаны в руководстве этого видеоадаптера.
На практике, для управления видеоадаптерами, рекомендуется преимущественно использовать функции BIOS. Это избавит вас от неприятных минут, когда ваша работающая программа, при переносе на другую машину перестанет правильно выполняться.
Видеоадаптеры EGA и VGA содержат большое количество регистров. EGA имеет около шестидесяти регистров, а VGA и Super VGA еще больше. Большая часть регистров EGA доступна только для записи, что созд...
Эти регистры называются внешними, так как в видеоадаптере EGA они не принадлежат центральной микросхеме, содержащей контроллер атрибутов, контроллер ЭЛТ, графический контроллер и преобразователь п...
Регистр определения различных режимов работы(Miscellaneous Output Register - MOR)В видеоадаптере EGA данный регистр доступен по адресу 3C2h только для записи. Видеоадаптер VGA позволяет также счит...
Регистр управления дополнительным устройством(Feature Control Register - FCR) Для видеоадаптера EGA биты D1 и D0 данного регистра передают сигналы на разъем дополнительного устройства, соответстве...
Регистр состояния 0(Input Status Register 0 - ISR0)Данный регистр, имеющий адрес 3C2h, доступен только для чтения. Регистр позволяет получить различную информацию от видеоадаптера EGA. Формат реги...
Регистр состояния 1(Input Status Register 1 - ISR0)Регистр позволяет получить различную информацию о состоянии видеоадаптера. Для видеоадаптера CGA Содержимое регистраможно считать через порт, име...
Регистр разрешения работы системы VGA(VGA Enable Register - VGA_ER)Данный регистр имеет адрес 3С3h. Регистр используется только для VGA. Биты D1-D7 зарезервированны, а бит D0 управляет работой VGA...
Регистр сброса триггера-защелки светового пера (Light Pen Latch Reset Register - LPLRR)Доступ к регистру производится через порт 3DBh для цветного режима и через 3BBh для монохромного. Регистр исп...
Регистр установки триггера-защелки светового пера (Light Pen Latch Set Register - LPLRR)Доступ к регистру производится через порт 3DCh для цветного режима и через 3BCh для монохромного. Регистр ис...
Регистры контроллера ЭЛТ управляют сигналами синхронизации, необходимыми для формирования растра, определяют формат данных на экране, форму курсора, а также для видеоадаптеров CGA и EGA управляют...
Общая длина линии горизонтальной развертки (Horizontal Total Register - HTR) (индекс 0)Этот регистр относится к группе регистров контроллера ЭЛТ, которые управляют генерацией синхросигналов д...
Длина отображаемой части горизонтальной развертки (Horizontal Display Enable End Register - HDER) (индекс 1)Регистр задает длину отображаемого участка горизонтальной развертки. Величина, запи...
Начало импульса гашения луча горизонтальной развертки (Start Horizontal Blank Register - SHBR) (индекс 2)Регистр используется видеоадаптерами EGA и VGA для определения начала импульса гашения...
Число горизонтальных линий растра (VTR) (индекс 6)Регистр определяет общее число линий горизонтальной развертки в кадре вертикальной развертки, включая гашение вертикального хода луча и обрат...
Дополнительный регистр (OVR) (индекс 7)Многие регистры контроллера ЭЛТ, видеоадаптера EGA, имеют по девять, а для VGA и по десять битов. Дополнительный регистр содержит биты, которые не помещ...
Высота сиволов текста(Max Scan Line Register - MSLR) (индекс 9)Этот регистр определяет количество линий сканирования на один символ или, другими словами, высоту символов в пикселах. Регистр и...
Этот регистр является доступным как для чтения, так и для записи. Регистр задает линию сканирования символа, в которой начинается курсор. Вместе с регистром конечной линии курсора (CER) он определ...
Конечная линия курсора(Cursor End Register - CER) (индекс 0Bh)Этот регистр, также как и регистр CSR, является доступным для чтения и для записи. Регистр задает последнюю линию сканирования си...
Рисунок 8.4 Изменение положения курсора. Следующая программа позволяет прочитать значение регистров начальной и конечной линии курсора: #include <stdio.h> #include "sysp.h" #includ...
Регистры начального адресаЭто группа из двух регистров: регистр старшего байта начального адреса (Start Address Register - SAR, high byte) (индекс0Ch) и регистр младшего байта начального адреса (S...
Рисунок 8.5 Процесс панорамирования экрана. Регистры начального адреса доступны для чтения и для записи. При установке режима работы видеоадаптера регистры обнуляются....
Регистры, определяющие положение курсораДва регистра - регистр старшего байта позиции курсора (Cursor Location Register - CLR_h, high byte) (индекс0Eh) и регистр младшего байта позиции курсора (Cu...
Рисунок 8.6 Отображение курсора на экране. Программа, приведенная ниже считывает значения из регистров позиции курсора (на момент запуска программы) и отображает их на экране дисплея: // чтение ре...
Начало обратного вертикального хода луча (VRSR) (индекс 10h) Регистр определяет начало обратного вертикального хода луча. Для EGA этот регистр содержит 9, а для VGA - 10 битов. Дополнительные...
Конец обратного вертикального хода луча (VRER) (индекс 11h) Данный регистр видеоадаптеров EGA и VGA доступен только для записи. Регистр устанавливает конец обратного вертикального хода луча,...
Регистр адреса светового пера (LPAR)Это 16-битовый регистр, который имеется в видеоадаптерах CGA и EGA, доступен только для чтения. Регистр LPAR дает возможность определить положение светового пер...
Завершение отображения вертикальной развертки (VDER) (индекс 12h) Регистр определяет момент, когда заканчивается видемая часть вертикальной развертки и происходит гашение луча. Регистр содерж...
Логическая ширина экрана (OFR) (индекс 13h)Регистр может быть использован для отображения большего, чем обычно, количества символов в строке. Например, для перевода видеоадаптера в режим отоб...
Регистр ULR используется только в текстовых режимах. Он определяет положение подчеркивания символа. Подчеркивание предстовляет собой одну из линий в матрице символа. Подчеркивание отображается, ес...
Начало импульса гашения вертикальной развертки (SVBR) (byltrc 15h)Регистр определяет момент начала гашения луча в прцессе вертикальной развертки. Для EGA регистр имеет 9, а для VGA - 10 битов. Дев...
Конец импульса гашения вертикальной развертки (EVBR) (индекс 16h) В момент, когда младшие 5 битов регистра для EGA или все 8 битов для VGA равны счетчику горизонтальных линий, заканчивается с...
Управление режимом (MCR) (индекс 17h)Регистр содержит набор битов, управляющих контроллером ЭЛТ. D7 Если бит равен нулю, то горизонтальный и вертикальный обратный ход луча невозможен. D6 Если...
Регистр сравнения линий (Line Compare Register - LCR) (индекс 18h) Обеспечивает разделение экрана на две независимые части. При этом одну из них можно свертывать, содержимое другой части экра...
Рисунок 8.8 Процесс разделения экрана. Содержимое верхнего окна можно перемещать, изменяя содержимое регистра начального адреса. Заметим, что у видеоадаптера EGA регистр сравнения линий состоит из...
Синхронизатор управляет всеми временными параметрами видеоадаптера, а также разрешением и запрещением доступа к отдельным цветовым слоям. Синхронизатор имеет пять регистров, они перечислены в табл...
Регистр сброса синхронизатора (Reset Register - RR) (индекс 0) Если регистр переведен в состояние сброса, то все процессы видеоадаптера приостанавливаются. В результате могут быть разрушены д...
Регистр разрешения записи цветового слоя(Color Plane Write Enable - CPWE) (индекс 2)При помощи данного регистра можно запретить запись процессором данных в любые цветовые слои видеопамяти. На...
Рисунок 8.9 Разрешение записи в цветовые слои. Биты регистра разрешения записи цветового слоя имеют следующие значения: D0 Если бит равен единице, то можно записывать данные в нулевой цветовой сло...
Регистр выбора знакогенератора (Character Generator Select Register - CGSR) (индекс 3)Видеоадаптер EGA позволяет загрузить в память четыре, а VGA - восемь таблиц знакогенератора, каждая из ко...
Регистр определения структуры памяти (Memory Mode Register - MMR) (индекс 4)Регистр инициализируется BIOS при выполнении операции выбора режима работы видеоадаптера и определяет структуру вид...
Как мы уже указывали, графический контроллер поддерживает обмен данными между процессором и видеопамятью. При этом он может выполнять простейшие логические операции над записываемыми в видеопамять...
Регистр установки/сброса(Set/Reset Register - SRR) (индекс 0)Использовав данный регистр совместно с регистром разрешения установки/сброса (Set/Reset Enable Register), можно определить данные,...
Регистр разрешения установки/сброса (Set/Reset Enable Register - SRER) (индекс 1)Регистр разрешения установки/сброса позволяет при операции записи в видеопамять для одних цветовых слоев испол...
Регистр CCR используется программами, осуществляющими поиск на экране пикселов с определенным цветом. Без использования регистра CCR за один цикл чтения видеопамяти процессор может считать данные...
Рисунок 8.12 Использование регистра CCR. Как видно из рисунка, в случае совпадения сравниваемых битов соответствующий бит результата равен единице. Заметим, что перед использованием регистра CCR д...
Регистр циклического сдвига и выбора функции(Data Rotate & Function Select - DRFS) (индекс 3)Регистр DRFS выполняет две различные функции, отраженные в его названии: Циклический сдвиг дан...
Рисунок 8.13 иллюстрирует выполнение логической операции ИЛИ. Регистр циклического сдвига и выбора функции содержит число 00010000b. После операции чтения данные из всех четырех слоев записыв...
Рисунок 8.13 Логические операции и операция циклического сдвига. Заметим, что логические операции можно производить только в нулевом и втором режиме записи....
Регистр выбора читаемого слоя(Read Plane Select Register - RPSR) (индекс 4)Определяет номер цветового слоя видеопамяти, из которого процессор может читать данные. Заметим, что при выполнении...
Регистр управляет несколькими различными функциями графического контроллера. В частности он управляет режимом записи в видеопамять, а также разрешением режима сравнния цветов (см. регистр сравнени...
Рисунок 8.14 Различные режимы записи в видеопамять. D3 Этот бит управляет разрешением использования режима сравнения цветов (см. регистр сравнения цветов графического контроллера). Для перевода ви...
Регистр смешанного назначения(Miscellaneous Register - MIR) (индекс 6)Регистр управляет видеопамятью и регистром-защелкой для адреса знакогенератора. В результате неправильной модификации рег...
Регистр маскирования цветовых слоев (Color Don't Care Register - CDCR) (индекс 7)Регистр используется в режиме сравнения цветов (см. регистр сравнения цветов - CCR). Если какие-либо биты D3-D...
Регистр битовой маски(Bit Mask Register - BMR) (индекс 8)Регистр управляет записью данных в видеопамять. Если какой-то бит регистра BMR содержит ноль, то соответствующий бит будет записыватьс...
Рисунок 8.15 Использование регистра битовой маски. Напомним, что занести данные в регистр-защелку можно, если выполнить операцию чтения из видеопамяти. При этом в каждый регистр-защелку считываетс...
Контроллер атрибутов управляет цветовыми характеристиками изображений. Контроллер атрибутов содержит двадцать один регистр. Регистры перечисленны в таблице 8.17. Доступ к ним осуществляется через...
Регистры цветовой палитры (0-15) (Color Palette Register's - CPR)Четыре цветовых слоя видеоадаптера EGA позволяют закодировать 16 различных цветов, однако улучшенный цветной дисплей обеспечивает в...
Регистр управления режимом(Mode Control Register - MCR) (индекс 10h)Регистр управления режимом управляет контроллером атрибутов. D0 ноль для текствых режимов, единица - для графических. Бит о...
Регистр цвета рамки экрана(Screen Border Color Register - SBCR) (индекс 11)В текстовых режимах работы видеоадаптеров регистр задает цвет рамки, расположенной вокруг текста. Назначение битов р...
Регистр разрешения цветового слоя (Color Plane Enable Register - CPER) (индекс 12)D3-D0 Биты разешения цветовых слоем. Если бит равен нулю, то данные из соответствующего цветвого слоя не пост...
Регистр горизонтального панорамирования (Horizontal Panning Register - HPR) (индекс 13)Регистр позволяет сдвигать в горизонтальном направлении содержимое экрана на один пиксел. При использова...
Рисунок 8.16 Горизонтальный сдвиг экрана. Следующая программа позволяет перемещать содержимое экрана по горизонтали и вертикали. Функции HorScroll и VerScroll реализуют, соответственно, горизонтал...
Регистр выбора цвета(Color Select Register - CSR) (индекс 14)Регистр используется только видеоадаптером VGA для управления цветом. D0 Цвет Р4. D1 Цвет Р5. Данные биты могут использоваться вме...
VGA работает с аналоговыми дисплеями, имеющими три раздельных видеовхода. Величина напряжения на каждом из них управляет, соответственно, интенсивностью красного, зеленого и голубого цвета изображ...
Рисунок 8.17 Схема управления цветами (VGA). Таблица цветов фактически является набором из 256 18-битовых регистров. Используя регистры ЦАП, можно получить доступ для чтения и для записи к каждому...
Регистр маскирования пикселов (Pixel Mask Register - PMR)Фирма IBM в руководстве по VGA предупреждает, что доступ к регистру нежелателен. В противном случае могут разрушиться данные в таблице цвет...
Регистр состояния ЦАП(DAC State Register - DAC_SR)Регистр адресуется при помоши порта с адресом 3C7h и доступен только для чтения. Прочитав данные из регистра, можно определить, доступны регистры...
Индекс читаемого регистра таблицы цветов(Look-up Table Read Index Register - LTRIR)Это индексный регистр доступен через порт 3C7h только для записи. Запись в данный регистр индекса элемента цветов...
Индекс записываемого регистра таблицы цветов (Look-up Table Write Index Register - LTWIR)После записи в регистр LTWIR индекса регистра таблицы цветов можно записать в него новое значение через рег...
Регистр данных таблицы цветов(Look-up Table Data Register - LTDR)Регистр используется для получения доступа к регистрам таблицы цветов. Для чтения из (записи в) таблицы цветов необходимо три раз п...
В этой главе на примере видеоадаптера VGA мы рассмотрим программирование нестандартных режимов. Так как программирование нестандартных режимов видеоадаптеров требует непосредственного доступа к ег...
Организация видеопамятиРежим 13h использует простую линейную организацию видеопамяти, в которой по каждому адресу в видеопамяти находится один байт управляющий одним пикселом. Такая организация ви...
Рисунок 8.18 Структура видеопамяти в нестандартных, 256-цветовых режимах. Как видно из рисунка первый пиксел экрана, отображаемый в левом верхнем углу, определяется байт со смещением 0 из нулевого...
Режим 320х400 пикселов, 256 цветовМы начнем рассмотрение нестандартных режимов с режима, имеющего разрешение 320х400 пикселов. Программирование этого режима является самым простым и безопасным, та...
Режим 360х480 пикселов, 256 цветовВторой рассматриваемый нами нестандартный режим может отображать 256 цветов при разрешающей способности 360х480 пикселов. Программирование этого режима является м...