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

Программирование видеоадаптеров CGA, EGA и VGA

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

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

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

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

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

Адаптер 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)

Таблица 8.14 Регистры графического контроллера.

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

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

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

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

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

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

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

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

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

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

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

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

  • D0 Данные, записываемые в цветовой слой 0.
  • D1 Данные, записываемые в цветовой слой 1.
  • D2 Данные, записываемые в цветовой слой 2.
  • D3 Данные, записываемые в цветовой слой 3.
  • D7-D4 Зарезервировано.

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

Возможности использования данного регистра разъясняются при описании регистра разрешения установки/сброса.

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

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

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

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

  • D0 Разрешение использования данных из регистра установки/сброса для цветового слоя 0.
  • D1 Разрешение использования данных из регистра установки/сброса для цветового слоя 1.
  • D2 Разрешение использования данных из регистра установки/сброса для цветового слоя 2.
  • D3 Разрешение использования данных из регистра установки/сброса для цветового слоя 3.
  • D7-D4 Зарезервированно.

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

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

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

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

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

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

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

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

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

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

  • D0 Искомая величина для нулевого цветового слоя.
  • D1 Искомая величина для первого цветового слоя.
  • D2 Искомая величина для второго цветового слоя.
  • D3 Искомая величина для третьего цветового слоя.
  • D7-D4 Не используются.

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

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

Рисунок 8.12 Использование регистра 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.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.

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


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