Программирование видеоадаптеров

       

Регистры контроллера ЭЛТ


Регистры контроллера ЭЛТ управляют сигналами синхронизации, необходимыми для формирования растра, определяют формат данных на экране и форму курсора. Для видеоадаптеров CGA и EGA регистры контроллера ЭЛТ также управляют световым пером.

Большинство из регистров ЭЛТ не представляют интереса. Более того, их неправильное использование может послужить причиной физического разрушения монитора. Поэтому мы подробно рассмотрим лишь наиболее полезные и безопасные регистры контроллера. Назначение и формат ряда регистров контроллера ЭЛТ различаются для видеоадаптеров EGA, VGA, SVGA и для видеоадаптеров MDA, Hercules, CGA.

При программировании регистров контроллера ЭЛТ используется понятие одного знакоместа (characters) и времени необходимого для отображения одного символа (character clock). При вычислении значений регистров следует учесть, что ширина одного символа составляет 8 пикселов.

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

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

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

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

Контроллер ЭЛТ позволяет оставить электронный луч включенным во время перемещения по не отражаемой области. При этом вокруг изображения образуется цветная рамка. Размер и цвет рамки вы можете задавать сами.


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

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

Генераторы синхросигналов видеоадаптеров MDA, CGA и Hercules работают только на одной частоте. Для видеоадаптеров EGA, VGA и SVGA доступно несколько различных частот.

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

Видеоадаптер



Режим

Частота вывода пикселов, Мгц

Частота горизонтальной развертки, Кгц

Частота вертикальной развертки, Гц

MDA

720х350

16257

18430

50

CGA

640х200

14318

15750

60

EGA

640х200

14318

15750

60

640х350

16257

21850

60

720х350

16257

18430

50

VGA

640х400

25175

31500

70

720х400

28322

31500

70

640х480

25175

31500

60

640х350

25175

31500

70

SVGA

640х480

31500

37861

72,809

800х600

40000

37879

60,317

800х600

50000

48077

72,187

1024х768

65000

48363

60,000

1024х768

75000

56476

70,069

<


/p> Чтобы вычислить, сколько пикселов помещается на каждой строке развертки разделите частоту вывода точек на частоту горизонтальной развертки. Затем разделите полученное значение на 8 и вы узнаете, сколько символов помещается в строке развертки.

Если вы самостоятельно программируете регистры ЭЛТ видеоадаптеров VGA или SVGA вы должны отнять от полученной величины число 5 (для адаптера EGA следует отнять 2) и записать результат в регистр общей длинны линии горизонтальной развертки (Horizontal Total Register - HTR).

Во время выполнения горизонтальной развертки отображаются только пикселы в рабочей области экрана. Например, для режима VGA 640х480 пикселов, на одной линии горизонтальной развертки отображается только 640 пикселов. Разделите количество пикселов отображаемых в одной строке на 8 и вы узнаете, сколько символов выводится в каждой строке. Полученное значение записывается при выборе режима работы адаптера в регистр длины отображаемой части горизонтальной развертки (Horizontal Display Enable End Register - HDER).

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

Регистры начала импульса гашения луча горизонтальной развертки (Start Horizontal Blank Register  - SHBR) и конца импульса гашения луча горизонтальной развертки (End Horizontal Blank Register - EHBR) определяют размер нерабочей области горизонтальной развертки.

Регистры начала горизонтального обратного хода луча (Start Horizontal Retrace Register - SHRR) и конца импульса горизонтального обратного хода луча (End Horizontal Retrace Register - EHRR) определяют момент начала и окончания горизонтального обратного хода луча.

При вычислении значений регистров SHRR и EHRR следует учитывать, что для большинства мониторов, совместимых с видеоадаптерами VGA требуется отвести на горизонтальный обратный ход луча 2-4 микросекунды. Значения регистров SHRR и EHRR, как и других регистров контроллера ЭЛТ, необходимо записать в символах. Вычислим промежуток времени, в течение которого отображается один символ. Для этого следует разделить 1 на частоту вывода точек и умножить полученное число на 8 (горизонтальный размер символа в пикселах). Если частота вывода точек составляет 25,175 Мгц, тогда на отображение одного символа затрачивается 8/25175 = 0,318 микросекунд. Отсюда вычисляем, что для горизонтального обратного хода луча достаточно времени затрачиваемого на отображение 7 (2/0,318) символов.



