Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

722

.pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
450.3 Кб
Скачать

Министерство образования Российской Федерации Воронежский государственный технический университет Кафедра автоматизированных и вычислительных систем

Лейкин М.А.

КОНСПЕКТ ЛЕКЦИЙ по дисциплине «Компьютерная графика»

для студентов специальности 220100 «Вычислительные машины, комплексы, системы и сети» дневной формы обучения

Воронеж – 2000 г.

УДК 681.3.06

Лейкин М.А. Компьютерная графика: Конспект лекций. Воронеж: Изд-во ВГТУ, 2000. 56 с.

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

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

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

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

Научный редактор д-р техн. наук С. Л. Подвальный

Рецензенты: кафедра естественнонаучных дисциплин Воронежского экономико-правового института; д-р техн. наук О. Я. Кравец

Печатается по решению редакционно-издательского совета Воронежского государственного технического университета.

©Лейкин М. А., 2000

©Оформление издательство Воронежского

государственного технического университета, 2000

1

Литература

1.Роджерс Д. Алгоритмические основы машинной графики.- М.:

Мир,1989.-512с.

2.Роджерс Д., Адамс Дж. Математические основы машинной графики. М.:Машиностроение,1980.

3.Фоли Дж., Ван Дам А. Основы интерактивной машинной графики/В 2-х томах.- М.: Мир,1985.

4.Ньюмен У., Спрулл Р. Основы интерактивной машинной графики.

- М.: Мир,1976.

5.Абрамов В.А., Дубровин В.С. Программное обеспечение микроЭВМ. Т.3.Прикладное программное обеспечение.- М.Высшая школа, 1991.-94c.

ВВЕДЕНИЕ

Машинная графика в настоящее время уже вполне сформировалась как наука. Существует аппаратное и программное обеспечение для получения разнообразных изображений - от простых чертежей до реалистичных образов естественных объектов. Десятилетие назад

подобные средства стоили тысячи долларов, а

сегодня

их

цена

уменьшилась

в десятки раз. Во многих случаях

вполне

приемлемые

результаты

дает оборудование стоимостью всего

в несколько

сотен

долларов.

Машинная графика используется почти

во всех научных и

инженерных дисциплинах для наглядности восприятия и передачи

информации. Знание ее основ в наше время необходимо

любому

ученому или инженеру. Машинная графика властно

 

вторгается

в

бизнес,

медицину, рекламу, индустрию развлечений.

Применение

во

время

деловых совещаний демонстрационных слайдов,

подготовленных

методами машинной графики и другими средствами

 

автоматизации

конторского труда, считается нормой. В медицине

становится

обыденным получение трехмерных изображений внутренних органов

по

данным

компьютерных томографов. В наши дни телевидение и

другие

рекламные предприятия часто прибегают к услугам машинной

графики

и компьютерной мультипликации. Использование машинной графики

в

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

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

ОБЗОР МАШИННОЙ ГРАФИКИ

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

·изображения представляются в машинной графике;

·изображения готовятся для визуализации;

·предварительно подготовленные изображения рисуются;

·осуществляется взаимодействие с изображением.

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

2

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

¦

 

 

¦Р4

 

Р3

1.0+---------------

 

+

¦

Е3

¦

¦¦

¦Е4 S1 Е2¦

¦¦

¦Е1 ¦Р2

Р1+

----------------------

0

1.0

Р1(0,0), Р2(1,0),Р3(1,1),Р4(0,1) .

Соответствующее алгоритмическое описание может выглядеть так: Соединить последовательно Р1Р2Р3Р4Р1.

Единичный квадрат также можно описать с помощью четырех ребер: Е1 = Р1Р2, Е2= Р2Р3, Е3 = Р3Р4, Е4 = Р4Р1.

Здесь алгоритмическое описание таково:

Изобразить последовательно ребра Е1Е2Е3Е4 И наконец, для описания единичного квадрата как многоугольника можно использовать либо точки, либо ребра. Например,

S1= P1P2P3P4P1 или P1P4P3P2P1

или S1 = E1E2E3E4

Основные строительные блоки (точки) в зависимости от размерности пространства можно представлять либо как пары, либо как тройки чисел. Таким образом, (x1,y1) или (x1,y1,z1) представили бы отрезок, или ребро, а совокупность из трех или более точек - многоугольник, Эти точки, ребра, многоугольники накапливаются. или хранятся, в базе данных. Данные, из которых получают рисунок, редко совпадают с данными, служащими непосредственно для рисования. Данные, используемые для вывода изображения, часто называют дисплейным файлом. В нем содержится некоторая часть, вид или сцена изображения, представленного в общей базе данных. Выводимое изображение обычно формируется с помощью операций поворота, переноса, масштабирования и вычисления различных проекций данных. Как правило, эти основные видовые преобразования выполняются с помощью матричных (4х4) операций над данными, представленными в однородных координатах. Эти операции часто реализуются аппаратно. Прежде чем рисовать окончательный результат, можно добавить удаление невидимых линий или поверхностей, произвести закраску, учесть влияние прозрачности, нанести текстуру и воспроизвести цветовые эффекты. Если не надо рисовать изображение, представленное во всей базе данных, то следует выбрать соответствующую его часть. Данный процесс называется отсечением. Отсечение может быть двухили трехмерным. В некоторых случаях отсекающее окно или объем могут быть с дырами или иметь нерегулярную форму. Отсечение относительно стандартных областей часто реализуется аппаратно.

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

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

ГРАФИЧЕСКИЕ ДИСПЛЕИ НА ЗАПОМИНАЮЩЕЙ ТРУБКЕ

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

Дисплей на запоминающей трубке способен изображать фактически неограниченное количество векторов, а мерцание изображения вообще невозможно. Его разрешение обычно составляет 1024 х 1024 адресуемых точек (10 бит) на экране 8х8 дюймов (ЭЛТ с диагональю 11 дюймов), или 4096 х 4096 (12 бит) либо на экране 14 х 14 дюймов (ЭЛТ с диагональю 19 дюймов), либо на экране 18 х 18 дюймов (ЭЛТ с диагональю 25 дюймов). По вертикали обычно видно только 78% адресуемой области.

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

