Программирование видеоадаптеров.© Александр Фролов, Григорий ФроловТом 21, М.: Диалог-МИФИ, 1993. Регистры графического контроллераГрафический контроллер поддерживает обмен данными между центральным процессором и видеопамятью. При этом он может выполнять простейшие логические операции над данными записываемыми в видеопамять. В графических режимах работы видеоадаптера графический контроллер передает данные из цветовых слоев видеопамяти контроллеру атрибутов. Графический контроллер содержит девять регистров. Обращение к ним происходит через индексный порт с адресом 3CEh и порт данных с адресом 3CFh. Адаптер EGA имеет два дополнительных порта с адресами 3CAh и 3CCh, используемых при инициализации видеоадаптера. Список регистров представлен в следующей таблице:
На рисунке 4.9, демонстрируются функции, выполняемые графическим контроллером. Рассмотрим функционирование графического адаптера. Байт, записываемый центральным процессором в видеопамять (11100001b), поступает в графический контроллер. В соответствии со значением регистра циклического сдвига и выбора функции, происходит циклический сдвиг на один бит содержимого байта, записываемого в видеопамять. Полученный результат складывается по логике ИЛИ с содержимым регистров-защелок. Вы можете применить другие булевы функции - И, ИСКЛЮЧАЮЩЕЕ ИЛИ. Используемая булева функция выбирается регистром циклического сдвига и выбора функции. Дальнейшие преобразования происходят в соответствии со значениями регистра разрешения установки/сброса и регистра установки/сброса: . Если бит регистра разрешения установки/сброса, управляющий данным цветовым слоем, равен нулю, то байт, записываемый в видеопамять не изменяется. . Если бит регистра разрешения установки/сброса, управляющий данным цветовым слоем, равен единице, то в него записывается байт, все биты которого устанавливаются в соответствии со значением регистра установки/сброса для данного цветового слоя. Затем в зависимости от состояния регистра битовой маски происходит запись данных в видеопамять: . Если бит регистра битовой маски содержит единицу, то соответствующие биты для каждого из цветовых слоев поступают из видеопамяти. . Если бит регистра битовой маски содержит ноль, то соответствующие биты для каждого из цветовых слоев поступают от регистров-защелок. Рисунок 4.9 Функции графического контроллера Теперь рассмотрим регистры графического контроллера более подробно. Регистр
установки/сброса
|
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.