Книга представляет собой новую редакцию третьего тома "Библиотеки системного программиста" и посвящена программированию видеоадаптеров. В ней рассмотрены различные типы современных видеоадаптеров, в том числе адаптеров SVGA, описаны их регистры, организация видеопамяти. Представлены основные приемы программирования видеоадаптеров.
Книга предназначена для специалистов по вычислительной технике, системных и прикладных программистов, студентов вузов, специализирующихся на вычислительной технике.
В этой главе мы расскажем об архитектуре видеоадаптеров EGA и VGA. Видеоадаптеры EGA и VGA можно условно разделить на шесть логических блоков:
Видеопамять
В видеопамяти размещаются данные, отображаемые адаптером на экране монитора. Для видеоадаптеров EGA и VGA видеопамять, как правило, имеет объем 256 Кбайт. Видеоадаптеры SVGA оснащаются значительно большим объемом видеопамяти. В них может быть установлено больше 4 Мбайт памяти. Видеопамять находится в адресном пространстве процессора. Программы могут непосредственно производить с ней обмен данными.
Графический контроллер
Используется при обмене данными между центральным процессором компьютера и видеопамятью. Аппаратура графического контроллера позволяет выполнять над данными, поступающими в видеопамять, простейшие логические операции (И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, циклический сдвиг).
Последовательный преобразователь
Выбирает из видеопамяти один или несколько байт, преобразует их в последовательный поток битов и передает контроллеру атрибутов.
Контроллер ЭЛТ
Генерирует временные синхросигналы, управляющие ЭЛТ.
Контроллер атрибутов
Преобразует информацию о цвете из формата, в котором она хранится в видеопамяти, в формат, необходимый для ЭЛТ. Преобразование цветов осуществляется в соответствии с таблицей цветовой палитры (Color Look-up Table). Модифицируя таблицу цветовой палитры, можно выбрать 16 цветов, поддерживаемых видеоадаптером EGA из 64 цветов, которые может отображать цветной улучшенный монитор.
Синхронизатор
Определяет все временные параметры видеоадаптера. Синхронизатор также управляет доступом процессора к цветовым слоям видеопамяти
На рисунке 3.1 представлена блок схема видеоадаптеров EGA и VGA, в которой отображены связи между их основными логическими блоками.
PICTURE._FIG_19.PCX;6";4.308";PCX
Рисунок 3.1 Блок схема видеоадаптеров EGA/VGA
Все сказанное нами остается верно и для видеоадаптеров SVGA. Однако устройство видеоадаптеров SVGA значительно сложнее. Большинство видеоадаптеров SVGA содержат специальный графический сопроцессор, который может выполнять различные функции, например, он может использоваться для рисования различных геометрических фигур, масштабирования участков изображения и т. д.
Внешний вид символа, отображаемого на экране в текстовом режиме, определяется не только его кодом ASCII, но и байтом атрибутов. Атрибуты задают цвет символа, цвет фона, а также некоторые другие параметры:
Биты байта атрибутов |
Назначение |
D2-D0 |
Цвет символа |
D3 |
Интенсивность символа и выбор таблицы знакогенератора |
D6-D4 |
Цвет фона символа |
D7 |
Мигание символа или интенсивность фона символа |
Биты D0-D2 байта атрибутов определяют цвет символа, а биты D4-D6 цвет фона, на котором отображается символ. Таким образом, можно независимо задавать до 23 = 8 различных цветов для текста и фона.
Бит D3 играет различную роль в зависимости от числа активных таблиц знакогенератора. Если активной является одна таблица, бит D3 используется для управления интенсивностью цвета символа, что позволяет увеличить количество воспроизводимых цветов от 8 до 16.
Если одновременно определены две таблицы знакогенератора, то бит D3 также задает таблицу знакогенератора, которая будет использована при отображении данного символа.
Бит D7 выполняет две различные функции в зависимости от состояния регистра режима контроллера атрибутов. Данный бит управляет либо интенсивностью цвета фона, увеличивая количество одновременно отображаемых цветов до 16, либо разрешением гашения символа, в результате чего символ на экране монитора будет мигать. По умолчанию D7 бит управляет разрешением гашения символа (миганием).
В следующей таблице представлено соответствие цвета символа и цвета фона значению поля цвета символа байта атрибутов:
Код цвета в байте атрибутов |
Стандартный цвет |
Цвет с повышенной интенсивностью |
000 |
Черный |
Серый |
001 |
Синий |
Светло-синий |
010 |
Зеленый |
Светло-зеленый |
011 |
Морской волны |
Голубой |
100 |
Красный |
Светло-красный |
101 |
Фиолетовый |
Малиновый |
110 |
Коричневый |
Желтый |
111 |
Белый |
Ярко-белый |
Назначение полей байта атрибутов в монохромном режиме сходно с их назначениями в цветном режиме (см. выше). Биты D0-D2 управляют типом символа, который может быть обычным, мигающим или подчеркнутым, биты D4-D6 могут выбрать обратный (инвертированный) символ.
Бит D3 играет различную роль в зависимости от того, сколько таблиц знакогенератора одновременно являются активными. Если активной является одна таблица, то бит D3 используется для управления интенсивностью символа.
Если одновременно определены две таблицы знакогенератора, тогда бит D3 также задает таблицу знакогенератора, которая будет использована при отображении данного символа.
Бит D7 выполняет две различные функции в зависимости от состояния регистра режима контроллера атрибутов. Он управляет либо интенсивностью фона, либо миганием символа. По умолчанию бит D7 управляет миганием символа.
Перечислим все возможные значения атрибутов символов в текстовом монохромном режиме:
Атрибут |
Внешний вид символа |
00000000b (00h) |
Черный символ на черном фоне |
00000001b (01h) |
Подчеркнутый символ |
00000111b (07h) |
Обычный символ (светлый символ на черном фоне) |
00001001b (09h) |
Подчеркнутый символ с повышенной интенсивностью |
00001111b (0Fh) |
Символ с повышенной интенсивностью |
01110000b (70h) |
Обратное отображение символа (черный символ на светлом фоне) |
10000001b (81h) |
Подчеркнутый мигающий символ |
10000111b (87h) |
Мигающий символ |
10001001b (89h) |
Подчеркнутый мигающий символ с повышенной интенсивностью |
11110000b (0F0h) |
Мигающее обратное отображение символа |
В случае использования других значений атрибутов результат зависит от конкретной модели видеоадаптера.
Теперь приведем программу TEXTATTR (листинг 3.1), иллюстрирующую непосредственный доступ к видеопамяти в текстовых режимах работы адаптера. При запуске программы TEXTATTR вы должны указать ей два числовых параметра.
Первый параметр определяет режим работы видеоадаптера. Вы можете задать любой текстовый режим. Второй параметр управляет атрибутами символов, отображаемых на экране монитора. Если второй параметр равен 0, то бит D7 байта атрибутов управляет интенсивностью фона символов, а если он равен 1, то бит D7 байта атрибутов управляет миганием символов.
Многие режимы видеоадаптера SVGA позволяют одновременно отображать на экране больше чем 256 различных цветов. Естественно что для этого каждый пиксел должен быть представлен большим количеством бит.
Количество различных цветов |
Количество бит для кодировки пиксела |
256 |
8 |
32768 |
15 |
65536 |
16 |
16777216 |
24 |
4294967296 |
32 |
Рассмотрим 256-цветный режим видеоадаптера VGA. Каждый пиксел экрана представлен 8 битами данных видеопамяти. Видеоадаптер VGA содержит таблицу цветов (набор из 256 регистров ЦАП), которые согласно значениям, записанным в ней преобразует 8 битные данные видеопамяти в три 6-битных сигнала. Эти три сигнала поступают на три ЦАП и вырабатывающие красную, зеленую и синюю компоненты, определяющие цвет пиксела. Благодаря применению таблицы цветов вы можете выбрать для одновременного отображения на экране монитора любые 256 цветов из 262144 возможных.
Видеоадаптеры SVGA для каждого пиксела используют больше чем 8 бит. Обычно пиксел определяется 15, 16 или 24 битами. Естественно, что в этом случае использование таблицы цветов адаптера VGA затруднено. Например, для режима 65536 цветов (16 бит на пиксел) требуется увеличить размер таблицы цветов до 65536 18-битных регистров. Если адаптер SVGA кодирует пиксел 24 битами, то придется увеличивать размерность таблицы цветов с 18 до 24 или выше.
Поэтому в большинстве режимов SVGA реализована схема прямого кодирования цвета (Direct Color Mode). Биты, определяющие пиксел, группируются на три основные группы, непосредственно определяющие красную, зеленую и синюю компоненты цвета. Данные из этих трех групп передаются на три ЦАП и формируют видеосигнал. Таблица цветов не используется.
В некоторых режимах SVGA существует дополнительная, четвертая группа бит, также соответствующая каждому пикселу. Как правило, четвертая группа бит не используется. Некоторые модели видеоадаптеров могут использовать ее по своему усмотрению.
Например, на видеоадаптере Diamond Stealth 64, в режиме 110h, соответствующему спецификации VESA, для кодирования одного пиксела отводится два байта (рис. 7.1). Они разделены на четыре группы. Три из них имеют размер 5 бит и отвечают за красный, зеленый и синий компоненты цвета пиксела. Четвертая группа, резервная, состоит из одного бита. На рисунке 7.1 резервная группа отмечена символом 'X'.
Регистр определяет общее число линий горизонтальной развертки в кадре вертикальной развертки, включая гашение вертикального хода луча и обратный вертикальный ход луча.
Для видеоадаптера EGA, регистр VTR содержит девять битов. Девятый бит находится в дополнительном регистре (OVR). Регистр VTR видеоадаптеров VGA и SVGA содержит десять битов. Десятый бит, также как и девятый, расположен в дополнительном регистре (OVR).
При помощи этой функции можно определить конфигурацию видеосистемы компьютера:
На входе: |
AH |
1Ah |
AL |
00h - чтение конфигурации видеосистемы |
|
На выходе: |
AL |
1Ah |
BL |
Тип первичного видеоадаптера: 0 - монитор отсутствует, 1 - MDA с монохромным монитором, 2 - CGA с цветным монитором, 3 - EGA с улучшенным цветным монитором, 4 - EGA с цветным монитором, 5 - EGA с монохромным монитором, 6 - PGC (профессиональный графический контроллер); 7 - VGA с монохромным аналоговым монитором, 8 - VGA с цветным аналоговым монитором, 0Ah - MCGA с цветным цифровым монитором. 0Bh - MCGA с монохромным аналоговым монитором, 0Ch - MCGA с цветным аналоговым монитором |
|
BH |
Тип дополнительного видеоадаптера (см. регистр BL) |
Функция производит чтение 18-битовых значений из нескольких последовательно расположенных регистров таблицы цветов:
На входе: |
AH |
10h |
AL |
17h - чтение нескольких регистров таблицы цветов |
|
BL |
Номер первого регистра таблицы цветов (0 -255) |
|
CX |
Количество регистров для чтения (1-256) |
|
ES:DX |
Адрес буфера для таблицы цветов |
|
На выходе: |
ES:DX |
Данные прочитанные из таблицы цветов |
Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащими являются только младшие 6 бит.
Функция позволяет определить цвет любого пиксела экрана по его координатам. Функция используется только в графических режимах работы видеоадаптеров.
На входе: |
AH |
0Dh |
BH |
Номер страницы (для видеоадаптера CGA не используется) |
|
CX |
Координата X пиксела |
|
DX |
Координата Y пиксела |
|
На выходе: |
AL = номер цвета пиксела |
Приведем фрагмент программы, который определяет номер цвета пиксела, имеющего координаты x_pos и y_pos:
mov ah,0Dh
mov cx,x_pos
mov dx,y_pos
int 10h
; Сохраняем полученную величину
mov color_number
Функция поддерживается только видеоадаптерами VGA и SVGA. Позволяет прочитать содержимое регистра цвета рамки:
На входе: |
AH |
10h |
AL |
08h - чтение регистра цвета рамки |
|
На выходе: |
BH |
Значение регистра цвета рамки |
Функция поддерживается только видеоадаптерами VGA и SVGA. Она позволяет прочитать содержимое любого регистра палитры:
На входе: |
AH |
10h |
AL |
07h - чтение регистра палитры |
|
BL |
Номер регистра палитры (0-15) |
|
На выходе: |
BH |
Значение указанного регистра палитры |
mov ah,10h
mov al,7h
mov bl,num_reg
int 10h
mov reg_value,bh
Функция поддерживается только для видеоадаптеров VGA и SVGA. Она выполняет чтение одного из регистров таблицы цветов:
На входе: |
AH |
10h |
AL |
15h - чтение регистра таблицы цветов |
|
BL |
Номер регистра (0-255) |
|
На выходе: |
DH |
Интенсивность красного цвета (6 бит) |
CH |
Интенсивность зеленого цвета (6 бит) |
|
CL |
Интенсивность синего цвета (6 бит) |
Следующий пример позволяет считать значение регистра таблицы цветов с номером num_color_reg:
mov ah,10h
mov al,15h
mov bx,num_color_reg
int 10h
mov red_data,dh
mov green_data,ch
mov blue_data,cl
Данная функция позволяет прочитать символ и его атрибуты из позиции экрана, определенной текущим положением курсора. Чтение можно производить как из активной, так и из неактивных страниц памяти:
На входе: |
AH |
08h |
BH |
Номер страницы видеопамяти |
|
На выходе: |
AL |
ASCII-код символа |
AH |
Байт атрибутов символа для текстовых режимов |
Следующий пример считывает символ и его атрибут из текущей позиции курсора на странице page:
mov ah,8
mov bh,page ; Выбираем страницу видеопамяти page
int 10h ; Считываем символ и его атрибут
mov char,al ; Сохраняем полученный ASCII-код символа
mov attr,ah ; и его атрибут
Что удивительно данная функция может работать не только в текстовых, но также и в графических режимах. В этом случае она сравнивает пикселы в текущей позиции курсора с записями в таблице определения символов графического режима. Пикселы, значение которых не равно нулю, воспринимаются как пикселы символа. Остальные пикселы рассматриваются в качестве фона. Если соответствующий образ символа не обнаружен, функция возвращает в регистре AL значение 0. Если символ определен, в регистре AL возвращается его ASCII-код.
В качестве таблицы определения символов графического режима используется таблица, на которую указывает вектор прерывания 43h. Для графических режимов низкого разрешения (режимы номер 4, 5, 6) используется таблица символов, на которую указывает вектор прерывания 1Fh. Эта таблица содержит определение символов с ASCII-кодами 80h - FFh.
Функция позволяет прочитать значения всех регистров палитры и регистра цвета рамки. Для чтения регистров надо зарезервировать буфер в оперативной памяти размером 17 байт. После вызова функции байты 0 - 15 этого буфера будут содержать значения соответствующих регистров палитры, а байт 16 - значение регистра цвета рамки.
На входе: |
AH |
10h |
AL |
9 - чтение всех регистров палитры |
|
ES:DX |
Указатель на буфер размером 17 байт |
|
На выходе: |
ES:DX |
Указатель на буфер, заполненный значениями из регистров палитры и регистра цвета рамки |
Приведем фрагмент программы, который считывает значения всех регистров палитры и регистра цвета рамки в буфер памяти buffer:
; Определяем адрес буфера для записи значений регистров
; палитры и регистра цвета рамки
mov ax,SEG buffer
mov es,ax
mov dx,OFFSET buffer
; Считываем значения всех регистров палитры и регистра
; цвета рамки
mov ah,10h
mov al,9
int 10h
Функция содержит две подфункции для чтения и записи текущей конфигурации видеосистемы компьютера.
Функция 1Ah реализована только для видеоадаптеров VGA и SVGA. Если после вызова функции регистр AL не содержит число 1Ah, это значит, что функция не поддерживается данным видеоадаптером и для определения конфигурации надо использовать другие способы.
D0 Голубой.
D1 Зеленый.
D2 Красный.
D3 Не используется.
D4 Интенсивность.
D7-D5 Не используются.
Регистр задает длину отображаемого участка горизонтальной развертки. Величина, записанная в регистр должна быть единицу меньше, чем количество символов в строке экрана.
При установке режима работы видеоадаптера, BIOS загружает в регистр HDER следующие значения:
Режим |
0,1,4,5,D |
2,3,6,7,E,F,10 |
Содержимое регистра |
27h |
4Fh |
Последний элемент таблицы окружения содержит указатель на дополнительную таблицу окружения. Эта таблица содержит несколько дальних указателей на структуры данных, используемые BIOS видеоадаптеров VGA и SVGA.
Дополнительная таблица окружения (также как таблица окружения), используемая сразу после загрузки компьютера, располагается в ПЗУ BIOS. Чтобы изменить какие-либо элементы этой таблицы, вы должны сначала перенести ее в оперативную память (см. раздел "Таблица окружения").
Ниже описаны элементы дополнительной таблицы окружения:
Смещение |
Размер |
Описание |
00h |
Слово |
Длина дополнительной таблицы окружения в байтах |
02h |
Двойное слово |
Указатель на таблицу кодов комбинаций мониторов |
06h |
"-" |
Указатель на вторую таблицу символов текстового режима |
0Ah |
"-" |
Указатель на таблицу настройки палитры |
0Eh |
"-" |
Зарезервировано |
12h |
"-" |
"-" |
16h |
"-" |
"-" |
После загрузки компьютера заполняются только один элемент таблицы окружения - указатель на таблицу кодов комбинаций мониторов. Остальные указатели имеют нулевое значение и не используются.
Многие регистры контроллера ЭЛТ, видеоадаптера EGA, имеют по девять, а для адаптеров VGA и SVGA по десять битов. Дополнительный регистр содержит биты, которые не помещаются в восьмиразрядную сетку основных регистров видеоадаптера.
D0 Бит 8 регистра числа горизонтальных линий растра (VTR).
D1 Бит 8 регистра начала гашения вертикальной развертки (VDER).
D2 Бит 8 регистра начала обратного вертикального хода луча (VRSR).
D3 Бит 8 регистра начала импульса гашения вертикальной развертки (SVBR).
D4 Бит 8 регистра сравнения линий (LCR).
D5 Бит 9 регистра количества горизонтальных линий в растре (VTR).
D6 Бит 9 регистра начала гашения вертикальной развертки (VDER).
D7 Бит 9 регистра начала обратного вертикального хода луча (VRSR).
Эти функции помещают один символ в текущую позицию выходного потока. Прототипы функций представлены ниже:
int putc( int ch, FILE *stream );
int putchar( int ch );
Функция putc отличается от putchar наличием второго аргумента, который определяет выходной поток, в который помещается символ. Она может использоваться и для записи символов в открытый файл и для записи в стандартные потоки ввода-вывода. В частности, если второй аргумент функции равен константе stdout, то она эквивалентна функции putchar и выводит символ в стандартный выходной поток. Этот поток может идти на экран монитора или в файл, если используется свойство переназначения потока. Фактически функция putchar является макроопределением:
#define putchar(_c) putc((_c),stdout)
Первые параметры обеих функций совпадают по смыслу и задают ASCII-код выводимого символа (не смотря на то, что переменная ch целого типа, используется только ее младший байт). Функции обрабатывают управляющие символы. Список управляющих символов приведен в следующей таблице:
Символ |
Код ASCII |
Значение |
\a |
07h |
Звуковой сигнал |
\b |
08h |
Перемещение назад |
\f |
0Ch |
Переход к новой странице |
\n |
0Ah |
Новая строка |
\r |
0Dh |
Возврат каретки |
\t |
09h |
Горизонтальная табуляция |
\v |
0Bh |
Вертикальная табуляция |
\' |
27h |
Символ кавычки |
\" |
22h |
Двойная кавычка |
\\ |
5Ch |
Обратный слеш |
\% |
25h |
Знак процента |
Функции возвращают ASCII-код выведенного на экран символа, а в случае ошибки возвращают константу EOF. Чтобы конкретизировать ошибку можно воспользоваться функцией ferror.
Программа PUTCHAR (листинг 9.1) демонстрирует использование функции putchar.
Листинг 9.1. Файл PUTCHAR.C
// Использование функции putchar
#include <stdio.h>
void main(void) {
char *ptr,
out_str[] = "\aputchar\nputc\a";
for(ptr = out_str; *ptr; putchar(*(ptr++)) );
}
Включаемый файл STDIO.H содержит спецификации функций putchar и putc. Следовательно, этот файл необходимо включать во все программы, использующие данные функции.
Функция обеспечивает вывод на экран монитора строк, отдельных символов и чисел в различных форматах непосредственно на консоль. Для вывода отдельных символов используется функция putch.
Приведем прототип функции cprintf:
int cprintf( char *format [,argument]... );
Ее параметры соответствуют параметрам функции printf, описанной выше. Единственное отличие состоит в том, что она не преобразует символ перевода строки в пару символов - возврат каретки, перевод строки.
Функция cprintf возвращает количество напечатанных символов или отрицательную величину в случае ошибки.
Функция выполняет запись строки символов, оканчивающихся нулем, на консоль. В отличие от функции puts курсор не переводится на новую строку.
Приведем прототип функции cputs:
int cputs( char *string );
Единственный параметр функции содержит указатель на отображаемую строку. При успешном выполнении функция возвращает ноль. Если произошла ошибка, то возвращается ненулевая величина.
При использовании функции cputs необходимо включить директивой include файл CONIO.H, содержащий спецификацию этой функции.
Наиболее универсальной стандартной функцией, обеспечивающей запись в выходной поток stdout, является функция printf. Она производит вывод на экран монитора строк, отдельных символов и чисел в различных форматах.
Приведем прототип функции printf:
int printf( char *format [,argument]... );
Первый аргумент функции содержит указатель на управляющую строку, которая может состоять из:
символов непосредственно отображаемых на экране,
управляющих символов,
спецификаторов формата.
Непосредственно выводимые символы и управляющие символы помещаются в выходной поток без изменения.
Если управляющая строка содержит спецификаторы формата, то каждому спецификатору должен соответствовать один аргумент, следующий за управляющей строкой. Аргументы представляют собой переменные или константы, которые преобразуются согласно соответствующих им спецификаторов формата и затем также помещаются в выходной поток.
Различные спецификаторы формата перечислены в следующей таблице:
Спецификатор формата | Тип данных | ||
%d, %i | Целое десятичное число | ||
%s | Текстовая строка | ||
%c | Один символ | ||
%e, %E | Число с плавающей точкой в экспоненциальной форме | ||
%f | Число с плавающей точкой в десятичной записи | ||
%u | Целое десятичное число без знака | ||
%o | Целое восьмеричное число без знака | ||
%x, %X | Целое шестнадцатиричное число без знака | ||
%g, %G | Либо %e, либо %f в зависимости от того, в каком формате запись короче | ||
%p | Значение указателя | ||
%n | Количество символов |
В более общем случае, в спецификаторе формата между символом '%' и символом, определяющим тип преобразования можно разместить флаги и префиксы типов:
% [флаг] [ширина] [.точность] [префикс типа] символ преобразования
Флаги приведены в таблице 13.3, а префиксы типов в таблице 13.4.
Параметр [ширина] задает минимальную ширину поля, используемую при печати строки или числа. Если это число или строка не помещаются в поле целиком, то ширина поля увеличивается.
Флаг |
Значение |
- |
Выравнивание по левой границе |
+ |
Перед числом помещается его знак |
пробел (' ') |
Перед данными помещается пробел |
Префикс типа |
Значение |
F |
Дальний указатель |
N |
Ближний указатель |
h |
Короткое целое |
l, L |
Длинное целое |
Функция выполняет запись символа на консоль без буферизации. Прототип функции:
int putch( int ch );
Параметр функции ch содержит код ASCII выводимого символа. Заметим, что используется только младший байт параметра функции.
Функция putch возвращает код ASCII записанного символа, или, в случае возникновения ошибки, константу EOF.
При использовании функции putch необходимо включить в программу файл CONIO.H, который содержит ее спецификацию.
Функция puts позволяет записать строку в стандартный выходной поток stdout. Строка должна оканчиваться нулем (символ '\0'). Этот символ не помещается в выходной поток. Вместо него записывается управляющий символ '\n', который переводит курсор в начало новой строки.
Функция имеет следующий прототип:
int puts( char *string );
Единственный параметр функции содержит указатель на отображаемую строку. При успешном выполнении функция возвращает ноль. Если же произошла ошибка, то возвращается ненулевая величина.
При использовании функции puts необходимо включить директивой include файл STDIO.H, содержащий спецификацию этой функции.
Программа PUTS (листинг 9.2) демонстрирует использование функции puts.
Листинг 9.2. Файл PUTS.C
#include <stdio.h>
void main(void) {
puts("Работает функция puts!");
}
Видеоадаптеры VGA и SVGA имеют возможность гашения экрана монитора:
На входе: |
AH |
12h |
BL |
36h - управление гашением экрана монитора |
|
AL |
0 - включить отображение информации на экране монитора, 1 - погасить экран монитора |
|
На выходе: |
AL |
12h |
Функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.
Графический контроллер осуществляет обмен данными между видеопамятью и процессором. Графический контроллер может выполнять над данными, поступающими в видеопамять, простейшие логические операции: И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, операцию циклического сдвига.
Этот индексный регистр доступен через порт 3C7h только для записи. Запись в данный регистр индекса элемента цветовой таблицы позволяет прочитать его через регистр данных цветовой таблицы.
D7-D0 Индекс регистра таблицы цветов (0-255).
Данные из регистров таблицы цветов читаются через порт 3C9h, как три 6-битовых числа. После чтения третьего числа значение индексного регистра (LTRIR) автоматически увеличивается на единицу, что позволяет прочитать всю таблицу цветов, загрузив регистр индекса только один раз.
Во время операций чтения или записи таблицы цветов прерывания должны быть запрещены.
После записи в регистр LTWIR индекса регистра таблицы цветов можно записать в него новое значение через регистр данных таблицы цветов (см. ниже).
D7-D0 Индекс регистра таблицы цветов (0-255).
Данные записываются в регистры таблицы цветов через порт 3C9h, как три 6-битовых числа. После записи третьего числа значение индексного регистра (LTWIR) автоматически увеличивается на единицу, что позволяет прочитать таблицу цветов, загрузив регистр индекса только один раз.
У всех компьютеров, совместимых с IBM PC/XT/AT и PS/2, на системной плате установлена микросхема ПЗУ BIOS. В ней записан набор различных программ или функций, предназначенных для управления различными подсистемами компьютера: дисковой подсистемой, асинхронными последовательными и параллельными портами ввода/вывода, видеоадаптером. Нас в первую очередь будут интересовать функции, предназначенные для управления видеоподсистемой компьютера.
Микросхема ПЗУ BIOS, расположенная на системной плате содержит функции для управления видеоадаптерами. Однако практически все видеоадаптеры имеют собственную микросхему ПЗУ BIOS, расположенную на самой плате адаптера. На практике для управления видеоадаптером используются функции, записанные в его ПЗУ BIOS.
Использование функций BIOS для управления видеоадаптерами имеет как преимущества, так и недостатки. Основным преимуществом функций BIOS является то, что они скрывают всю кропотливую работу по программированию регистров видеоадаптера и видеопамяти, предоставляя программисту достаточно простой интерфейс. Но это еще не все. Так как функции BIOS создаются самими разработчиками видеоадаптера, то они учитывают все особенности конкретной модели адаптера, выравнивая все различия. Как вы узнаете позже, это особенно важно для программирования видеоадаптеров SVGA, так как набор регистров и организация видеопамяти разных моделей может сильно различаться.
К недостаткам функций BIOS можно отнести невысокую скорость их работы. Отчасти это вызвано тем, что доступ к данным, записанным в ПЗУ происходит медленнее, чем к оперативной памяти. Многие системные платы позволяют перенести содержимое медленного ПЗУ BIOS в более быструю оперативную память. Эта область оперативной памяти получила название теневой памяти, так как ее содержимое полностью повторяет соответствующую область ПЗУ. Подключение теневой памяти выполняется с помощью программы BIOS Setup. Отметим, что ПЗУ BIOS видеоадаптера обычно занимает адресное пространство начиная с адреса C000:0000h до адреса C000:7FFFh.
Операционная система MS-DOS предоставляет программистам всего несколько функций для работы с видеоподсистемой компьютера.
Функция 04h позволяет определить подключено ли к видеоадаптеру световое перо или нет. Если световое перо подключено, можно определить его координаты. Функция позволяет узнать позицию светового пера в текстовых и в графических координатах.
Световое перо видеоадаптера EGA программно не полностью совместимо с CGA, в результате чего программы поддерживающие возможность использования светового пера для видеоадаптера CGA будут работать неправильно с видеоадаптером EGA. Видеоадаптеры VGA и SVGA не имеют светового пера.
На входе: |
AH |
04h |
На выходе: |
AH |
0 - световое перо не подключено (все остальные регистры не содержат полезной информации); 1 - световое перо подключено |
CH |
Координаты вертикальной позиции курсора в пикселах (графические режимы с низким разрешением - 04h, 05h, 06h) |
|
CX |
Координаты вертикальной позиции курсора в пикселах (графические режимы с высоким разрешением) |
|
BX |
Координаты горизонтальной позиции курсора в пикселах |
|
DH |
Номер строки, на которой расположен курсор |
|
DL |
Номер столбца на котором расположен курсор |
Функция 01h позволяет изменить вертикальные размеры курсора путем задания верхней и нижней границ курсора (рис. 5.1). Горизонтальные размеры курсора всегда одинаковы и равны ширине одного символа. Курсор отображается только в текстовых режимах работы видеоадаптера.
На входе: |
AH |
00h |
CH |
Верхняя граница курсора. Если регистр CH содержит значение 20h курсор не отображается |
|
CL |
Нижняя граница курсора |
|
На выходе: |
Не используются |
При выборе режима работы видеоадаптера BIOS устанавливает следующие значения для верхней и нижней границ курсора:
Для монохромного и улучшенного цветного монитора верхняя граница = 11h, а нижняя = 12h.
Для цветного монитора верхняя граница = 6h, а нижняя = 7h.
PICTURE._FIG_35.PCX;6";4.308";PCX
Рисунок 5.1 Изменение положения курсора
Функция 02h задает текущее положение курсора на экране монитора. Если видеопамять разделена на несколько страниц, то каждая из них имеет свой курсор, координаты которого можно устанавливать отдельно.
Координаты курсора определяют не только место на экране, где он отображается, но также и позицию, начиная с которой соответствующие функции BIOS будут выводить на экран строки или отдельные символы.
На входе: |
AH |
02h |
BH |
Номер страницы видеопамяти |
|
DH |
Номер строки |
|
DL |
Номер столбца |
|
На выходе: |
Не используются |
Функция 34h управляет режимом эмуляции курсора CGA. При разрешении эмуляции курсора CGA, его размеры устанавливаются, исходя из того, что символы имеют высоту 8 пикселов.
На входе: |
AH |
12h |
BL |
34h - управление эмуляцией курсора CGA |
|
AL |
Разрешение/запрещение эмуляции курсора: 0 - разрешить эмуляцию, 1 - запретить эмуляцию |
|
На выходе: |
AL |
12h |
Авторы имеют собственный почтовый адрес в сети GlasNet. Все свои замечания и предложения по содержанию книг серий "Библиотека системного программиста" и "Персональный компьютер - шаг за шагом" вы можете присылать нам по следующему адресу:
frolov@glas.apc.org
Наш почтовый адрес доступен не только пользователям сети GlasNet. Абоненты других компьютерных сетей также могут передать нам сообщения. Ниже мы привели наш адрес в различных сетях:
Глобальная сеть |
Наш адрес |
CompuServe |
>internet:frolov@glas.apc.org |
GlasNet |
frolov@glas.apc.org |
Internet |
frolov@glas.apc.org |
Relcom |
frolov@glas.apc.org |
UUCP |
uunet!cdp!glas!frolov |
Вы также можете присылать свои пожелания почтой по адресу:
Издательский отдел АО "ДИАЛОГ-МИФИ"
Индекс 115409, город Москва, улица Москворечье, дом 31, корпус 2
D4-D0 Конец импульса гашения луча горизонтальной развертки. Гашение луча горизонтальной развертки происходит, когда биты D4-D0 равны счетчику длины отображаемой части горизонтальной развертки.
D6-D5 Биты смещения используются в текстовых режимах, чтобы разрешить отображение символов до разрешения вывода. Если величина битов смещения слишком маленькая, то символы на левой стороне экрана могут быть потеряны, а если она слишком большая, то символы на левой стороне экрана могут дублироваться по несколько раз.
D6 D5
0 0 - нет смещения
0 1 - смещение на один символ
1 0 - смещение на два символа
1 1 - смещение на три символа
D7 Бит D7 равен единице для видеоадаптера VGA и нулю для EGA.
При установке режима работы видеоадаптера, BIOS загружает в регистр EHBR следующие значения:
Режим |
0,1,4,5,D |
2,3 |
6,E |
7 |
F |
10 |
Содержимое регистра |
37h |
2Fh |
2Dh |
3Ah |
1Fh |
17h |
Если используется улучшенный цветной монитор, то эти значения отличаются:
Режим |
0,1 |
2,3 |
Содержимое регистра |
2Dh |
37h |
Сигнал гашения вертикальной развертки завершается, когда счетчик горизонтальных линий соответствует значению регистра EVBR. Для видеоадаптера EGA регистр имеет 5 разрядов, а для VGA и SVGA 8 разрядов.
D4-D0 Конец импульса горизонтального обратного хода луча. Обратный горизонтальный хода луча завершается, когда значение счетчика символов в строке становится равным битам D4-D0.
D6-D5 Смещение импульса горизонтального обратного хода луча относительно отображаемого участка горизонтальной развертки. Биты используются видеоадаптером EGA.
D6 D5
0 0 - нет смещения
0 1 - смещение на один символ
1 0 - смещение на два символа
1 1 - смещение на три символа
D7 Для адаптера EGA с объемом видеопамяти меньшим 256 Кбайт, бит D7 используется для управления горизонтальной сверткой экрана (горизонтальным панорамированием), когда слои видеопамяти сцеплены. Если бит D7 равен нулю, то после обратного хода луча первый адрес видеопамяти для обновления экрана будет четным.
Для видеоадаптеров VGA и SVGA бит D7 является пятым битом регистра конца импульса гашения луча горизонтальной развертки (EHBR).
Регистр устанавливает конец обратного вертикального хода луча, а также выполняет некоторые другие функции. Данный регистр доступен только для записи.
Биты |
Описание |
D3-D0 |
Конец обратного вертикального хода луча |
D4 |
Сброс вертикального прерывания |
D5 |
Разрешения вертикального прерывания |
D6 |
Изменение скорости регенерации экрана (видеоадаптеры VGA и SVGA) |
D7 |
Защита от записи (видеоадаптеры VGA и SVGA) |
D7 Если бит D7 равен единице, то регистры контроллера ЭЛТ, имеющие индексы от 0 до 7, будут защищены от записи. Защита от записи позволяет решить некоторые проблемы совместимости между адаптером VGA и видеоадаптерами, построенными на основе микросхемы 6845 (например CGA).
D6 Если бит D6 равен единице, то во время обратного горизонтального хода луча будет генерироваться пять циклов регенерации видеопамяти вместо обычных трех.
D5 Если бит равен нулю, то при каждом обратном вертикальном ходе луча на линии IRQ2 будет возникать прерывание. Сигнал прерывания сбрасывается при записи нуля в бит D4 данного регистра.
D4 Запись нуля в данный бит вызывает сброс прерывания на линии IRQ2 и переустановку флага незаконченного вертикального прерывания.
D3-D0 Сигнал обратного вертикального хода луча завершается, когда значение четырех младших бита счетчика горизонтальных линий совпадает с битами D3-D0
Этот регистр, также как и регистр CSR, является доступным для чтения и для записи. Регистр задает линию сканирования символа, в которой кончается курсор.
D4-D0 Соответствует номеру последней линии курсора для видеоадаптеров VGA и SVGA (рис. 4.3). Для видеоадаптера EGA - номеру следующей линии.
D6-D5 Отклонение курсора. Задает смещение курсора относительно позиции, определенной регистром CLR.
00 - нет отклонения
01 - отклонение вправо на один символ
10 - отклонение вправо на два символа
11 - отклонение вправо на три символа
D7 Не используется.
При установке режима работы видеоадаптера BIOS загружает в регистр конечной линии курсора следующие значения:
Режим |
0,1,2,3 |
4,5,6,D,E,F,10 |
7 |
Содержимое регистра |
07 |
00 |
0Ch |
Изменяя значение регистров начальной и конечной линии курсора, можно менять его положение и размер (рис. 4.3). На левой части рисунка, приведенного ниже, регистр начальной линии курсора равен 0Ah, регистр конечной линии курсора равен 0Bh. На правой части рисунка значение регистров изменено. Регистр начальной линии равен 4, а регистр конечной линии - 5.
PICTURE._FIG_35.PCX;6";4.308";PCX
Рисунок 4.3 Изменение положения курсора
Следующая программа позволяет прочитать значение регистров начальной и конечной линии курсора:
Листинг 4.4. Файл GETCURS.C
#include <stdio.h>
#include <conio.h>
#include "sysp.h" // см. листинг 3.2
#include "sysgraph.h" // см. листинг 3.3
// Описания функций
void main(void);
void WriteReg(unsigned reg, unsigned char data);
unsigned char ReadReg(unsigned reg);
// Главная функция
void main(void) {
char top = 0, bottom = 0;
unsigned crt_address;
BIOS_VAR _far *bios_var_ptr;
// Получаем указатель на область переменных BIOS
bios_var_ptr = (BIOS_VAR _far *) FP_MAKE(0x0000, 0x0410);
// Определяем адрес индексного регистра контроллера ЭЛТ
Контроллер атрибутов в графических и текстовых режимах работы видеоадаптера управляет цветом элементов изображения. Значениям цветовых атрибутов ставится в соответствие определенный цвет. Для этого используется таблица цветовой палитры (Color Lock-up Table). Таблица цветовой палитры ставит в соответствие четырем битам, взятым из видеопамяти, 6 битов цветовой информации. Изменяя данные, записанные BIOS в таблицу цветовой палитры, можно менять используемую палитру цветов.
Для видеоадаптера EGA эта информация поступает непосредственно на видеовход монитора. Если к видеоадаптеру EGA подключен цветной монитор, то используются только четыре младших бита из шести.
Видеоадаптеры VGA и SVGA выполняют более сложные операции по преобразованию цвета. Данные полученные от таблицы цветовой палитры преобразуются дальше в соответствии с таблицей цветов. В результате получаются три 6 битовых значения, представляющих красный, зеленый и синий компоненты цвета. Эти значения поступают на три цифро-аналоговых преобразователя и уже в аналоговом виде поступают в монитор.
На рисунках 3.16 и 3.17 показана работа контроллера атрибутов в графическом и текстовом режимах.
PICTURE._FIG_16.PCX;6";4.308";PCX
Рисунок 3.16 Контроллер атрибутов в текстовых режимах
В текстовых режимах видеоадаптеров, цвет символа и цвет фона символа определяется байтом атрибутов. Цвет фона символа задают четыре старших бита байта атрибутов. Значение этих четырех бит служит индексом в таблице цветовой палитры. Элемент таблицы с данным индексом впоследствии определяет цвет фона символа.
Аналогично битам, определяющим цвет фона символа, четыре младших бита задают цвет самого символа.
PICTURE._FIG_15.PCX;6";4.308";PCX
Рисунок 3.17 Контроллер атрибутов в графических режимах
В отличие от текстовых режимов, в графических режимах цвет каждого пиксела определяется отдельно. На рисунке 6.18 четыре бита, считанные из цветовых слоев видеопамяти определяют один пиксел. Значение этих бит служат индексом для таблицы цветовой палитры.
Контроллер атрибутов подробно описан в разделе "Регистры видеоадаптеров EGA и VGA".
Контроллер ЭЛТ выполняет следующие функции:
Вырабатывает сигналы, управляющие работой ЭЛТ (сигналы развертки и гашения)
Определяет формат экрана и формат символов текста (разрешающую способность экрана и размер символов)
Определяет форму курсора
Управляет световым пером
Управляет вертикальной сверткой (скроллингом) содержимого экрана
Так как контроллер ЭЛТ выполняет жизненно важные для монитора функции, то изменять содержимое регистров этого контроллера очень опасно. В некоторых случаях может даже произойти физическое повреждение экрана (например, повреждение люминофора).
Регистры контроллера ЭЛТ загружаются BIOS значениями, зависящими от типа монитора, видеоадаптера и текущего режима работы. Мы не рекомендуем вам без особой необходимости изменять содержимое этих регистров. Практически все что необходимо, можно сделать при помощи функций BIOS, не подвергая дорогостоящий видеоадаптер и монитор излишнему риску.
Видеоадаптеры EGA, VGA и SVGA имеют большое количество регистров. Адаптер EGA имеет около шестидесяти регистров, а VGA и SVGA еще больше. Большая часть регистров EGA доступна только для записи, что создает определенные проблемы, особенно для мультизадачных систем.
Некоторые фирмы-изготовители видеоадаптеров выпускают платы видеоадаптеров совместимые с EGA, для регистров которых разрешена также и операция чтения. В адаптерах VGA и SVGA практически все регистры доступны как для записи, так и для чтения.
В тех случаях, когда видеоадаптеры SVGA и VGA имеют отличия от EGA, мы будем на это специально указывать.
Доступ к большинству регистров видеоадаптеров осуществляется в два этапа: через один порт ввода/вывода выбирается номер интересующего вас регистра, а затем через другой порт ввода/вывода осуществляется обмен данными. Такая организация регистров позволяет сэкономить большое количество портов центрального процессора. Остальные регистры адресуются непосредственно через соответствующие порты ввода/вывода - каждому регистру соответствует один порт ввода/вывода.
Заметим, что в различных режимах работы видеоадаптера, его регистры могут иметь различные адреса.
Приведем список адресов регистров в монохромных режимах:
Адрес | Регистр | ||
3C2h | Регистр определения различных режимов работы (Miscellaneous Output Register - MOR),
Регистр состояния 0 (Input Status Register 0 - ISR0) | ||
3BAh | Регистр управления дополнительным устройством (Feature Control Register),
Регистр состояния 1 (Input Status Register 1 - ISR1) | ||
3BBh | Регистр очистки защелки светового пера (Clear Light Pen Latch Register- CLPLR) | ||
3BCh | Установка защелки светового пера (Set Light Pen Latch Register - SLPLR) | ||
3C4h, 3C5h | Регистры синхронизатора (Sequencer Register's - SR) | ||
3B4h, 3B5h | Регистры контроллера ЭЛТ (CRT Controller Register's - CRT_CR) | ||
3CAh, 3CCh, 3CEh, 3CFh | Регистры графического контроллера (Graphics Controller Register's - GCR) | ||
3C0h | Регистр контроллера атрибутов (Attribute Controller Register - ACR) | ||
3C3h | Регистр разрешения работы системы VGA (VGA Enable Register - VGA_ER) | ||
3C6h, 3C7h, 3C8h, 3C9h | Регистры цифро-аналогового преобразователя (ЦАП) VGA (VGA Video DAC Register - VGA_DAC_R) |
Адрес |
Регистр |
3C2h |
Регистр определения различных режимов работы (Miscellaneous Output Register - MOR), Регистр состояния 0 (Input Status Register 0 - ISR0) |
3DAh |
Регистр управления дополнительным устройством Feature Control Register), Регистр состояния 1 (Input Status Register 1 - ISR1) |
3DBh |
Регистр очистки защелки светового пера (Clear Light Pen Latch Register- CLPLR) |
3DCh |
Установка защелки светового пера (Set Light Pen Latch Register - SLPLR) |
3C4h, 3C5h |
Регистры синхронизатора (Sequencer Register's - SR) |
3D4h, 3D5h |
Регистры контроллера ЭЛТ (CRT Controller Register's - CRT_CR) |
3CAh, 3CCh, 3CEh, 3CFh |
Регистры графического контроллера (Graphics Controller Register's - GCR) |
3C0h |
Регистр контроллера атрибутов (Attribute Controller Register - ACR) |
3C3h |
Регистр разрешения работы системы VGA (VGA Enable Register - VGA_ER) |
3C6h, 3C7h, 3C8h, 3C9h |
Регистры ЦАП VGA (VGA Video DAC Register - VGA_DAC_R) |
Номер режима работы |
Адрес памяти |
0,1,2,3,4,5,6 |
B000:8000h-B000:FFFFh |
7 |
B000:0000h-B000:7FFFh |
0Dh,0Eh,0Fh,10h,11h,12h,13h |
A000:0000h-A000:FFFFh |
1. Richard Wilton, "Programmer's Guide to PC Video Systems", Second Edition, Microsoft Press, 1987.
2. Richard Wilton, "Programmer's Guide to PC & PS/2 Video Systems", Microsoft Press, 1987.
3. George Sutty, Steve Blair, "Programmer's Guide to the EGA/VGA", New York, 1988.
4. Bradley Dyck Kliewer, "EGA/VGA A Programmer's Reference Guide", New York, 1988.
5. Michael Abrash, "VGA color paging", Programmer's Journal 7.5, 1989.
6. Michael Abrash, "Still-higher 256-color VGA resolutions", Programmer's Journal 7.5, 1989.
7. Michael Abrash, "Higher 256-color resolutions on the VGA ", Programmer's Journal 7.1, 1989.
8. А. В. Фролов, Г. В. Фролов. Библиотека системного программиста. Тома 11-13. Операционная система Microsoft Windows 3.1 для программиста. Часть 1-3. Москва, "Диалог-МИФИ", 1994
9. А. В. Фролов, Г. В. Фролов. Персональный компьютер - шаг за шагом. Том 2. Операционная система Microsoft Windows 3.1. Москва, "Диалог-МИФИ", 1994
10. А. В. Фролов, Г. В. Фролов. Персональный компьютер - шаг за шагом. Том 4. Что вы должны знать о своем компьютере, "Диалог-МИФИ", 1994
11. А. В. Фролов, Г. В. Фролов. Библиотека системного программиста. Том 10. Компьютер IBM PC/AT, MS-DOS и Windows. Вопросы и ответы. Москва, "Диалог-МИФИ", 1994
12. А. В. Фролов, Г. В. Фролов. Библиотека системного программиста. Том 3. Программирование видеоадаптеров CGA, EGA и VGA. Москва, "Диалог-МИФИ", 1992
Регистр позволяет отобразить на экране больше символов в строке, чем в стандартных текстовых режимах. Например, вы можете воспользоваться регистром OFR при переводе видеоадаптера в режим отображения 132 символов в строке.
В текстовых режимах регистр содержит смещение между соседними строками экрана, заданное в 16-битных словах.
В графических режимах регистр OFR задает логическую длину (в 16-битных словах или 32-битных двойных словах) горизонтальной линии развертки. Если линия Num развертки начинается по адресу Adr, то следующая линия развертки Num+1 начинается по адресу Adr+Offset, где Offset является значением регистра OFR.
Использование регистра OFR иллюстрируется рисунком 4.6. На верхней части рисунка видеоадаптер находится в стандартном текстовом режиме с разрешением 80 символов в строке. При этом значение регистра логической ширины экрана равно 40. На нижней части рисунка представлен результат увеличения содержимого регистра до 41. Логическая ширина экрана в этом случае увеличивается до 82 символов в строке. Последние два символа каждой строки не помещаются на экране. Для их отображения надо выполнить горизонтальную свертку экрана.
PICTURE._FIG_38.PCX;6";4.308";PCX
Рисунок 4.6 Логическая ширина экрана
В большинстве мониторов устройство отображения представляет собой электронно-лучевую трубку, газоразрядную или жидкокристаллическую панель. Для стационарных компьютеров обычно используются мониторы с ЭЛТ. Газоразрядные и жидкокристаллические панели применяют в переносных и блокнотных компьютерах.
ЭЛТ состоит из электронной пушки (или из трех пушек для цветного монитора), отклоняющей системы и экрана, покрытого слоем люминофора. Все эти устройства помещены в вакуумный баллон. Электронная пушка служит источником электронов, направляемых при помощи отклоняющей системы в нужную часть экрана, где электроны взаимодействуют с покрытием экрана. В результате взаимодействия испускается видимый свет.
Изображение формируется за счет пробега луча электронов слева направо по горизонтальным линиям экрана (строкам развертки). Чтобы глаз не замечал смены кадров, пробег луча по всему экрану происходит с частотой, большей чем 25 Гц.
Луч электронов начинает пробегать по экрану с верхнего левого угла до правого верхнего угла. Когда луч доходит до правой стороны, он гасится и перемещается на следующую горизонтальную линию, находящуюся под предыдущей линией. После того как луч пробежит по всему экрану, он гасится и перемещается в верхний левый угол. Затем процесс повторяется снова. След от луча на экране образует растр (рис. 3.2).
PICTURE._FIG_20.PCX;6";4.308";PCX
Рисунок 3.2 Экран электронно-лучевой трубки
Изменяя силу тока в луче электронов при формировании им растра, можно менять интенсивность свечения отдельных элементов экрана - пикселов. Данные в видеопамяти как раз и определяют, как модулируется луч электронов во время сканирования экрана.
Для решения задач управления лучом электронов служит большинство регистров контроллера электронно-лучевой трубки (контроллера ЭЛТ).
D0 P0
D1 P1
D2 P2
D3 P3
D4 P4
D5 P5
D7-D6 Не используются.
Сегодня выпускается огромное количество всевозможных мониторов различных фирм-производителей. Мы постараемся классифицировать мониторы по их основным характеристикам: типу интерфейса с видеоадаптером, разрешающей способности, которая тесно взаимодействует с частотой кадров, количеству цветов, которые может отображать монитор, и по размеру отдельных пикселов изображения.
По типу интерфейса с видеоадаптером мониторы можно разделить на композитные, цифровые и аналоговые RGB. Перечислим основные характеристики каждого из интерфейсов:
Композитный. Монитор имеет один аналоговый вход. Видеосигнал поступает в монитор в стандарте NTSC (National Television System Commitete). Стандарт NTSC используется в бытовом телевидении. Композитный монитор обычно применяется совместно с видеоадаптером CGA
Цифровой. Имеет от одной до шести входных линий. На цифровом мониторе может отображаться до 2n различных цветов, где n равно количеству входных линий. Данный тип мониторов используется вместе с видеоадаптерами CGA и EGA
Аналоговый RGB. Имеет три аналоговые входные линии, управляющие красным, зеленым и синим цветами. Уровень напряжения на каждой линии отвечает за интенсивность соответствующего цвета на экране. Количество цветов, которые может отображать аналоговый монитор, ограничено практически только возможностями видеоадаптера. Аналоговый монитор используется совместно с адаптерами VGA, SVGA, графическими сопроцессорами, акселераторами Windows
Мониторы различаются по размеру зерна. Наибольшее распространение получили мониторы с зерном 0,28 мм, 0,31 мм и 0,39 мм. Мониторы с зерном 0,28 мм несколько дороже чем 0,39 мм, но зато обладают более высоким качеством. Мы рекомендуем приобретать мониторы с разрешением не больше 0,28 мм. На таких мониторах изображение более резкое и при работе за ними меньше устают глаза. Лучшие модели мониторов, например Sony Multiscan 15 SF, имеют зерно 0,25 мм.
Другими важными характеристиками монитора являются значения частот горизонтальной и вертикальной развертки, с которыми он может работать. Частота вертикальной развертки иногда также называется частотой кадров. В зависимости от этих частот и частоты синхросигнала видеоадаптера (описывается ниже) монитор может работать в режимах имеющих различное разрешение.
Монитор |
Совместимый с монитором видеоадаптер |
Количество цветов |
Разрешение в текстовом режиме |
Разрешение в графическом режиме |
Монохромный (MD) |
MDA, Hercules, EGA |
2 |
80х25 |
640х350 720х350 720х348 |
Цветной (CD) |
CGA, EGA |
16 |
40x25 80x25 |
320x200 640x200 |
Улучшенный цветной (ECD) |
CGA, EGA |
16 из 64 |
80х25 |
320х200 640х200 640х350 |
Многочастотный цифровой |
CGA, EGA |
16 из 64 |
40x25 80х25 |
320x200 640х200 640х350 |
Многочастотный аналоговый |
VGA, SVGA |
256 |
80x25 |
640x480 800х600 |
Цветной VGA |
VGA |
256 |
40х25 80х25 |
320х400 640х400 |
Монохромный VGA |
VGA |
256 |
40х25 80х25 |
320х350 640х350 720х350 720х400 720х480 |
D2-D0 Не используются.
D3 Видео выход.
D4 Интенсивность.
D7-D5 Не используются.
Регистр CSR является доступным как для чтения, так и для записи. Регистр определяет линию сканирования символа, в которой начинается курсор. Вместе с регистром конечной линии курсора (CER) регистр CSR определяет размер и форму курсора.
D4-D0 Начальная линия курсора. (Рис. 4.3).
D5 Бит гашения курсора. Реализован только для видеоадаптеров VGA и SVGA. Если бит D5 содержит единицу, тогда текстовый курсор гаснет.
D7-D6 Не используются.
При установке режима работы видеоадаптера, BIOS загружает в регистр CSR следующие значения:
Режим |
0,1,2,3 |
4,5,6,D,E,F,10 |
7 |
Содержимое регистра |
06 |
00 |
0Bh |
Регистр используется видеоадаптерами EGA, VGA и SVGA для определения начала импульса гашения луча горизонтальной развертки.
При установке режима работы видеоадаптера, BIOS загружает в регистр SHBR следующие значения:
Режим |
0,1,4,5,D |
2,3 |
6,E |
7,F |
10 |
Содержимое регистра |
2Dh |
5Ch |
59h |
56h |
53h |
Если используется улучшенный цветной монитор, то эти значения отличаются:
Режим |
0,1 |
2,3 |
Содержимое регистра |
2Bh |
53h |