ВЕКТОРНЫЕ ГРАФИЧЕСКИЕ ДИСПЛЕИ С РЕГЕНЕРАЦИЕЙ ИЗОБРАЖЕНИЯ

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

3

на базе ЭЛТ

используется люминофор с

очень

коротким временем

послесвечения.

Такие дисплеи часто

называют

дисплеями с

произвольным

сканированием. Из-за того,

что

послесвечения

люминофора мало, изображение на ЭЛТ за секунду должно многократно перерисовываться или регенерироваться. Минимальная скорость регенерации должна составлять по крайней мере 30 (1/с), а предпочтительнее от 40 до 50 (1/с). Скорость регенерации, меньшая 30 (1/с), приведет к тому, что изображение будет мерцать, как это бывает, когда кинофильм прокручивается слишком медленно. На такое изображение неприятно смотреть и его трудно использовать.

Для векторного дисплея с регенерацией требуется кроме ЭЛТ еще два

элемента:

дисплейный буфер и

дисплейный контроллер.

Дисплейный

буфер -

это непрерывный

участок

памяти,

содержащий всю

информацию,

необходимую для вывода изображения

на ЭЛТ. Функция

дисплейного

контроллера заключается

в том,

чтобы

циклически

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

операций,

как

преобразование и отсечение,

генерация

текстовой

информации.

 

 

 

 

 

На рис. 1

представлены блок-схемы двух высокопроизводительных

векторных

дисплеев. В обоих случаях предполагается,

что такие

геометрические

преобразования,

как

поворот,

перенос,

масштабирование, перспективное проецирование и отсечение,

реализованы

 

аппаратно

в

геометрическом

процессоре.

 

 

 

 

 

+----------

 

+ +------

 

+ +----------

 

+ +---------

+

 

 

+---

+

¦Геометри- ¦ ¦ Дисп-¦ ¦

Дисп-

¦ ¦Генератор¦

+---

+

¦ЦПУ+----

¦ ческий

+-¦лейный+-¦ лейный

+-¦векторов/+--

¦ЭЛТ¦

+---

+

¦процессор

¦ ¦ буфер¦ ¦контроллер¦ ¦ литер

¦

+---

+

 

 

+----------

 

+ +------

 

+ +----------

 

+ +---------

+

 

 

 

 

+------

++----------

 

+

+----------

 

+ +---------

+

 

 

+---

+

¦ Дисп-¦¦Геометри- ¦

¦

Дисп-

¦ ¦Генератор¦

+---

+

¦ЦПУ+----

¦лейный+¦ ческий

+

--¦ лейный

+-¦векторов/+--

¦ЭЛТ¦

+---

+

¦ буфер¦¦процессор ¦

¦контроллер¦ ¦ литер

¦

+---

+

 

 

+------

++----------

 

+

+----------

 

+ +---------

+

 

 

Рис. 1

В первом случае геометрический процессор работает медленнее, чем это необходимо при регенерации применяемых на практике изображений (от 4000 до 5000 векторов). Таким образом, геометрические данные, посылаемые центральным процессорным устройством (ЦПУ) графическому дисплею, обрабатываются до сохранения в дисплейном буфере. Значит, в нем содержатся только те инструкции, которые необходимы генератору векторов и литер для вывода изображения. Дисплейный контроллер считывает информацию из дисплейного буфера

ипосылает ее генератору векторов и литер. При достижении конца дисплейного буфера контроллер возвращается на его начало, и цикл повторяется снова.

При использовании первой схемы возникает идея двойной буферизации

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

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

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

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

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

Разные типы сегментации возможны для второй конфигурации. Напомним, что здесь база данных изображения сохраняется в дисплейном буфере в мировых (пользовательских) координатах, а обработка изображения происходит "на лету", в каждом цикле регенерации. Информацию в динамическом сегменте можно изменить с помощью функций, предоставляемых геометрическим процессором. Таким образом, модификация изображения может происходить локально в графическом устройстве и для этого связь с ЦПУ не нужна.

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

Для того чтобы проиллюстрировать значимость скорости или ширины полосы пропускания между ЦПУ и графическим устройством, рассмотрим затраты на интеллектуальное изменение кривой, описываемой 250 отрезками или точками. Каждая точка задается тремя координатами. Пусть для представления чисел с плавающей точкой используется шесть значащих цифр (литер) и пусть каждая литера задается отдельным байтом. Тогда при скорости регенерации 30 кадров в секунду и при условии, что модификация производится в

4

каждом цикле регенерации, требуемая ширина полосы пропускания связи составляет

30 х ((кол-во тчк) х (кол-во коорд./тчк) х (кол-во знач. цифр/тчк) х (кол-во бит/литера))

или 30 х (250) х (3) х (6) х (8) = 1 080 000 бит/с.

Таким образом, необходимая скорость передачи данных может легко превысить 1 Мбит/с. Для сложных трехмерных скульптурных поверхностей требуемая ширина полосы пропускания может легко возрасти в 10 раз, т. е. достигнуть 10 Мбит/с. В большинстве случаев для поддержки интеллектуальной динамической графики в реальном масштабе времени такие скорости требуют применения параллельного интерфейса или интерфейса прямого доступа в память (DМА) между ЦПУ и графическим устройством.

РАСТРОВЫЕ ГРАФИЧЕСКИЕ ДИСПЛЕИ С РЕГЕНЕРАЦИЕЙ ИЗОБРАЖЕНИЯ

Как дисплеи на запоминающих ЭЛТ, так и дисплеи с произвольным сканированием являются устройствами рисования отрезков, т. е. отрезок прямой может быть нарисован непосредственно из любой адресуемой точки в любую другую. Графическое устройство на растровой ЭЛТ работает по-другому. Растровое устройство можно рассматривать как матрицу дискретных ячеек (точек), каждая из которых может быть подсвечена. Таким образом, оно является точечно-рисующим устройством. Невозможно, за исключением специальных случаев, непосредственно нарисовать отрезок прямой из одной адресуемой точки или пиксела в матрице в другую адресуемую точку или пиксел. Отрезок можно лишь аппроксимировать последовательностями точек (пикселов), близко лежащих к реальной траектории отрезка. Чаще всего, отрезки будут выглядеть как последовательности ступенек. Это явление называется лестничным эффектом, или "зазубренностью". Методы, позволяющие устранять лестничный эффект, будут обсуждаться позже.