Выберите значение для регистра начала горизонтального обратного хода луча (SHRR) таким образом, чтобы растр был отцентрован на экране. Участки нерабочей области до и после горизонтального обратного хода луча должны иметь одинаковый размер.

Всего в строке развертки 100 символов. Из них 80 символов отводится для видимой области строки растра и 12 символов для горизонтального обратного хода луча. Остаток - 8 символов (100-80-12)  относится к нерабочей области строки развертки. Значит горизонтальный обратный ход луча должен начинаться по прошествии времени, необходимого для отображения 80+8/2=84 символов.

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

Индекс

Регистр контроллера ЭЛТ

0

Общая длина линии горизонтальной развертки (Horizontal Total Register - HTR)

1

Длина отображаемой части горизонтальной развертки (Horizontal Display Enable End Register - HDER)

2

Начало импульса гашения луча горизонтальной развертки (Start Horizontal Blank Register  - SHBR)

3

Конец импульса гашения луча горизонтальной развертки (End Horizontal Blank Register - EHBR)

4

Начало импульса горизонтального обратного хода луча (Start Horizontal Retrace Register - SHRR)

5

Конец импульса горизонтального обратного хода луча (End Horizontal Retrace Register - EHRR)

6

Количество горизонтальных линий растра (Vertical Total Register - VTR)

7

Дополнительный регистр (Overflow Register - OVR)

8

Предварительная установка горизонтальной развертки (Preset Row Scan Register - PRSR)

9

Высота символов текста (Max Scan Line Register - MSLR)

0Ah

Начальная линия курсора (Cursor Start Register - CSR)

0Bh

Конечная линия курсора (Cursor End Register - CER)

0Ch

Старший байт начального адреса (Start Address Register - SAR, high byte)

0Dh

Младший байт начального адреса (Start address Register - SAR, low byte)

0Eh

Старший байт позиции курсора (Cursor Location Register - CLR, high byte)

0Fh

Младший байт позиции курсора (Cursor Location Register - CLR, low byte)

10h

Начало обратного вертикального хода луча (Vertical Retrace Start Register - VRSR)

11h

Конец обратного вертикального хода луча (Vertical Retrace End Register - VRER)

10h

Старший байт адреса светового пера (Light Pen Address Register - LPAR, high byte)

11h

Младший байт адреса светового пера (Light Pen Address Register - LPAR, low byte)

12h

Начало гашения вертикальной развертки (Vertical Display End Register - VDER)

13h

Логическая ширина экрана (Offset Register - OFR)

14h

Положение подчеркивания символа (Underline Location Register - ULR)

15h

Начало импульса гашения вертикальной развертки  (Start Vertical Blank Register - SVBR)

16h

Конец импульса гашения вертикальной развертки (End Vertical Blank Register - EVBR)

17h

Управление режимом (Mode Control Register - MCR)

18h

Регистр сравнения линий (Line Compare Register - LCR)

<


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

     Большинство регистров контроллера ЭЛТ видеоадаптера EGA доступны только для записи. Прочитать значение этих регистров нельзя

У видеоадаптеров MDA и Hercules индексный порт имеет адрес 3B4h, а порт данных - адрес 3B5h. Для CGA адреса портов другие. Индексный порт имеет адрес 3D4h, а порт данных - адрес 3D5h. Адреса портов контроллера ЭЛТ для видеоадаптеров EGA и VGA зависят от режима работы видеоадаптера (монохромный или цветной). В монохромном режиме адрес порта индексного регистра равен 3B4h, а регистра данных - 3B5h. В цветном режиме адреса соответственно равны 3D4h и 3D5h:

Видеоадаптер

Адрес порта индексного регистра

Адрес порта регистра данных

CGA

3D4h

3D5h

EGA, VGA, SVGA

(монохромный режим)

3B4h

3B5h

EGA, VGA, SVGA

(цветной режим)

3D4h

3D5h

MDA, Hercules

3B4h

3B5h

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

Адрес порта индексного регистра записан в области переменных BIOS, по адресу 0000:0463h. Приведем фрагмент программы, определяющей адрес индексного порта контроллера ЭЛТ:

; Устанавливаем регистр ES на нулевой сегмент памяти

xor          ax,ax

mov        es,ax

; Записываем в регистр DX адрес порта индексного

; регистра контроллера ЭЛТ

mov        dx,es:[463]

Так как адреса портов индексного регистра и регистра данных контроллера ЭЛТ является смежными, то адрес порта регистра данных можно легко получить, прибавив единицу к адресу порта индексного регистра.


Содержание раздела