Вывод в графическом режиме, используя функции bios

Вид материалаЛитература
Архитектура видеоадаптеров EGA и VGA
Режимы 4 и 5
Режимы 0Dh и 0Eh
Режим 0Fh
Режим 10h
Режим 11h
Режим 12h
Режим 13h
Подобный материал:
1   2   3   4

Архитектура видеоадаптеров EGA и VGA


Видеоадаптеры EGA и VGA можно условно разделить на шесть логических блоков:
  • Видеопамять

В видеопамяти размещаются данные, отображаемые адаптером на экране монитора. Для видеоадаптеров EGA и VGA видеопамять, как правило, имеет объем 256 Кбайт. Видеоадаптеры SVGA оснащаются значительно большим объемом видеопамяти. В них может быть установлено больше 4 Мбайт памяти. Видеопамять находится в адресном пространстве процессора. Программы могут непосредственно производить с ней обмен данными.
  • Графический контроллер

Используется при обмене данными между центральным процессором компьютера и видеопамятью. Аппаратура графического контроллера позволяет выполнять над данными, поступающими в видеопамять, простейшие логические операции (И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, циклический сдвиг).
  • Последовательный преобразователь

Выбирает из видеопамяти один или несколько байт, преобразует их в последовательный поток битов и передает контроллеру атрибутов.
  • Контроллер ЭЛТ

Генерирует временные синхросигналы, управляющие ЭЛТ.
  • Контроллер атрибутов

Преобразует информацию о цвете из формата, в котором она хранится в видеопамяти, в формат, необходимый для ЭЛТ. Преобразование цветов осуществляется в соответствии с таблицей цветовой палитры (Color Look-up Table). Модифицируя таблицу цветовой палитры, можно выбрать 16 цветов, поддерживаемых видеоадаптером EGA из 64 цветов, которые может отображать цветной улучшенный монитор.
  • Синхронизатор

Определяет все временные параметры видеоадаптера. Синхронизатор также управляет доступом процессора к цветовым слоям видеопамяти.


На рисунке 1 представлена блок-схема видеоадаптеров EGA и VGA, в которой отображены связи между их основными логическими блоками.





Рисунок 1. Блок-схема видеоадаптеров EGA/VGA

Монитор


В большинстве мониторов устройство отображения представляет собой электронно-лучевую трубку, газоразрядную или жидкокристаллическую панель. Для стационарных компьютеров обычно используются мониторы с ЭЛТ. Газоразрядные и жидкокристаллические панели применяют в переносных и блокнотных компьютерах.

ЭЛТ состоит из электронной пушки (или из трех пушек для цветного монитора), отклоняющей системы и экрана, покрытого слоем люминофора. Все эти устройства помещены в вакуумный баллон. Электронная пушка служит источником электронов, направляемых при помощи отклоняющей системы в нужную часть экрана, где электроны взаимодействуют с покрытием экрана. В результате взаимодействия испускается видимый свет.

Изображение формируется за счет пробега луча электронов слева направо по горизонтальным линиям экрана (строкам развертки). Чтобы глаз не замечал смены кадров, пробег луча по всему экрану происходит с частотой, большей, чем 25 Гц.

Луч электронов начинает пробегать по экрану с верхнего левого угла до правого верхнего угла. Когда луч доходит до правой стороны, он гасится и перемещается на следующую горизонтальную линию, находящуюся под предыдущей линией. После того как луч пробежит по всему экрану, он гасится и перемещается в верхний левый угол. Затем процесс повторяется снова. След от луча на экране образует растр (рис. 3.2).





Рисунок 2. Экран электронно-лучевой трубки


Изменяя силу тока в луче электронов при формировании им растра, можно менять интенсивность свечения отдельных элементов экрана - пикселов. Данные в видеопамяти как раз и определяют, как модулируется луч электронов во время сканирования экрана.

Для решения задач управления лучом электронов служит большинство регистров контроллера электронно-лучевой трубки (контроллера ЭЛТ).

Видеопамять


Видеоадаптеры EGA и VGA содержат на своей плате до 256 Кбайт оперативной памяти, разделенной на четыре банка или, другими словами, на четыре цветовых слоя. Эти слои памяти размещаются в одном адресном пространстве. Таким образом, по каждому адресу расположено четыре байта (по байту в каждом слое памяти). Какой из слоев памяти используется для записи или чтения данных процессором, определяется с помощью установки нескольких регистров адаптера.

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