Чаще всего для графических устройств с растровой ЭЛТ используется буфер кадра. Буфер кадра представляет собой большой непрерывный участок памяти компьютера. Для каждой точки, или пиксела, в растре отводится как минимум один бит памяти. Эта память называется битовой плоскостью. Для квадратного растра размером 512х512 требуется 262144 бита памяти в одной битовой плоскости. Изображение в буфере кадра строится побитно. Из-за того, что бит памяти имеет только два состояния (двоичное 0 или 1), имея одну битовую плоскость, можно получить лишь черно-белое изображение. Битовая плоскость является цифровым устройством, тогда как растровая ЭЛТ - аналоговое устройство, для работы которого требуется электрическое напряжение. Поэтому при считывании информации из буфера кадра и ее выводе на графическое устройство с растровой ЭЛТ должно происходить преобразование из цифрового представления в аналоговый сигнал. Такое преобразование выполняет цифро-аналоговый преобразователь (ЦАП). Каждый пиксел буфера кадра должен быть считан и преобразован, прежде чем он будет отображен на растровой ЭЛТ.

Цвета или полутона серого цвета могут быть введены в буфер кадра путем использования дополнительных битовых плоскостей. Интенсивность каждого пиксела на ЭЛТ управляется содержимым соответствующих пикселов в каждой из N битовых плоскостей. В соответствующую позицию регистра загружается бинарная величина из каждой плоскости. Двоичное число, получившееся в результате, интерпретируется как уровень интенсивности между 0 и 2^N-1. С помощью ЦАП это число преобразуется в напряжение между 0 (темный экран) и 2^N-1 (максимальная интенсивность свечения). Всего можно получить 2^N уровней интенсивности.

Число

доступных уровней интенсивности

можно

увеличить

незначительно расширив требуемую для

этого

память

и

воспользовавшись таблицей цветов. После считывания из буфера кадра битовых плоскостей получившееся число используется как индекс в таблице цветов. В этой таблице должно содержаться 2^N элементов. Каждый ее элемент может содержать W бит, причем W может быть больше N. В последнем случае можно получить 2^W значений интенсивности, но одновременно могут быть доступны лишь 2^N из них. Для получения дополнительных значений интенсивностей таблицу цве-

тов необходимо изменить

(перезагрузить).

 

 

Поскольку

существует

три основных цвета, можно реализовать

простой

цветной буфер

кадра с тремя битовыми плоскостями,

по

одной

для

каждого из основных цветов. Каждая битовая

плоскость

управляет индивидуальной электронной пушкой для каждого

из

трех

основных цветов, используемых в видеотехнике. Три основных цвета,

комбинируясь

на

ЭЛТ,

дают восемь цветов. Эти цвета и

соответствующие им двоичные коды приведены в таблице.

 

Цветовые

комбинации для простого буфера кадра

 

 

с

тремя

битовыми плоскостями

 

Красный

Зеленый

Синий

Черный

0

 

0

0

Красный

1

 

0

0

Зеленый

0

 

1

0

Синий

0

 

0

1

Желтый

1

 

1

0

Голубой

0

 

1

1

Пурпурный 1

 

0

1

Белый

1

 

1

1

Для каждой из трех цветовых пушек могут использоваться дополнительные битовые плоскости. Например, если рассмотреть цветной буфер кадра с 8 битовыми плоскостями на каждый цвет, то есть буфер кадра с 24 битовыми плоскостями. Каждая группа битовых плоскостей управляет 8-разрядным ЦАП. Каждая такая группа может генерировать 256 (2^8) оттенков или интенсивностей красного, зеленого или синего цвета. Их можно скомбинировать в 16 777 216 возможных цветов. Это "полноцветный" буфер кадра. Полноцветный буфер кадра может быть далее еще увеличен путем использования групп битовых плоскостей в качестве индексов в таблицах цветов. При N битах на цвет и W-разрядных элементах таблиц цветов одновременно может быть показано (2^3)^N цветовых оттенков из палитры (2^3)^W возможных цветов. Например, при буфере кадра с 24 битовыми плоскостями (N = 8) и тремя 10-разрядными таблицами цветов (W = 10) может быть получено 16 777 216 (2^24) цветовых оттенков из палитры 1 073 741 824 (2^30) цветов, т. е. около 17 млн. оттенков из палитры немногим меньше чем 1 миллиард цветов. Из-за большого количества пикселов в растровых графических устройствах трудно достичь производительности, необходимой для работы в реальном времени, а также приемлемой скорости регенерации, или смены, кадра. Например, если среднее время доступа к каждому индивидуальному пикселу равно 200 нс, то для доступа ко всем пикселам кадра размером 512 х 512 потребуется 0.0524 с. Это эквивалентно скорости регенерации 19 кадров (картинок) в секунду, что значительно ниже минимально необходимой скорости 30 кадров в секунду. В буфере кадра размером 1024 х 1024 содержится немногим больше 1 млн бит (1 Мбит) и при среднем времени доступа 200 нс требуется 0.21 с для доступа ко всем пикселам. Это составляет 5 кадров в секунду. Буфер кадра размером 4096 х 4096 содержит 16.78 млн бит на каждую битовую плоскость! Доступ к ним займет 0.3 с. Для достижения скорости регенерации 30 кадров в секунду при таком растре

5

требуется средняя эффективная скорость доступа 2 нс/пиксел. Работа в реальном времени с растровыми графическими устройствами осуществляется путем одновременного доступа к группам по 16, 32, 64 и более пикселов. В случае цветного буфера кадра каждый пиксел может содержать до 32 бит, при этом все битовые плоскости для каждого пиксела доступны одновременно. При среднем времени доступа для каждой группы пикселов 1600 нс возможна работа в реальном времени для буферов кадров размером 512 х 512 и 1024 х 1024. Хотя производительности, необходимой для работы в реальном масштабе времени с приемлемыми скоростями регенерации, на растровых устройствах достичь труднее, чем на векторных дисплеях с регенерацией, на них легче изображать сплошные фигуры с плавными переходами цветов.

