Электронная библиотека книг Александра Фролова и Григория Фролова.
 
Библиотека
Братьев
Фроловых
Электронная библиотека книг Александра Фролова и Григория Фролова.
Библиотека системного программиста
Программирование на JAVA
ПК. Шаг за шагом
Другие книги
Восстановление данных
Антивирусная защита
Статьи для
программистов
Пользователю компьютера

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

© Александр Фролов, Григорий Фролов
Том 21, М.: Диалог-МИФИ, 1993.

[Назад] [Содеожание] [Дальше]

Регистры графического контроллера

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

Графический контроллер содержит девять регистров. Обращение к ним происходит через индексный порт с адресом 3CEh и порт данных с адресом 3CFh. Адаптер EGA имеет два дополнительных порта с адресами 3CAh и 3CCh, используемых при инициализации видеоадаптера.

Список регистров представлен в следующей таблице:

Индекс регистра

Регистр графического контроллера

0

Регистр установки/сброса (Set/Reset Register - SRR)

1

Регистр разрешения установки/сброса (Set/Reset Enable Register - SRER)

2

Регистр сравнения цветов (Color Compare Register - CCR)

3

Регистр циклического сдвига и выбора функции (Data Rotate & Function Select - DRFS)

4

Регистр выбора читаемого слоя (Read Plane Select Register - RPSR)

5

Регистр режима работы (Mode Register - MDR)

6

Регистр смешанного назначения (Miscellaneous Register - MIR)

7