Для операции чтения в каждый момент времени может быть разрешен только один цветовой слой. Читаемый слой определяется регистром выбора читаемого цветового слоя.

В большинстве режимов видеоадаптеров видеопамять состоит из нескольких страниц. При этом одна из них является активной и отображается на экране. Переключать активные страницы видеопамяти можно при помощи функций BIOS или путем непосредственного программирования регистров видеоадаптера.

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

Режимы 4 и 5


Это режимы низкого разрешения – 320х200 пикселов. Используются 4 цвета. Режимы поддерживаются видеоадаптерами CGA, EGA, VGA и SVGA. У адаптеров EGA, VGA и SVGA видеоданные расположены в нулевом цветовом слое. Остальные три слоя не используются.

Для совместимости с видеоадаптером CGA, отображение видеопамяти на экран не является непрерывным. Первая половина видеопамяти (начальный адрес B800:0000h) содержит данные обо всех нечетных линиях экрана, а вторая половина (начальный адрес B800:2000h) - относительно всех четных линий. Каждому пикселу изображения соответствуют два бита видеопамяти. За верхний левый пиксел экрана отвечают биты D7 и D6 нулевого байта видеопамяти. На рисунке 3 изображено соответствие видеопамяти пикселам экрана.




Рисунок 3. Структура видеопамяти для режимов 4 и 5


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

Следующие формулы позволяют определить смещение байта от начала станицы видеопамяти и номера битов в нем, управляющие пикселом с координатами (x,y):


Если y четное число, то смещение байта = 50h*(y/2)+(x/4)

Если y нечетное число, то смещение байта = 2000h+50h*((y-1)/2)+(x/4)


Номер первого бита = 7-mod(x/4)*2


В режимах 4 и 5 доступны два набора цветов - стандартный и альтернативный. Для выбора набора цветов можно воспользоваться функцией 0Bh прерывания INT 10h. Ниже представлена таблица соответствия значений битов, определяющих пиксел, его цвету:


Значение битов пиксела

Стандартный цвет

Альтернативный цвет

00

Черный

Черный

01

Светло-синий

Зеленый

10

Малиновый

Красный

11

Ярко-белый

Коричневый

Режим 6


Режим 6 (640х200) является режимом наибольшего разрешения для видеоадаптера CGA. В этом режиме видеоадаптеры EGA, VGA и SVGA используют для хранения информации только нулевой слой памяти.

На рисунке 4 представлено соответствие видеопамяти и пикселов экрана. Как и в режимах 4 и 5, первая половина видеопамяти содержит данные обо всех нечетных линиях экрана, а вторая половина - обо всех четных линиях.

В режиме 6 на один пиксел отводится один бит видеопамяти. Таким образом, каждый байт видеопамяти управляет восьмью пикселами. Если значение бита видеопамяти, отвечающего за данный пиксел, равно нулю, то пиксел имеет черный цвет, если единице - белый. За верхний левый пиксел экрана отвечает бит D7 в нулевом байте видеопамяти, то есть самый старший его бит.




Рисунок 4. Структура видеопамяти в режиме 6


При непосредственном доступе к видеопамяти вы можете воспользоваться следующими формулами:


Если y четное число, то смещение байта = 50h*(y/2)+(x/8)

Если y нечетное число, то смещение байта = 2000h+50h*((y-1)/2)+(x/8)


Номер бита = 7-mod(x/8)


Эти формулы позволяют определить для пиксела, имеющего координаты (x,y), смещение от начала станицы видеопамяти байта и номер бита в нем, управляющего данным пикселом.

Режимы 0Dh и 0Eh


Разрешающая способность в режиме 0Dh составляет 320 пикселов по горизонтали и 200 пикселов по вертикали, а в режиме 0Eh соответственно 640 и 200 пикселов.

Режимы 0Dh и 0Eh поддерживают только видеоадаптеры EGA и VGA. На рисунке 5 представлена структура видеопамяти для этого режима.

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