УПРАВЛЕНИЕ ВИДЕОСИСТЕМАМИ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ

Прежде чем создать изображение, зеркала должны чуть-чуть поразмышлять

(Ж. Кокто) Аппаратные средства для вывода информации на экран включают видеоадаптер и монитор. Видеоадаптер - это сложное устройство, управляемое собственным микропроцессором, сравнимым по мощности

с центральным процессором ПК.

Видеоадаптер состоит из 2-х частей: контроллера электрон- но-лучевой трубки (ЭЛТ) и видеопамяти. Кроме этого современные видеоадаптеры имеют в своем составе ряд дополнительных узлов, например, контроллеры графики (для быстрой манипуляции содержимым видеопамяти). С видеопамятью связан видеобуфер. Основное назначение видеобуфера - хранение образа информации экрана. Видеоадаптер 25-30 раз в секунду освежает изображение на экране. Изображение строится из точек - пикселов, которые объединяются в телевизионные строки. Число пикселов в строке и число строк различно для разных типов видеоадаптеров.

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

Исторически складывались следующие стандарты видеоадаптеров персональных вычислительных систем:

MDA - монохроматический адаптер дисплея CGA - цветной графический адаптер

EGA - усовершенствованный графический адаптер

VGA - графический видеомассив(video graphics array)

SVGA - супер VGA

MCGA - многоцветный графический массив(для PS/2 модель 30) XGA - стандарт IBM для PS/2

Hercules (HGC - Hercules graphics Carol)- для черно-белых мониторов и видеосистем.

Управление параметрами видеосистемы может выполнятся:

-на уровне портов видеоадаптеров;

-обращением к функциям BIOS.

ВИДЕОРЕЖИМЫ

Видеоадаптер способен работать в некотором множестве режимов. Режим является интегральной характеристикой особенностей

работы видеоадаптера. Поведение видеоадаптера в том или ином режиме полностью характеризует доступные для программиста средства управления видеоадаптером. Чем совершеннее видеоадаптер, тем больше режимов он поддерживает. Отмечается полная совместимость видеоадаптеров снизу вверх:MDA-CGA-EGA-VGA-SVGA.

Основные характеристики видеорежима:

1.Тип (текстовый, графический)

2.Максимальное число цветов

3.Число цветов в палитре

4.Размеры шрифта (8х8, 8х14, 8х16, 9х16, 9х14)

5.Максимальное число страниц (до 8)

6.Разрешение в тексте (число текстовых строк и число знакомест в одной строке)

7.Разрешение в графике (определяется числом пикселов по горизонтали и вертикали экрана)

8.Адрес начала видеобуфера.

Видеорежим с номерами 0-6

- CGA-режим

Видеорежим с номерами 0Dh-10h

- EGA-режим

Видеорежим с номерами

11h-13h

- VGA-режим

Видеорежим с номерами

1Fh и более

- SVGA-режим

Видеорежим с номерами 100h и более - SVGA-режим в стандарте

VESA (Video Electronics Standards Assocation).

При всем многообразии режимов работы видеоадаптеров их можно объединить в две группы: текстовые и графические. Переключение из текстовых режимов в графические означает полное изменение логики работы видеоадаптера с видеобуфером.

ТЕКСТОВЫЕ РЕЖИМЫ

Экран рассматривается как совокупность текселов (текстовые элементы). Каждому знакоместу экрана соответствует два байта памяти видеобуфера. Байт по четному адресу хранит ASCII-код символа, по нечетному - байт атрибутов:

7

6

5

4

3

2

1

0

7

0

+-------------------------------------------------

 

 

 

 

 

 

 

 

+

¦BL ¦R ¦G ¦B ¦I ¦R ¦G ¦B ¦ ASCII-код

¦

+-------------------------------------------------

 

 

 

 

 

 

 

 

+

¦\______/ ¦ \______/

¦

цвет фона ¦

цвет фона

¦

символа ¦

символа

¦+-- яркость символа (1-повышенная,

+---- мерцание

символа

0-нормальная)

(1-есть,

0-нет)

 

 

Цвета:

 

0h-черный

 

8h-серый

1h-синий

 

9h-светло-синий

2h-зеленый

Ah-светло-зеленый

3h-голубой

Bh-светло-голубой

4h-красный

Ch-светло-красный

5h-фиолетовый

Dh-светло-фиолетовый

6h-коричневый

Eh-желтый

7h-белый

 

Fh-ярко-белый

Например, 04h - красный символ на черном фоне.

Видеопамять при работе в текстовом режиме доступна для не-

6

посредственного доступа из программы, т.е. возможны чтение и запись. Адрес:

addr = (y * max_col + x) + beg_addr,

х и y отсчитываются от нуля; x - номер колонки в строке, y - номер строки; max_col - число знакомест в строке; beg_addr - адрес начала страницы.

Под адресом здесь понимается только смещение, так как все страницы находятся в одном сегменте. В зависимости от номера видеорежима изменяется начальный адрес видеобуфера: 0..6 - B8000h; 7 - B0000h; >7 - A0000h. Видеоадаптер в текстовом режиме 25-30 раз в секунду считывает содержимое видеобуфера и по коду символа, по байту атрибутов рисует пикселы, задающие очертание символа и фон. Код символа служит индексом для входа в таблицу знакогенератора. В ней содержится карта, по которой видеоадаптер расставляет пикселы символа.

+-----------------

+

¦0 0 0 0 0 0 0 0 ¦ Биты в карте хранятся последовательно

¦0 0 0 1 1 0 0 0 ¦ (0-ая строка, 1-ая строка и т.д.).

¦0 0 1 0 0 1 0 0 ¦

¦ 0 1 0 0 0 0 1 0 ¦ Карта символа А.

