Графические устройства

         

Стандартизация видеорежимов

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

Характеристики видеорежимов

Прежде всего, видеорежимы делятся на текстовые и графические. В зависимости от типа режима прикладная задача записывает в видеопамять или коды символов в стандарте ASCII, или коды отдельных точек графического объекта. При работе в графических режимах видеоконтроллер просто выводит на экран точки, коды которых хранятся в видеопамяти. При работе в текстовых режимах он, по кодам символов, выбирает их изображения из специальных таблиц, а затем выводит точки изображений на экран.



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

Точки, расположенные по горизонтали, образуют строку, а по вертикали — столбец (в документации на BIOS используются термины row (ряд) и column (столбец). Количество точек в строке и в столбце не может быть произвольным, оно всегда кратно восьми. Максимально возможное количество точек в строке зависит от разрешающей способности монитора и его геометрических размеров. У современных мониторов минимальное расстояние между центрами смежных точек составляет от 0,28 до 0,26 мм. При размере экрана 14 дюймов по диагонали количество точек в строке не превышает 1024. У 15-дюймовых мониторов оно достигает значения 1280. Однако возможность работы в режимах с высоком разрешением зависит еще и от видеокарты, о чем будет сказано ниже.

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

Важной характеристикой видеорежимов является количество цветов, которое можно одновременно отобразить на экране. Во всех графических режимах цвет получается в результате совмещения в одной точке экрана трех базовых цветов (красного, зеленого и синего) разной интенсивности. В зависимости от видеорежима коды базовых цветов располагаются либо в специальных регистрах видеокарты, либо в видеопамяти, т. е. непосредственно в коде точки. Первую категорию режимов принято называть packed pixel graphics (упакованная точечная графика), а вторую- direct color (непосредственный цвет). Вторая категория, в свою очередь, делится на режимы Hi-Color и True Color. В любом случае от видеорежима зависят размер кода точки и размеры кодов базовых цветов.

Видеорежимы VESA

Разработчикам стандарта VESA предстояло, в первую очередь, ограничить разнообразие применявшихся на практике видеорежимов, связав с каждым из них конкретный код и набор характеристик. В двух первых версиях стандарта было описано 8 графических режимов packed pixel graphics и 5 текстовых режимов высокого разрешения. Графические видеорежимы direct color были введены в третьей версии стандарта. Коды режимов VESA и их характеристики перечислены в табл. 1.1.

Таблица 1. 1. Видеорежимы VESA

Код режима
Количество точек в строке
Количество строк по вертикали
Размер точки в битах
Размер строки в байтах
Количество цветов
VESA редакции 1.0 и 1.1
100h
640
400
8
640
256
101h
640
480
8
640
256
102h
800
600
4
100
16
103h
800
600
8
800
256
104h
1024
768
4
128
16
105h
1024
768
8
1024
256
106h
1280
1024
4
160
16
107h
1280
1024
8
1280
256
108h
80
60
160
16
109h
132
25
-
264
16
10Ah
132
43
-
264
16
10Bh
132
50
264
16
10Ch
132
60
-
264
16
VESA peдакции 1.2
10Dh
320
200
15
640
32К
1QEh
320
200
16
640
64К
10Fh
320
200
32/24
1280/960
16М
110h
640
480
15
1280
32К
111h
640
480
16
1280
64К
11 2h
640
480
32/24
2560/1920
16М
113h
800
600
15
1600
32К
114h
800
600
16
1600
64К
115h
800
600
32/24
3200/2400
16М
116h
1024
768
15
2048
32К
117h
1024
768
16
2048
64К
118h
1024
768
32/24
4096/3072
16М
119h
1280
1024
15
2560
32К
11Ah
1280
1024
16
2560
64К
11Bh
1280
1024
32/24
5120/3840
16М

В первом столбце табл. 1.1 перечислены коды видеорежимов. Это шестнад-цатеричные числа, поэтому в их записи могут встречаться не только цифры, но и латинские буквы от А до F, а в конце кода обязательно указывается латинская буква n (lOOh = 256). В остальных столбцах таблицы приведены десятичные числа. В последнем столбце, для сокращения записи количества цветов, использованы буквы к и м. Они обозначают степени числа два, наиболее близкие по значению к тысяче (к=1024) и миллиону (м=Ю4857б). Соответственно, количество цветов может быть следующим:
32К = 32768, 64К = 65536, 16М = 16777216.

В графических режимах размер строки указан в точках, а в текстовых — в виде количества символов. В текстовых режимах ширина символов постоянна и составляет 8 точек, а высота — 8 или 16 точек.
Классификация режимов. Перечисленные в табл. 1.1 видеорежимы делятся на следующие пять групп:

  • текстовые режимы;
  • 16-цветные режимы (EGA);
  • packed pixel graphics (256 цветов);
  • Hi-color (direct color 32K или 64К цветов);
  • True Color (direct color 16M цветов).

Этим группам соответствуют 4 разные модели видеопамяти, поскольку разновидности режимов direct color используют одну модель. В описании стандарта понятие "модель видеопамяти" четко не объясняется, но речь идет
о том, как видеоконтроллер интерпретирует содержимое байтов видеопамяти. Для программиста важно знать не модель, а способ доступа к видеопамяти и что при этом записывается в ее байты.

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

Текстовые режимы VESA просто расширяют возможности аналогичных режимов IBM и позволяют использовать стандартные процедуры BIOS, предназначенные для работы с текстом. Программирование в текстовых режимах описано в первой части главы 5.

Режимы packed pixel graphics отличаются от режима VGA IBM тем, что введено сегментирование видеопамяти, все пространство которой делится на окна размером по 64 Кбайт. Своевременное переключение окон позволяет работать с большим пространством видеопамяти, которое требуется для поддержки видеорежимов с высоким разрешением. Напомним, что в режиме VGA IBM разрешение составляет 320x200 точек (сравните с табл. 1.1).

В режимах packed pixel graphics между кодами точки и цвета нет однозначного соответствия, поскольку они расположены в разных устройствах видеокарты. Коды точек хранятся в видеопамяти, а коды их цветов — в специальных регистрах видеокарты. Изменяя содержимое этих регистров, можно изменить все цвета, использованные в изображении, без обращения к видеопамяти, т. е. не изменяя кодов точек образа рисунка. Количество регистров (256) определяет размер кодов точек — 1 байт (8 разрядов). В главе 3 описано программирование рисования и построения графических объектов в этих режимах, а в главе 4 — работа с цветом.

В режимах direct color базовые цвета расположены непосредственно в коде точки, который может содержать 2, 3 или 4 байта. На момент написания данной книги трехбайтовый код был обнаружен только у одного семейства акселераторов фирмы ATI. Размещение базовых цветов в коде точки значительно расширяет возможности работы с цветом и позволяет создавать различные спецэффекты, которые широко распространены в современной графике. Программирование в режимах direct color описано в главе 7. В этих режимах увеличивается размер кода точки, а следовательно, и пространство видеопамяти, необходимое для хранения содержимого рабочей области экрана. Например, 1 Мбайт видеопамяти достаточно для работы во всех режимах packed pixel graphics, кроме I07h, с разрешением 1280x1024 точки.

В то время как для поддержки режима H2h с разрешением всего 640x480 точек требуется 2 Мбайт, а для режима 11Bh с разрешением 1280x1024 необходимо 6 Мбайт видеопамяти. Поэтому возможность использования режимов с высоким разрешением зависит не только от монитора, но и от объема видеопамяти.

Выбор конкретного режима зависит от программиста и от особенностей задачи, которую ему предстоит решать. В режимах packed pixel graphics достигается максимальная производительность видеосистемы, но ограничены возможности манипуляций с цветом. В режимах direct color увеличиваются затраты оперативной и видеопамяти и замедляется процесс построения графических объектов, но существенно расширяются возможности работы с цветом. Вариантов много, есть из чего выбирать.

Коды режимов VESA и OEM

Код используется не только при установке видеорежима, но и во многих других случаях. Поэтому, со времен IBM, он хранится в специальном байте оперативной памяти, расположенном в области данных BIOS с абсолютным адресом 0449h. Старший разряд этого байта имеет специальное назначение, поэтому для записи кода видеорежима остается 7 разрядов и он может изменяться от о до 7Fh. Первые 20 значений (от о до 13h) отведены для кодов режимов IBM. Использование остальных значений кодов ничем не регламентировано.

Значения кодов видеорежимов, соответствующих стандарту VESA, изменяются от100 до 11Bh. Такие числа не могут быть записаны в байт и, тем более, в его семь разрядов. Поэтому разработчики видеокарт по своему усмотрению заменяют 9-разрядные коды VESA 7-разрядными кодами OEM. Original Equipment Manufacturer (OEM) в дословном переводе означает "изготовитель оригинального оборудования", в нашем случае — изготовитель видеокарты, которая может собираться из микросхем и деталей других фирм. После установки режимов VESA в байте с адресом 0449h хранятся коды OEM, а в состав BIOS входит специальная таблица их соответствия режимам VESA. Коды OEM уникальны для каждой модели и могут не совпадать даже у видеокарт одного семейства.

По своему усмотрению разработчики видеокарт могут вводить дополнительные режимы, отличающиеся по характеристикам от режимов VESA и IBM. Например, у акселераторов фирм ATI и S3 добавлены режимы с разрешением 320x400, 400x300 и 512x384 точек. Можно предположить, что их удобно использовать при работе с кадрами телевизионных изображений. В соответствии с требованиями VESA коды и характеристики дополнительных режимов должны быть указаны в информационных блоках, хранящихся в области BIOS. Структура этих блоков и способ доступа к ним описаны в следующем разделе данной главы.

Набор режимов, введенный в VBE 1.2, VESA больше никогда не изменяла. В настоящее время выпускаются 20-дюймовые мониторы и видеокарты с объемом памяти 4 Мбайт и более. Это позволяет вводить новые видеорежимы с разрешением 1600x1200 точек. Такие видеорежимы поддерживают, например, видеокарты фирм S3 (VIRGE) и Matrox, в обоих случаях объем видеопамяти составляет 4 Мбайт. При этом код режима packed pixel graphics с разрешением 1600x1200 точек в одном случае I20h, а в другом -- ись. Кроме того, карты Matrox поддерживают режимы Hi-color с указанным разрешением.

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

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