Программирование видеоадаптеров CGA, EGA и VGA© Александр Фролов, Григорий ФроловТом 3, М.: Диалог-МИФИ, 1992, 287 стр. 7.5. Регистры графического контроллераКак мы уже указывали, графический контроллер поддерживает обмен данными между процессором и видеопамятью. При этом он может выполнять простейшие логические операции над записываемыми в видеопамять данными. Грфический контроллер передает также данные из цветовых слоев видеопамяти - контроллеру атрибутов в случае использования графического режима работы видеоадаптера. Графический контроллер содержит девять регистров. Обращение к ним происходит через индексный порт с адресом 3CEh и порт данных с адресом 3CFh. Список регистров приведен в таблице 8.14. Адаптер EGA имеет еще два порта с адресами 3CAh и
3CCh, используемых при инициализации
видеоадаптера.
Таблица 8.14 Регистры графического контроллера. Большинство регистров графического контроллера могут использоваться при программировании, поэтому регистры графического контроллера будут описаны полностью. Ниже, на рисунке 8.10, демонстрируются функции, выполняемые графическим контроллером. Рассмотрм функционирование графического адаптера. Байт, записываемый процесором в видеопамять (11100001b), поступает в графический контроллер. В соответствии со значением регистра циклического сдвига и выбора функции, происходит циклический сдвиг на один бит содержимого записываемого в видеопамять байта. Затем результат складывается по логике ИЛИ с содержимым регистров-защелок. Какая булева функция используется - ИЛИ, И, ИСКЛЮЧАЮЩЕЕ ИЛИ также определяется регистром циклического сдвига и выбора функции. Дальнейшие преобразования происходят в соответствии со значениями регистра разрешения установки/сброса и регистра установки/сброса:
Затем в соответствии с состоянем регистра битовой маски происходит запись данных в видеопамять:
Рисунок 8.10 Функции графического контроллера. Теперь рассмотрим регистры графического контроллера более подробно. Регистр установки/сброса
|
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.15 Циклический сдвиг.
Теперь рассмотрим возможности графического контроллера по выполнению логических операций над записываемыми в видеопамять данными.
Во время выполнения процессором операции
чтения из видеопамяти одновременно происходит
запись данных из всех четырех цветовых слоев (по
считываемому адресу) в регистры-защелки. Каждому
цветовому слою видеопамяти соответствует один
8-битовый регистр-защелка. Когда процессор начнет
записывать в видеопамять (возможно уже по
другому адресу) данные, можно комбинировать их с
данными из регистров-защелок. Вид выполняемой
логической операции будет зависеть от
содержимого битов выбора логической функции
(таблица 8.16):
D4 D3 | Выполняемая логическая операция |
0 0 | запись немодифицированных данных |
0 1 | И |
1 0 | ИЛИ |
1 1 | ИСКЛЮЧАЮЩЕЕ ИЛИ |
Таблица 8.16 Возможные логические операции.
Следует отметить, что операция циклического сдвига выполняется до выполнения логических функций.
Регистр DRFS можно использовать для быстрого копирования областей видеопамяти с возможной их модификацией.
Рисунок 8.13 иллюстрирует выполнение логической операции ИЛИ. Регистр циклического сдвига и выбора функции содержит число 00010000b. После операции чтения данные из всех четырех слоев записываются в регистрах-защелках. Затем выполняется операция записи. При этом данные процессора в соответствии с состоянием регистра циклического сдвига и выбора функции складываются по логике ИЛИ со значением регистров-защелок и помещаются в видеопамять.
Рисунок 8.13 Логические операции и операция циклического сдвига.
Заметим, что логические операции можно производить только в нулевом и втором режиме записи.
Регистр выбора читаемого слоя
(Read Plane Select Register - RPSR) (индекс 4)
Определяет номер цветового слоя видеопамяти, из которого процессор может читать данные. Заметим, что при выполнении операции сравнения цветов значение этого регистра безразлично.
Приведем формат регистра выбора читаемого слоя.
- D1-D0 Номер читаемого цветового слоя видеопамяти.
- D7-D2 Не используются.
При установке режима работы видеоадаптера BIOS заполняет все биты регистра нулями, что соответствует нулевому цветовому слою.
Операция чтения видеопамяти процессором иллюстрируется на рисунке 8.14. На этом рисунке регистр выбора читаемого слоя разрешает чтение второго слоя видеопамяти. Таким образом при чтении процессором данных из видеопамяти, процессор считывает данные только из второго слоя. Остальные слои будут недоступны для чтения процессором, пока вы не измените состояние регистра читаемого слоя.
Рисунок 8.14 Операция чтения из видеопамяти.
Регистр режима работы
(Mode Register - MDR) (индекс 5)
Регистр управляет несколькими различными функциями графического контроллера. В частности он управляет режимом записи в видеопамять, а также разрешением режима сравнния цветов (см. регистр сравнения цветов графического контроллера).
D1-D0 Режим записи. D2 Не используется. D3 Разрешение режима сравнения цветов. D4 Четный/нечетный режим. D5 Режим регистра сдвига. D6 Управление режимом VGA с 256 цветами. D7 Не используется.
Ниже подробно рассмотрены отдельные биты регистра. Мы не рекомендуем изменять состояние битов D4-D7, так как это может привести к потере изображения на экране дисплея.
- D1, D0 Данные биты определяют режим записи в видеопамять. Возможно использование трех различных режимов записи:
D1 D0 | Номер режима | Режим записи |
0 0 | 0 | режим непосредственной записи |
0 1 | 1 | использование для записи регистров-защелок |
1 0 | 2 | заполнение N-ого цветового слоя битом номер N из данных, записываемых процессором |
1 1 | - | не используется |
- Режим 0 - режим непосредственной записи. Процессор имеет доступ к видеопамяти и возможно использование следующих операциий: установки/сброса, циклического сдвига и всех логических функций. В этом режиме также возможно использование регистра битовой маски.
- Режим 1 - режим записи, использующий регистр-защелку. При чтении данных из видеопамяти происходит запись восьми битов из каждого цветового слоя в регистры-защелки. Затем, при выполнении операции записи содержимое регистров-защелок может быть записано обратно в видеопамять, но уже по другому адресу. Этот режим полезно использовать для быстрого копирования данных из одной области видеопамяти в другую.
- Режим 2. В этом режиме происходит заполнение N-ого цветового слоя битом с порядковым номером N из байта данных, переданного процессором видеоадаптеру для записи. Отсюда следует, что содержимое четырех старших битов записываемого байта (то есть битов D4-D7) значения не имеет.
Процесс записи в видеопамять в каждом из перечисленных выше режимов показан на рисунке 8.14.
Рисунок 8.14 Различные режимы записи в видеопамять.
- D3 Этот бит управляет разрешением использования режима сравнения цветов (см. регистр сравнения цветов графического контроллера). Для перевода видеоадаптера в режим сравнения цветов бит D3 должен содержать единицу.
Остальные биты регистра модифицировать не рекомендуется.
- D4 Данный бит устанавливается в текстовых режмимах. При этом доступ по четным адресам происходит к четным цветовым слоям, а по нечетным адресам - к нечетным цветовым слоям видеопамяти (см. видеопамять в текстовых режимах).
- D5 Используется в режимах 4 и 5 для обработки видеоданных в формате "два бита на пиксел".
- D6 Используется VGA в режиме с 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К байт памяти. Если бит установлен, то четыре 16К байтных слоя объединяются в два слоя по 32К байт.
- D3-D2 Эти биты устанавливают начальный и конечный
адреса, на которые отображается видеопамять
адаптера EGA согласно следующей таблице:
D3 D2 адреса видеопамяти
0 0 A000:0000-B000:FFFF
0 1 A000:0000-A000:FFFF
1 0 B000:0000-B000:7FFF
0 1 B800:0000-B000:FFFF - 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 содержит ноль, то соответствующий бит будет записываться в видеопамять из регистра-защелки. В противном случае данный бит поступает от процессора (см. рисунок 8.15). Этот регистр используется только в нулевом режиме записи.
Рисунок 8.15 Использование регистра битовой маски.
Напомним, что занести данные в регистр-защелку можно, если выполнить операцию чтения из видеопамяти. При этом в каждый регистр-защелку считывается один байт из соответствующего цветового слоя.
По умолчанию, во всех режимах регистр хранит число 0FFh.