¦0 1 1 1 1 1 1 0 ¦

¦0 1 0 0 0 0 1 0 ¦

¦0 1 0 0 0 0 1 0 ¦

¦0 0 0 0 0 0 0 0 ¦

+-----------------+

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

Число знакомест в строке зависит от выбранного режима и составляет 40, 80 или 132 позиции.

Число текстовых строк зависит от типа видеоадаптера и выбранного режима. При определении числа текстовых строк видеоадаптер учитывает соотношение полного числа телевизионных строк вертикального размера битовой карты символа. Например, если число телестрок = 200, то на экране возможно разместить 25 строк (по 8 линий). Если 350 телестрок, то 43 (по 8 линий) или 25 (по 14 ли-

ний). Если 400 - то 25 (по 16), 28 (по 14), 50 (по 8).

ГРАФИЧЕСКИЕ РЕЖИМЫ

Появляется возможность управлять цветом любой точки экрана. Экран представляет собой матрицу пикселов: видеоадаптер хранит коды цветов в видеобуфере. При этом для видеорежимов 4..6, 13h возможен непосредственный доступ к видеопамяти из программы. В различных режимах видеопамять используется по разному. Видеорежимы 4,5 - четырехцветные. Для кодирования цвета достаточно 2-х битов. Таким образом в одном байте помещается информация о цвете 4-х подряд расположенных в строке пикселов. На строку требуется 80 байт; на весь экран - 16000 байт. Код цвета представляет собой номер цвета в заранее предопределенной палитре (для CGA - четыре жестко заданные палитры, EGA, VGA, SVGA - определяемые палитры).

Видеорежим 6 - 2-х цветный (640х200). Код цвета занимает 1 бит. Память - 16К. Коды пикселов нечетных и четных строк сгруппированы в два массива: смещение 0h от начала видеобуфера - четные; смещение 2000h от начала видеобуфера - нечетные.

Видеорежимы 0Dh..10h: на каждый пиксел отводится 4 бита (т.е. на экране могут отображаться 16 цветов одновременно).

 

 

 

 

 

 

 

 

 

+--------------------

 

 

 

 

+

 

 

 

 

 

 

 

 

 

¦ 0Dh

--

320x200

¦

 

 

 

+--------------------

 

 

 

 

 

+ ¦ 0Eh

--

640x200

¦

Регистры

 

¦

Номер ¦ Значение

¦ ¦ 0Fh

--

640x350-моно¦

палитры

 

+--------

 

+-----------

 

 

 

¦ ¦ 10h

--

640x350

¦

 

 

 

¦

0

¦

000000

¦ +--------------------

 

 

 

 

+

+--------------

 

 

1

¦

000001

¦------

 

+

 

 

 

¦

 

 

¦

..............

 

 

 

 

¦

 

¦

 

 

 

¦

 

 

¦

14

¦

111110

¦------

 

+-+

 

 

 

¦

 

+

-->¦

15

¦

111111

¦

 

¦ ¦

 

 

 

¦

 

¦

+--------------------

 

 

 

 

 

+

+-+-+-------------

 

 

+

¦

 

¦

 

 

 

 

 

 

 

¦

. .

 

 

¦

¦

B +------------------------

 

 

 

 

 

 

+

 

¦

 

 

 

¦

¦

G +-----------------------

 

 

 

 

 

+

¦

 

¦

 

 

 

¦

¦ R +----------------------

 

 

 

 

+

¦

¦

 

¦

 

 

 

¦

+---------------------

 

 

 

 

+

¦

¦

¦

 

+-----------------

 

 

 

+

I ¦

 

 

 

 

¦

¦

¦

¦

 

 

Экран монитора

¦

 

 

 

 

¦

¦

¦

¦

 

 

 

 

 

 

200 ¦

 

 

 

 

¦

¦

+

--+

 

 

 

 

 

 

¦

 

 

 

 

¦

+--

+

 

 

 

 

 

 

 

¦

 

 

 

 

+--

+

 

 

 

 

 

 

 

 

+---------------------

 

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

320

 

Видеопамять

 

 

 

 

 

 

Конкретному адресу видеобуфера соответствует 4 байта на би-

товых планах,

которые

кодируют

 

цвет

восьми соседних пикселов

строки.

Код цвета --

это номер одного из 16

регистров

палитры

(6-ти разрядные). Возможные цвета (из 64) задаются форматом

 

r g b

 

R G B

 

 

 

 

 

 

 

 

 

 

 

+-----

+

+

-----+

 

 

 

 

 

 

 

 

 

 

 

половинная

 

полная

 

 

 

 

 

 

 

 

 

 

 

интенсивность

 

 

 

 

 

 

 

 

 

 

 

Результирующий сигнал образуется сложением сигналов

цвета,

т.е. возможны 3 градации яркости

--

половинная,

единичная и по-

луторная.

 

 

 

 

 

 

 

 

 

 

 

 

 

VGA-адаптер

использует подобную косвенную схему преобразо-

вания кода цвета в реальный цвет на экране.

Но значение

в

ре-

гистре

палитры

задает

номер DAC-регистра (регистра ЦАП).

Для

VGA-адаптера используются аналоговые мониторы (для CGA,

EGA --

мониторы с

цифровым

 

уровнем

 

интенсивности

цвета,

 

т.е.

"вкл/выкл"),

для которых яркость

 

цветов определяется

уровнем

аналогового

сигнала

(напряжения). ЦАП

имеет 256 трехбайтовых

внутренних регистров (по байту для каждого цвета -

RGB).

 

Шесть

бит байта кодирует уровень интенсивности цвета (64). Число цветов равно 262144.

При работе VGA-адаптера в EGA-режимах используются 64 DAC-регистра. Возможно обращение к 4-м блокам DAC-регистров (по 64). В каждый момент времени активен только один из блоков (обычно блок 0).

VGA видеорежимы:

11h(VGA) - монохромный режим (640х480).