Каждому пикселу соответствует четыре бита - по одному биту из каждого цветового слоя. Четыре бита на пиксел, используемые в данных режимах, позволяют одновременно отображать пикселы 16 различных цветов.




Рисунок 5. Структура видеопамяти в режимах 0Dh и 0Eh


Следующие формулы позволяют определить смещение байта от начала станицы видеопамяти и номер бита в нем, управляющего пикселом с координатами (x,y):


Смещение байта = 50h*y+x/8


Номер бита = 7-mod(x/8)


Запись в каждый из четырех слоев видеопамяти можно разрешить или запретить при помощи регистра разрешения записи цветового слоя.

Режим 0Fh


Графический монохромный режим с разрешением 640х350 пикселов. Данный режим поддерживают только видеоадаптеры EGA, VGA и SVGA.

Для хранения видеоданных используются два цветовых слоя - нулевой и первый. Каждому пикселу соответствует по одному биту из нулевого и первого цветовых слоев. Два бита на пиксел позволяют отображать его черным, белым, ярко-белым или мигающим. Запись в каждый из этих двух слоев можно разрешить или запретить при помощи регистра разрешения записи цветового слоя.

На рисунке 6 представлена структура видеопамяти для режима 0Fh.



Рисунок 6. Структура видеопамяти режима 0Fh


Следующие формулы позволяют определить смещение байта от начала станицы видеопамяти и номер бита в нем, управляющего пикселом с координатами (x,y):


Смещение байта = 50h*y+x/8


Номер бита = 7-mod(x/8)

Режим 10h


Графический цветной режим с разрешением 640х350 пикселов. Данный режим поддерживают только видеоадаптеры EGA, VGA и SVGA.

Для хранения видеоданных используются четыре цветовых слоя. Каждому пикселу соответствует по одному биту из каждого цветового слоя. Четыре бита на пиксел позволяют отображать 16 различных цветов. Запись в каждый из этих четырех слоев можно разрешить или запретить при помощи регистра разрешения записи цветового слоя.

На рисунке 7 представлена структура видеопамяти для режима 10h.



Рисунок 7. Структура видеопамяти режима 10h


Если вы желаете выводить информацию на экран монитора непосредственно через видеопамять, необходимо уметь определять биты, которые управляют каждым пикселом изображения. Следующие формулы позволяют определить смещение байта от начала станицы видеопамяти и номер бита в нем, управляющего пикселом с координатами (x,y):


Смещение байта = 50h*y+x/8


Номер бита = 7-mod(x/8)

Режим 11h


Графический цветной режим с разрешением 640х480 пикселов. Данный режим поддерживают только видеоадаптеры VGA и SVGA.

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

На рисунке 8 представлена структура видеопамяти для режима 11h.




Рисунок 8. Структура видеопамяти режима 11h


При непосредственном доступе к видеопамяти вы можете воспользоваться следующими формулами:


Смещение байта = 50h*y+x/8


Номер бита = 7-mod(x/8)


Формулы позволяют определить для пиксела, имеющего координаты (x,y), смещение от начала станицы видеопамяти байта и номер бита в нем, управляющего данным пикселом.

Режим 12h


Режим 12h похож на режим 10h, за исключением того, что он имеет большую разрешающую способность - 640х480 пикселов. В видеопамяти задействованы все четыре цветовых слоя. Структура видеопамяти показана на рисунке 9.




Рисунок 9. Структура видеопамяти режима 12h


Формулы, используемые для вычисления битов, управляющих данным пикселом экрана, соответствуют формулам режима 10h.

Режим 13h


Этот режим, как и режим 12h, поддерживается только видеоадаптерами VGA и SVGA. Он обеспечивает отображение 256 различных цветов при разрешающей способности 320х200 пикселов.

Структура видеопамяти приведена на рисунке 10. Как видно из рисунка, в этом режиме видеопамять организована линейно. Каждый пиксел определяется одним байтом.




Рисунок 10. Структура видеопамяти в режиме 13h


Следующая формула позволяет определить смещение от начала видеопамяти байта, управляющего пикселом с координатами (x,y):


Смещение байта = 140h*y+x


Об архитектуре других блоков видеоадаптеров: графического контроллера, последовательного преобразователя, контроллера атрибутов, контроллера ЭЛТ и синхронизатора – можно прочитать в [1], глава 3.