Регистр маскирования цветовых слоев (Color Don't Care Register - CDCR)

8

Регистр битовой маски (Bit Mask Register - BMR)

На рисунке 4.9, демонстрируются функции, выполняемые графическим контроллером. Рассмотрим функционирование графического адаптера.

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

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

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

.   Если бит регистра разрешения установки/сброса, управляющий данным цветовым слоем, равен нулю, то байт, записываемый в видеопамять не изменяется.

.   Если бит регистра разрешения установки/сброса, управляющий данным цветовым слоем, равен единице, то в него записывается байт, все биты которого устанавливаются в соответствии со значением регистра установки/сброса для данного цветового слоя.

Затем в зависимости от состояния регистра битовой маски происходит запись данных в видеопамять:

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

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

Рисунок 4.9 Функции графического контроллера

Теперь рассмотрим регистры графического контроллера более подробно.

Регистр установки/сброса
(Set/Reset Register - SRR) (индекс 0)

Регистр SRR совместно с регистром разрешения установки/сброса (Set/Reset Enable Register), управляет записью данных в видеопамять. Возможности использования регистра SRR разъясняются при описании регистра разрешения установки/сброса.

Приведем формат регистра установки/сброса:

D0 Данные, записываемые в цветовой слой 0.

D1 Данные, записываемые в цветовой слой 1.

D2 Данные, записываемые в цветовой слой 2.

D3 Данные, записываемые в цветовой слой 3.

D7-D4 Зарезервировано.

По умолчанию во все биты регистра записываются нулевые значения.

Регистр разрешения установки/сброса
(Set/Reset Enable Register - SRER) (индекс 1)

Регистр разрешения установки/сброса позволяет при записи в видеопамять для одних цветовых слоев использовать данные от центрального процессора, а для других - из регистра установки/сброса (рис. 4.10).

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

Теперь приведем формат регистра разрешения установки/сброса:

D0 Разрешение использования данных из регистра установки/сброса для цветового слоя 0.

D1 Разрешение использования данных из регистра установки/сброса для цветового слоя 1.

D2 Разрешение использования данных из регистра установки/сброса для цветового слоя 2.

D3 Разрешение использования данных из регистра установки/сброса для цветового слоя 3.

D7-D4 Зарезервировано.

По умолчанию во все биты регистра записываются нулевые значения.

Заметим, что возможность использования регистров установки/сброса можно реализовать только в нулевом режиме записи. Режим записи устанавливается регистром режима работы графического контроллера (Mode Register, индекс 5). В нулевом режиме записи, если запрещено выполнение операции маскирования пикселов (регистр битовой маски содержит значение 0FFh), то каждый байт, записываемый процессором в видеопамять определяет 8 пикселов в одном или нескольких цветовых слоях.

Рассмотрим на рисунке 4.10 применение регистров установки/сброса. Пусть графический контроллер находится в нулевом режиме работы, и регистр битовой маски равен 0FFh (используются только данные от процессора). В этом случае можно использовать регистры установки/сброса.

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

байт 11110000b передается в третий слой видеопамяти,

байт 00000011b передается во второй слой видеопамяти,

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

байт 00110011b передается в нулевой слой видеопамяти.

Данные, записываемые в видеопамять зависят от значения регистра разрешения установки/сброса. Биты D3 и D0, регистра разрешения установки/сброса равны нулю, поэтому в третий слой и нулевой слой видеопамяти данные заносятся без изменения. Биты D2 и D1 регистра разрешения установки/сброса равны единице, значит во второй и первый слои видеопамяти записываются данные в соответствии со значением битов D2 и D1 регистра установки/сброса. То есть во второй слой записывается байт 00000000b, а в первый - 11111111b.

Рисунок 4.10 Использование регистров установки/сброса

Регистр сравнения цветов
(Color Compare Register - CCR) (индекс 2)

Регистр CCR можно использовать для поиска на экране пикселов с определенным цветом. Без использования регистра CCR за один цикл чтения видеопамяти процессор может считать данные только из одного цветового слоя. Программирование регистра CCR позволяет за один цикл чтения прочитать все четыре цветовых слоя, сравнить считанные значения с искомыми и возвратить результат.

Ниже представлен формат регистра сравнения цветов:

D0 Искомая величина для нулевого цветового слоя.

D1 Искомая величина для первого цветового слоя.

D2 Искомая величина для второго цветового слоя.

D3 Искомая величина для третьего цветового слоя.

D7-D4 Не используются.

После выполнения BIOS установки режима работы видеоадаптера все биты регистра содержат нулевые значения.

Операция поиска пикселов данного цвета иллюстрируется рисунком 4.11.

Рисунок 4.11 Использование регистра CCR

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

Перед использованием регистра CCR для выполнения операции поиска пикселов определенного цвета необходимо установить регистр режима работы (Mode Register - MDR) и регистр маскирования цветовых слоев (Color Don't Care Register - CDCR), описанные ниже.

Регистр циклического сдвига и выбора функции
(Data Rotate & Function Select - DRFS) (индекс 3)

Регистр DRFS выполняет две различные функции, отраженные в его названии:

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

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

D2-D0 Счетчик сдвига.

D4-D3 Биты выбора логической функции.

D7-D5 Не используются.

После выполнения BIOS установки режима работы видеоадаптера биты регистра DRFS содержат нулевые значения.

При выполнении операции циклического сдвига биты счетчика сдвига могут иметь следующие значения:

D2 D1 D0

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

0 0 0

Ноль, сдвиг не происходит

0 0 1

Один бит

0 1 0

Два бита

0 1 1

Три бита

1 0 0

Четыре бита

1 0 1

Пять бит

1 1 0

Шесть бит

1 1 1

Семь бит

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

D4  D3

Логическая операция

0 0

Запись не модифицированных данных

0 1

И

1 0

ИЛИ

1 1

ИСКЛЮЧАЮЩЕЕ ИЛИ

Следует отметить, что операция циклического сдвига выполняется до выполнения логических функций.

Регистр DRFS можно использовать для быстрого копирования областей видеопамяти с возможной их модификацией.

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

Рисунок 4.12 Логические операции и операция циклического сдвига

.   Логические операции можно выполнять только в нулевом и втором режиме записи.

Регистр выбора читаемого слоя
(Read Plane Select Register - RPSR) (индекс 4)

Регистр определяет номер цветового слоя видеопамяти, из которого процессор может читать данные. При выполнении операции сравнения цветов значение этого регистра безразлично.

Приведем формат регистра выбора читаемого слоя.

Биты

Описание

D1-D0

Номер читаемого цветового слоя видеопамяти

D7-D2

Не используется

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

Чтение центральным процессором данных из видеопамяти иллюстрируется на рисунке 4.13. На этом рисунке регистр выбора читаемого слоя разрешает чтение второго слоя видеопамяти. Таким образом, при чтении процессором данных из видеопамяти, процессор считывает данные только из второго слоя. Остальные слои видеопамяти недоступны для чтения процессором, пока вы не измените состояние регистра читаемого слоя.

Рисунок 4.13 Операция чтения видеопамяти

Регистр режима работы
(Mode Register - MDR) (индекс 5)

Регистр управляет несколькими функциями графического контроллера. В частности он управляет режимом записи в видеопамять и режимом сравнения цветов (см. регистр сравнения цветов графического контроллера).

Биты

Описание

D1-D0

Режим записи

D2

Не используется

D3

Разрешение режима сравнения цветов

D4

Четный/нечетный режим

D5

Режим регистра сдвига

D6

Управление режимом VGA с 256 цветами (режим номер 13h)

D7

Не используется

Ниже подробно рассмотрены отдельные биты регистра MDR. Изменение битов D4-D7, может привести к потере изображения на экране монитора. Обычно эти биты загружаются только при установке режима работы видеоадаптера.

D1, D0 Данные биты устанавливают режим записи в видеопамять. Вы можете выбрать один из трех режимов записи:

D1 D0

Номер режима

Режим записи

0 0

0

Режим непосредственной записи

0 1

1

Использование для записи регистров-защелок

1 0

2

Заполнение N-ого цветового слоя битом номер N из данных, записываемых процессором

1 1

-

Не используется

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

Рисунок 4.14 Режим записи 0

.   Режим 1 (рис. 4.15). Режим записи, использующий регистры-защелки. При чтении данных из видеопамяти происходит запись восьми битов из каждого цветового слоя в регистры-защелки. Затем, при выполнении операции записи, содержимое регистров-защелок может быть записано обратно в видеопамять, но уже по другому адресу. Этот режим можно использовать для быстрого копирования данных из одной области видеопамяти в другую.

Рисунок 4.15 Режим записи 1

.   Режим 2 (рис. 4.16). В режиме 2 происходит заполнение N-ого цветового слоя битом с порядковым номером N из байта данных, переданного процессором видеоадаптеру для записи. Содержимое четырех старших битов записываемого байта (то есть битов D4-D7) значения не имеет.

Рисунок 4.16 Режим записи 2

D3 Бит D3 управляет режимом сравнения цветов (см. регистр сравнения цветов графического контроллера). Для перевода видеоадаптера в режим сравнения цветов бит D3 должен содержать единицу.

Остальные биты регистра модифицировать не рекомендуется.

D4 Бит D4 устанавливается в текстовых режимах. В этом случае доступ по четным адресам происходит к четным цветовым слоям, а по нечетным адресам - к нечетным цветовым слоям видеопамяти (см. видеопамять в текстовых режимах).

D5 Бит D5 используется в режимах видеоадаптера номер 4 и 5 для обработки видеоданных в формате "два бита на пиксел".

D6 Бит D6 используется видеоадаптерами VGA и SVGA в режиме с 256 цветами (режим 13h).

При установке режима работы видеоадаптера BIOS загружает в регистр MDR следующие значения, в зависимости от режима работы видеоадаптера:

Режим

0,1,2,3,7,F,10

4,5

6,D,E

Содержимое регистра

10h

30h

00

Регистр смешанного назначения
(Miscellaneous Register - MIR) (индекс 6)

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

D0 Бит разрешения графического режима. Бит должен содержать 1 для графического и 0 для текстового режима. В графическом режиме запрещается генерация символов и разрешается адресация к отдельным пикселам.

D1 Используется видеоадаптерами EGA, имеющими 64 Кбайт памяти. Если бит D1 установлен, то четыре слоя видеопамяти по 16 Кбайт каждый объединяются в два слоя по 32 Кбайт.

D3-D2 Биты D3 и D2 устанавливают начальный и конечный адреса, на которые отображается видеопамять адаптера EGA:

D3 D2 Адреса видеопамяти

0 0 A000:0000h-B000:FFFFh
0 1 A000:0000h-A000:FFFFh
1 0 B000:0000h-B000:7FFFh
0 1 B800:0000h-B000:FFFFh

D7-D4 Не используются.

При установке режима работы видеоадаптера BIOS загружает в регистр MIR следующие значения, в зависимости от режима работы видеоадаптера:

Режим

3

7

F

10

Содержимое регистра

Eh

Ah

07

05

Регистр маскирования цветовых слоев
(Color Don't Care Register - CDCR) (индекс 7)

Регистр используется в режиме сравнения цветов (см. регистр сравнения цветов - CCR). Если какие-либо биты D3-D0 содержат ноль, то при операции сравнения цветов соответствующие цветовые слои в рассмотрение не принимаются.

D0 Управление нулевым цветовым слоем.

D1 Управление первым цветовым слоем.

D2 Управление вторым цветовым слоем.

D3 Управление третьим цветовым слоем.

D7-D4 Не используются.

При установке режима работы в регистр заносятся следующие значения:

Режим

3

7

F

10

Содержимое регистра

00

00

0Fh

0Fh

Регистр битовой маски
(Bit Mask Register - BMR) (индекс 8)

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

Рисунок 4.17 Использование регистра битовой маски

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

По умолчанию, во всех режимах регистр BMR хранит число 0FFh.

[Назад] [Содеожание] [Дальше]


Создание интернет-магазинов: http://www.shop2you.ru/ © Александр Фролов, Григорий Фролов, 1991-2016