12h(VGA) - цветной режим (640х480) подобен видеорежиму 10h. 13h - цветной режим (320х200) с 256-мя цветами. Для кодирования цвета пиксела отводится 1 байт. Память - 64К. Возможен доступ к видеопамяти (как в 4-6 видеорежимах). Коды пикселов расположены подряд, без разделения на четные и нечетные строки. Код цвета пиксела задает номер DAC-регистра. Изменение значения

в DAC-регистре меняет цвет пиксела на экране.

Создателем SVGA считается фирма NEC Home Electronics.

7

Различные версии SVGA-видеоадаптеров поддерживают дополнительное множество режимов с разрешением от 512х512 до 1600х1200 и числом цветов 16, 256 и более. С появлением микросхемы DAC с расширенными возможностями были реализованы режимы реального представления цвета HiColor и TrueColor. В этих режимах данные из видеобуфера в процессе цифроаналогового преобразования интерпретируются не как номера регистров DAC, а непосредственно как цвет.

+----------------------------------------------------------

 

 

 

 

 

 

 

 

+

¦

¦

 

¦ Биты, отводимые под компоненты

¦

¦ Режим

¦ Количество

+---------------------------------

 

 

 

 

 

¦

¦

¦

битов

¦

B

¦

G

¦

R

¦

+----------

+-------------

 

+----------

 

+----------

 

+-----------

 

¦

¦ HiColor

¦

15

¦

0-4

¦

5-9

¦

10-14

¦

¦ HiColor

¦

16

¦

0-4

¦

5-10

¦

11-15

¦

¦ TrueColor¦

24

¦

0-7

¦

8-15

¦

16-23

¦

+----------------------------------------------------------

 

 

 

 

 

 

 

 

+

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

BIOS.

ОПРЕДЕЛЕНИЕ И НАСТРОЙКА ПАРАМЕТРОВ ВИДЕОАДАПТЕРА

Параметры видеосистемы содержатся в 2-х областях данных BI-

OS.

 

 

 

 

 

 

+------------------------------------------------------------

 

 

 

 

 

+

¦

Адрес ¦

 

Функция

¦ Размер ¦

+-------

+-------------------------------------------

 

 

+--------

 

¦

¦

40:49h¦

Текущий режим видеоадаптера

¦

1

¦

¦

4Ah¦

Число символов в строке

¦

2

¦

¦

4Ch¦

Длина буфера видеопамяти в байтах

¦

2

¦

¦

4Eh¦

Начальный адрес в буфере регенерации(сме- ¦

2

¦

¦

¦

щение от начала видеопамяти до начала ак- ¦

 

¦

¦

¦

тивной видеостраницы)

¦

 

¦

¦

50h¦

Позиция

курсора для страницы 0(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

52h¦

Позиция

курсора для страницы 1(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

54h¦

Позиция

курсора для страницы 2(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

56h¦

Позиция

курсора для страницы 3(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

58h¦

Позиция

курсора для страницы 4(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

5Ah¦

Позиция

курсора для страницы 5(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

5Ch¦

Позиция

курсора для страницы 6(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

5Eh¦

Позиция

курсора для страницы 7(младший

¦

2

¦

¦

¦

байт-столбец, старший байт-строка)

¦

 

¦

¦

60h¦

Форма курсора(младший байт-номер телеви-

¦

2

¦

¦

¦

зионной строки конца курсора)

¦

 

¦

¦

62h¦

Номер активной видеостраницы

¦

1

¦

¦

63h¦

Адрес CRT-контроллера (3D4h-для цветного

¦

2

¦

¦

¦

видеоадаптера, 3B4h-для монохромного

¦

 

¦

¦

¦

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

¦

 

¦

¦

65h¦

Текущая установка порта 3D8h (CRT MODE)

¦

1

¦

¦

¦

Регистр выбора режима 3B8h (для монохром- ¦

 

¦

¦

¦

ного видеоадаптера)

¦

 

¦

¦

66h¦

Текущая установка порта 3D9h (CRT Palette)¦

1

¦

¦

¦

Регистр выбора цвета 3B9h

¦

 

¦

+-------

+-------------------------------------------

 

+--------

 

¦

¦ 40:84h¦

Число строк текста для активного режима

¦

1

¦

¦

¦

(для CGA видеоадаптера = 0)

¦

 

¦

¦

85h¦

Высота матрицы,задающей изображение симво-¦

2

¦

¦

¦

ла на экране

¦

 

¦

¦

87h¦

Байт INFO

¦

1

¦

¦

88h¦

Байт INFO3

¦

1

¦

¦

89h¦

Байт FLAGS

¦

1

¦

¦

8Ah¦

Индекс в таблице DCC (тип видеоадаптера и ¦

 

¦

¦

¦ дисплея

¦

1

¦

+------------------------------------------------------------

 

 

 

 

+

Байт INFO

Бит.

0 - разрешена эмуляция текстового курсора;

1 - монохромный дисплей;

2 - BIOS должен ожидать Vertical Retrace, т.е.перемещение луча снизу вверх после прохождения всех строк, перед выполнением некоторых функций. Затем BIOS обнуляет этот флаг;

3

-

видеосистема неактивна;

 

4

-

резерв;

 

 

 

5,6 - размер

памяти

видеобуфера (0-64К, 1-128К,

2-192К,

3-256К);

 

 

 

 

7

- состояние бита 7 в AL функции 0 int 10h.

 

Байт INFO3 - в VGA 0,7 - резервный, но бит 3 = 0;

в EGA -

переключатели режимов (DIP-переключатели).

 

 

 

 

Байт FLAGS (VGA)

 

0

- VGA активен;

 

 

1

- разрешено серошкальное суммирование;

 

2

- использование монохромного дисплея;

 

3

- запрещена загрузка палитры по умолчанию;

 

4,7 - число сканируемых строк

 

 

 

7 бит

4 бит

 

 

 

 

0

0

350

 

 

 

0

1

400

 

 

 

1

0

200

 

 

 

1

1

480

 

5

- резерв;

 

 

 

6

- разрешено переключение дисплея.

 

В основном услуги по определению и настройке параметров видеосистемы выполняют функции прерывания 10h BIOS.

ЧТЕНИЕ И ВЫВОД ПИКСЕЛА ЧЕРЕЗ ПОРТЫ EGA И VGA ВИДЕОАДАПТЕРОВ

Непосредственный доступ к видеопамяти в видеорежимах ODh -

8

12h возможен только через операции с портами. Через порты осуществляется доступ к регистрам основных аппаратных блоков видеоадаптеров:

-внешним (EGA) или General (VGA) регистрам;

-регистрам секвенсора(порт 3C4h);

-регистрам CRTC (контроллера ЭЛТ 3D4h);

-регистрам графического контроллера (порт 3CEh);

-регистрам атрибута (палитры, 3D9h);

-регистрам DAC (VGA).

В указанный порт записывается номер регистра, а в смежный порт - значение, помещаемое в регистр:

int reg = 2;

_DX = 0x3C4; outportb(_DX++, reg); outportb (_DX, 0x0F); .

Отметим, что не все регистры позволяют записывать.

Особую роль играют регистры-защелки (latch-регистры). Каждому битовому плану соответствует по одному такому регистру и одному АЛУ. Оно комбинирует данные в регистр-защелку с данными из ЦП. При любой операции чтения адреса из видеобуфера

врегистр-защелку помещается по одному байту с каждого плана. Эти данные могут быть переданы в ЦП. Комбинирование данных ре- гистра-защелки с данными из ЦП осуществляется по операции записи

ввидеобуфер. Обязательно обновление регистра-защелки перед каждой записью в видеобуфер (т.е. необходимо чтение перед записью).

Чтение: char far *ptr = 0xA0000000;

char dummy;

............................

dummy = *ptr;

............................

Способы комбинирования: переопределение, XOR, AND, OR - задается битами 3-4 регистра вращения 3 графического контроллера

(порты 3CE, 3CF).

Выбор пиксела, подлежащего записи, из 8-ми пикселов, соответствующих байту в регистре-защелке, осуществляется регистром битовой маски (регистр 8 графического контроллера, позволяющий только запись). Выбор регистра-защелки осуществляется регистром маски карты (регистр 2 секвенсора. Биты 0-3 соответствуют планам 0-3, биты > 4 не используются).

Способ записи через эти 2 регистра называется режимом записи 0. Режим записи задается битами 0-1 регистра 5 графического контроллера (регистр режима).

НЕПРЯМОЙ МЕТОД ВЫВОДА ПИКСЕЛА

Метод дает высокопроизводительный код программы.

1.Вычисляется смещение до адреса видеобуфера, соответствующего пикселу с координатами x,y :

offset = bytes_per_page * page + y * bytes_per_line + x/8.

2.Формируется значение для регистра битовой маски:

mask = 0x80 >> (x % 8)

или

mask = 0x80 >> (x & 0x07).

3.Маска записывается в регистр 8 графического контроллера:

_DX = 0x3CE; outportb (_DX++,8); outportb (_DX--,mask);

4.Регистр вращения 3, в нем записывается способ комбинирования, например, 0х00 (переопределение) :

outportb (_DX++,3); outportb (_DX,0x00);

5. В регистре маски карты (2, секвенсор) записывается код деблокировки битовых планов, например, 0х0F - все битовые планы деблокированы :

_DX = 0x3C4; outportb (_DX++,2); outportb (_DX--, 0x0F);

6.Фиктивное чтение адреса со смещением offset для заполнения регистра-защелки:

register char _ES * offset;

...........................

_ES = 0xA000; _AL = *offset;

...........................

7.Запись по адресу offset значения 0, что очищает на всех планах по одному биту, соответствующему биту из регистра битовой маски. Регистр-защелка отгружаются в видеопамять и пиксел на экране "гаснет";

offset = 0;

8.В регистр маски карты загружается требуемый код цвета (т.е. номер регистра палитры):

outportb(_DX++,2); outportb(_DX,color);

9.Запись по адресу offset значения 0xFF. Код цвета вмещается на планы:

*offset = 0xFF;

Улучшения кода можно добиться путем использования двухбайтовых ассемблерных команд вывода в порт:

asm out dx,ax.

Например, для пункта 3

_DX = 0x3CE;

_AX = (mask<<8) | 0x08; asm out dx, ax

дает выигрыш более 10%.

Режим записи 1 предназначен для быстрого переноса байтов видеобуфера с одного места на другое. Например, прочтя А000:0000h (заполнив при этом регистр - защелку), можно перенести их текущее содержимое во 2-ую строку экрана, записав по адресу A000:0050h. Байты от ЦП игнорируются.

Режим записи 2 дает альтернативный способ вывода пиксела. Биты 0-3 байта из ЦП рассматриваются как код цвета. Этот код помещается в те биты регистра-защелки, для которых в регистре битовой маски записана 1. Например, если в регистре битовой маски записать 0хFF, то при *offset = 0x0F все пикселы байта offset будут иметь код цвета 0x0F (обычно ярко-белый). Режим хорошо использовать для быстрой заливки окна (экрана).

ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО КОДА ЦВЕТА

Есть 2 режима чтения. Задаются битом 3 регистра режима (регистр 5, графический контроллер, 0x3CE).

Режим чтения 0 : при любом обращении к адресу возвращается байт из одного регистра-защелки, номер которого определяется регистром 4 графического контроллера (регистр выбора карты чтения). План I - 0, план B - 3. Вырезав из каждого байта по биту, соответствующего координатам пиксела, можно сформировать код цвета (номер регистра палитры).

Режим чтения 1 : при чтении адреса памяти возвращается не сам код цвета, а информация о его совпадении с шаблоном, заданным в регистре сравнения цвета (регистр 2 графического контроллера), в котором используются биты 0-3. Если какой-нибудь бит из байта ЦП равен 1, то код цвета пиксела совпадает с шаблоном. Например, при чтении получен байт F0h, а в регистре сравнения записан шаблон 0Fh, т.е. первые четыре пиксела имеют цвет 1111, а остальные какой-то другой. Чтобы уточнить цвет, надо загружать в регистр 2 коды всех цветов. Можно использовать регистр игнорирования цвета (регистр 7 графического контроллера). Биты 0-3 соответствуют планам I-B. 0 означает, что план не учитывается при

9

сравнении цвета.

ОСОБЕННОСТИ УПРАВЛЕНИЯ ВИДЕОСИСТЕМАМИ SVGA

ОПРЕДЕЛЕНИЕ ТИПА SVGA

Начинается с проверки содержимого ROM по адресу C000:0000, где должно быть название фирмы-производителя видеоадаптера: "RE-

ALTEK VGA", "TRIDENT VGA" и др. (для Paradise/Western Digital по адресу C000:007D начинается строка "VGA="). Для определения модификации видеоадаптера обычно резервируется один из регистров CRTC (порт 3D4) или секвенсора (порт 3C4), в котором содержится код версии. Например, регистр 33h CRTC видеоадаптера Realtek в битах 6-7 содержит номер версии видеоадаптера (0-3), а регистр 0B секвенсора видеоадаптера Trident в младшем байте хранит значение кода, соответствующего модификации (23h - Trident 9000). Для видеоадаптеров, поддерживающих стандарт VESA, возможно получение информации с помощью функции AX = 4F00h int 10h. ES:DI должен указывать на 256-байтовый буфер. Если функция поддерживается (т.е. драйвер VESA установлен), то она возвращает AL = 4Fh и AH = 00h (успешно) или AH = 01h (аварийный код). В буфере содержится:

----------------------------------------------------------------

Смещение ¦ Размер

¦

Описание

----------

+--------

 

+--------------------------------------------

 

00

¦

4

¦Сигнатура VESA

 

04

¦

2

¦Номер версии VESA

 

06

¦

4

¦Указатель на имя производителя ВА (OEM-имя)

0A

¦

4

¦Флаги

 

0E

¦

4

¦Указатель на список поддерживаемых VESA и

 

¦

 

¦OEM видеорежимов

 

12

¦

238

¦Резерв

 

Функция AX = 4F01h int 10h позволяет получить характеристику выбранного (CX) видеорежима в буфер (ES:DI) длиной 256 байт. Возврат - аналогично AX = 4F00h. Формат информации о режиме:

----------------------------------------------------------------

Смещение ¦ Размер

¦

Описание

----------

+--------

 

+--------------------------------------------

 

00

¦

2

¦Атрибуты режима:

 

¦¦ бит 0 - режим поддерживается

¦¦ 1 - информация доступна

¦¦ 2 - поддерживается вывод через BIOS

¦¦ 3 - цветной режим

¦¦ 4 - графический режим

02

¦

1

¦Атрибуты окна А:

 

¦

 

¦

0

- существует

 

¦

 

¦

1

- доступно для чтения

 

¦

 

¦

2

- доступно для записи

 

¦

 

¦

3-7

- резерв

03

¦

1

¦Атрибуты окна В

04

¦

2

¦Гранулярность окна (Кб)

06

¦

2

¦Размер окна (Кб)

08

¦

2

¦Начальный сегмент окна А

¦

2

¦Начальный сегмент окна В

¦

4

¦Указатель на функцию позиционирования окна

10

¦

2

¦Число байтов на телевизионную строку

12

¦

2

¦Ширина в пикселах

14

¦

2

¦Высота в пикселах

16

¦

1

¦Ширина символа в пикселах

17

¦

1

¦Высота символа в пикселах

18

¦

1

¦Число планов памяти

19

¦

1

¦Число битов на пиксел

¦

1

¦Число банков

¦

1

¦Тип модели видеопамяти

¦

1

¦Размер банка (Кб)

----------------------------------------------------------------

Функция AX = 4F02h позволяет установить (BX) видеорежим. Бит 15, установленный в 1, запрещает очистку видеопамяти. Возврат тот же.

Номера видеорежимов устанавливаются производителями видеоадаптеров. VESA-режимы:

100h

640x400x256

101h

640x480x256

102h

800x600x16

103h

800x480x256

104h

1024x768x16

105h

1024x768x256

106h

1280x1024x16

107h

1280x1024x256

108h

80x60 text

109h

132x25

text

10Ah

132x43

text

10Bh

132x50

text

10Ch

132x60

text

10Dh

320x200

Hicolor-15

10Eh

320x200

Hicolor-16

10Fh

320x200

Truecolor

110h

640x480

Hicolor-15

111h

640x480

Hicolor-16

112h

640x480

Truecolor

и т.д.

Съем текущего видеорежима осуществляется по AX = 4F03h.

УПРАВЛЕНИЕ ВИДЕОПАМЯТЬЮ

Для адресации всех точек экрана недостаточно адресного окна размером 64К. Чтобы организовать доступ ко всей информации, видеопамять делится на банки, размером в 64К (иногда в 4К). Банки отображаются на адресное пространство видеобуфера аппаратными средствами видеоадаптера. В каждый момент используется 1 или 2 банка памяти. Чтобы определить номер необходимого банка и местоположение в нем пиксела с координатами (x, y), вычисляется смещение пиксела относительно начала видеопамяти. Старшее слово полученного 32-разрядного значения является номером банка, а младшее - смещением в этом банке. Работа с банками осуществляется в следующих режимах:

1.Режим одного банка (Single Bank Mode). Под банк отводится видеобуфер (A000:0000), под номер банка резервируется регистр видеоадаптера или его часть (Trident 3C4h/0Eh/0-3; Realtek 3D7h;

Paradise 3CEh/09h и т.д.)

2.Режим двух банков (Dual Bank Mode). Резервируется два видеобуфера (A0000 - AFFFF и B0000 - BFFFF или A0000 - A7FFF и

A8000 - AFFFF). Каждому из них соответствует либо отдельный регистр, либо часть регистра.

3.Разделенный режим (Read/Write Bank Mode). Режим аналогичен Dual Bank Mode, но оба банка отображаются на один и тот же видеобуфер (A0000 - AFFFF). Банки разделены функционально - один для чтения, другой для записи. Это позволяет переносить блоки данных между банками без использования промежуточных буферов.

Универсальное управление банками видеопамяти обеспечивает

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]