Главная » Ассемблер, Железо » Регистры видеоконтроллера

0

Необходимость непосредственной работы с регистрами видеоконтроллера реально возникает только после перехода в защищенный режим работы процессора Intel х86, когда недоступны видеофункции BIOS.

Управление режимом работы внешнего устройства путем прямой записи информации в его регистры — анахронизм, и довольно опасный. Установка режима, не поддерживаемого подключенным к контроллеру монитором, или запись ошибочного значения в один из регистров может привести к поломке оборудования (контроллера или монитора). Все операции переключения режимов может и должен выполнять собственный процессор контроллера, а не центральный процессор компьютера. Однако, пока изготовители вынуждены придерживаться допотопной технологии управления (для обеспечения совместимости с VGA), необходимо помнить правила работы с регистрами видеоконтроллера.

Все регистры видеоконтроллера являются восьмиразрядными. В состав стандартного контроллера VGA-типа входит шесть групп управляющих регистров:

•           внешние регистры;

•          регистры контроллера электронно-лучевой трубки (ЭЛТ);

•           регистры синхронизатора;

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

•          регистры контроллера атрибутов;

•           регистры цифро-аналогового преобразователя VGA (ЦАП VGA). В настоящее время, вообще говоря, изделия различных изготовителей совершенно несовместимы друг с другом на уровне регистров. Однако современные видеоконтроллеры имитируют работу контроллера VGA с целью сохранения совместимости со старым программным обеспечением. В частности, допускается использование некоторых (не всех) управляющих регистров по тем же правилам, какие были приняты для VGA (причем не только в старых, но и в новых видеорежимах). Ниже будут рассматриваться только такие регистры, а более подробные сведения о регистрах VGA можно при необходимости найти в литературе [1, 29, 33].

Внешние регистры

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

•       регистр управления различными режимами работы видеоконтроллера (Miscellaneous Output Register), который доступен только для записи через порт 3C2h;

•       регистр управления линиями FC0 и FC1 EGA (Feature Control Register), доступный только для записи через порт 3BAh в монохромном режиме и через порт 3DAh — в цветном;

•       нулевой регистр состояния видеоконтроллера (Input Status Register Zero), доступный только для считывания через порт 3C2h;

•       первый регистр состояния видеоконтроллера (Input Status Register One), доступный для считывания через порт 3BAh в монохромном режиме и через порт 3DAh — в цветном;

•       регистр разрешения работы видеоподсистемы (Video Subsystem Enable Register), доступный для записи и считывания через порт 3C3h.

С точки зрения программиста интерес в этой группе представляет только первый регистр состояния видеоконтроллера. Разряды данного регистра имеют следующее значение:

•       бит О — признак обратного хода луча по строке (0 — обратный ход луча, 1 — прямой ход);

•           биты 1 и 2 — не используются;

•       бит 3 — признак обратного хода луча по кадру (0 — прямой ход, 1 — обратный ход луча);

•           биты 4-7 — не используются.

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

Регистры синхронизатора

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

Адресный регистр синхронизатора доступен для записи и считывания через порт 3C4h. После занесения в него значения индекса можно работать с соответствующим безадресным регистром через порт 3C5h. Значения индексов регистров синхронизатора приведены в табл. 4.5.

Таблица 4.5. Регистры синхронизатора

Индекс

Регистр

0

Регистр сброса (Reset Register)

1

Регистр режима синхронизации (Clocking Mode Register)

2

Регистр маскирования памяти (Map Mask Register)

3

Регистр выбора таблицы символов (Character Map Select Register)

4

Регистр режима памяти (Memory Mode Register)

Регистр сброса

Регистр используется для сброса синхронизатора. Разряды регистра имеют следующее значение:

•       бит 0 — асинхронный сброс (установка значения этого разряда в 0 вызывает асинхронный сброс синхронизатора и потерю хранящейся в видеопамяти информации; для нормальной работы видеоконтроллера разряд должен быть установлен в 1);

•       бит 1 — синхронный сброс (установка значения этого разряда в О вызывает синхронный сброс синхронизатора; при работе контроллера разряд должен быть установлен в 1);

•       биты 2-7 — не используются.

Разряд синхронного сброса (бит 1) должен быть установлен в 0 перед началом записи информации в регистр режима синхронизации и возвращен в 1 после завершения этой операции.

Регистр режима синхронизации

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

Регистр маскирования памяти

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

•        бит 0 — разрешение записи в слой 0 (Синий);

•        бит 1 — разрешение записи в слой 0 (Зеленый);

•        бит 2 — разрешение записи в слой 0 (Красный);

•        бит 3 — разрешение записи в слой 0 (Яркость);

•        биты 4-7 — не используются.

В графических 16-цветных режимах видеопамять организована в виде 4 слоев — по одному слою на каждый из основных цветов (красный, зеленый и синий) и еще один слой для признака яркости. Запись в цветовой слой разрешена, если установлен соответствующий бит регистра маскирования памяти. Названия слоев чисто условные (происходят от CGA), поскольку в контроллере VGA четырехразрядный код цвета не подается на монитор непосредственно, а подвергается двукратной перекодировке, превращаясь вначале в 8-разрядный, а затем — в 18-разрядный код. Регистр также используется в том случае, когда необходимо осуществить загрузку шрифта в знакогенератор видеоконтроллера (в текстовом режиме слой 0 содержит коды символов, слой 1 — их атрибуты, а слой 2 — одну или несколько таблиц растрового представления символов для знакогенератора).

Регистр выбора таблицы символов

Контроллер VGA в текстовых режимах позволяет хранить для знакогенератора в области цветового слоя № 2 до восьми таблиц символов, по 256 символов в каждой. Размер области памяти для одного

символа фиксированный — 32 байта (из которых используются только первые 16), поэтому и размер таблицы тоже строго определенный — 8 Кбайт. Практически всегда применяется только одна таблица — с нулевым номером. Для ее использования в регистр выбора таблицы должен быть записан 0.

Запись информации в регистр выбора таблицы символов допускается только после того, как записан 0 в регистр сброса синхронизатора (то есть выполнен асинхронный сброс).

Регистр режима памяти

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

•           бит 0 — выбор режима (0 — графический, 1 — текстовый);

•           бит 1 — объем видеопамяти (0 — 64 Кбайт, 1 — более 64 Кбайт);

•       бит 2 — нечетный/четный режим (если установлено значение 0, данные с нечетными адресами отображаются в нечетных слоях памяти, а данные с четными адресами — в четных);

•           биты 3-7 — не используются.

Регистры контроллера электроннолучевой трубки

Эта группа регистров самая большая — она предназначена для задания множества параметров, определяющих свойства видеорежима. Для цветных дисплеев эти регистры адресуются через порты 3D4h и 3D5h.

Регистр адреса КЭЛТ

Регистр адреса КЭЛТ (CRTC Address Register) доступен через порт 3D4h. В него требуется записать номер регистра, с которым после этого можно будет работать через порт 3D5h. Допускается одновременная запись индекса регистра и значения в этот регистр, то есть запись в порт 3D4h можно выполнять 16-разрядными словами. Список регистров КЭЛТ приводится в табл. 4.6. Работать непосредственно можно только с теми регистрами, которые не связаны с формированием основных параметров кадра. Дело в том, что любая ошибка при установке параметров горизонтальной или вертикальной развертки может вывести из строя монитор (может сгореть блок питания или блок развертки монитора, выгореть линия или точка в центре экрана электронно-лучевой трубки и т. д.). Ниже рассматриваются

только те регистры, работа с которыми представляет интерес для программиста и не связана с каким-либо риском.

Таблица 4.6. Регистры контроллера ЭЛТ

Индекс

Регистр

OOh

Полная длина линии горизонтальной развертки

01h

Длина отображаемого участка горизонтальной

 

развертки

02h

Начало затемнения по горизонтали

03h

Конец затемнения по горизонтали

04h

Начало обратного хода луча по горизонтали

05h

Конец обратного хода луча по горизонтали

06h

Общее число строк развертки

07h

Дополнение

08 h

Предварительная строчная развертка

09h

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

OAh

Начальная линия курсора

OBh

Конечная линия курсора

OCh

Старший байт начального адреса

ODh

Младший байт начального адреса

OEh

Старший байт адреса курсора

OFh

Младший байт адреса курсора

10h

Начало обратного хода луча по кадру

11 h

Конец обратного хода луча по кадру

12h

Конец видимой части кадра

13h

Логическая ширина экрана

14h

Положение подчеркивания символа

15h

Начало затемнения по кадру

16h

Конец затемнения по кадру

17h

Управление режимом

18h

Сравнение строк

Регистр начальной линии курсора

Регистр начальной линии курсора (Cursor Start Register) имеет индекс OAh. Он определяет номер строки знакоместа, с которой начинается вывод курсора (нумерация строк ведется с 0).

Разряды регистра имеют следующее значение:

•        биты 0-4 — номер начальной линии курсора;

•       бит 5 — гашение курсора (если разряд установлен в 1, то курсор становится невидимым);

•        биты 6-7 — не используются.

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

Регистр конечной линии курсора (Cursor End Register) имеет индекс OBh. Он определяет номер строки знакоместа, на которой завершается отображение курсора. Разряды регистра имеют следующее значение:

•        биты 0-4 — номер конечной линии курсора;

•       биты 5 и 6 — отклонение курсора (оба разряда должны быть установлены в 0);

•        бит 7 — не используется.

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

Регистры старшего и младшего байтов начального адреса

Регистры старшего байта начального адреса (Start Address High Register) и младшего байта начального адреса (Start Address Low Register) имеют индексы OCh и ODh соответственно. Они содержат старший и младший байты 16-разрядного адреса видеопамяти, с которого начинается вывод данных на экран. Изменяя начальный адрес, можно выполнять прокрутку изображения по горизонтали и по вертикали, а также осуществлять переключение видеостраниц. Прокрутка по горизонтали осуществляется увеличением или уменьшением значения начального адреса на 1, прокрутка по вертикали — прибавлением к начальному адресу или вычитанием из него логической длины строки в байтах. Переключение страниц осуществляется путем записи в регистры начального адреса произведения номера страницы на размер страницы в байтах (нумерация страниц ведется с 0).

К сожалению, этими регистрами можно пользоваться только в текстовых режимах и старых графических режимах VGA (в новых режимах 16-разрядного числа недостаточно).

Регистры старшего и младшего байтов адреса курсора

Регистры старшего байта адреса курсора (Cursor Location High Register) и младшего байта адреса курсора (Cursor Location Low Register) имеют индексы OEh и OFh соответственно. Они содержат старший и младший байты 16-разрядного смещения курсора относительно начала экрана (левого верхнего угла). Это смещение отсчитывается как сумма номера колонки и произведения номера строки на длину строки в символах. Содержимое регистров адреса курсора имеет значение только для текстовых режимов.

Регистр логической ширины экрана

Регистр логической ширины экрана (Offset Register) имеет индекс 13h. Он определяет объем видеопамяти, который выделяется для хранения одной строки изображения. Иными словами, он задает логическую длину строки, которая может быть больше физической (реально отображаемой на экране). Применяется этот регистр для выравнивания длины строки в пикселах на значение, кратное 2N, что часто необходимо делать с целью ускорения вывода информации на экран (хотя расплачиваться приходится перерасходом видеопамяти).

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

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

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

Индекс

Регистр

0

Установка/сброс (Set/Reset Register)

1

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

2

Сравнение цветов (Color Compare Register)

3

Циклический сдвиг данных (Data Rotate Register)

4

Выбор схемы чтения (Read Map Select Register)

Таблица 4.7 (продолжение)

Индекс

Регистр

5

Режимы записи и считывания (Mode Register)

6

Смешанные данные (Miscellaneous Register)

7

Цвет безразличен (Color Don’t Care)

8

Битовая маска (Bit Mask Register)

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

Регистр выбора схемы чтения

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

•       биты 0 и 1 — номер считываемой битовой матрицы (от 0 до 3);

•       биты 2-7 — не используются.

Регистр режимов записи и считывания

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

•       биты 0 и 1 — выбор режима записи (0 — непосредственная запись, 1 — запись с использованием регистров-защелок, 2 — запись с использованием битовой маски);

•       бит 2 — не используется (установлен в 0);

•       бит 3 — выбор режима чтения;

•       бит 4 — четный/нечетный режим (0 — для графических режимов, 1 — для текстовых);

•       бит 5 — 4-цветный режим (устанавливается в 1 в видеорежимах 04h и 05h);

•           бит 6 — 256-цветный режим (устанавливается в 1 в режиме 13h);

•           бит 7 — не используется (установлен в 0).

Регистр смешанных данных

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

•       бит 0 — выбор режима (0 — текстовый, 1 — графический); в графическом режиме запрещена генерация символов и разрешена адресация по пикселам;

•           бит 1 — не используется;

•       биты 2 и 3 — положение в адресном пространстве и размер окна для доступа к видеопамяти (0 — адрес AOOOOh, размер 128 Кбайт; 1 — адрес AOOOOh, размер 64 Кбайт; 2 — адрес BOOOOh, размер 32 Кбайт; 3 — адрес BBOOOh, размер 32 Кбайт);

•           биты 4-7 — не используются.

Регистры контроллера атрибутов

Регистры контроллера атрибутов отвечают за перекодировку цветов (4-разрядный код преобразуется в 8-разрядный). Кроме того, один из регистров задает цвет рамки экрана, а другой обеспечивает плавную прокрутку изображения по горизонтали в текстовых и 16-цвет- ных режимах.

Разработчики контроллера атрибутов превзошли всех остальных по части экономии пространства ввода-вывода — поместили по одному и тому же адресу 3C0h индексный порт и порт данных. В результате обмен информацией между центральным процессором компьютера и контроллером атрибутов выполнялся слишком медленно, и в последующие модификации контроллеров VGA было внесено изменение — теперь доступ к регистрам данных допускается также через порт 3Clh (то есть можно использовать механизм одновременной записи в индексный регистр и регистр данных).

Регистр адреса атрибута

Регистр адреса атрибута (Attribute Address Register) доступен для записи через порт 3C0h. Индекс, записанный в регистр адреса атри: бута, определяет, какой из регистров данных будет доступен через порт 3C0h при выполнении следующей операции записи или считывания. Значения индексов приведены в табл. 4.8. Разряды регистра распределены следующим образом:

•        биты 0-4 — номер адресуемого регистра атрибутов;

•       бит 5 — разрешение доступа к регистрам палитры (0 — запретить видеоконтроллеру использование регистров палитры, 1 — разрешить);

•        биты 6 и 7 — не используются.

Порядок доступа определяется специальным триггером-счетчиком: при первом обращении передаваемое значение интерпретируется как индекс, при втором — как данные, при третьем — снова как индекс и т. д. Однако перед началом серии операций записи или считывания триггер нужно сбросить. Сброс триггера происходит при считывании данных из первого регистра состояния видеоконтроллера, который в цветных видеорежимах доступен через порт 3DAh.

Запись информации в регистры атрибутов должна производиться только во время обратного хода луча по кадру. Бит 5 индексного регистра при этом должен быть сброшен в ноль. После окончания изменения информации в регистрах атрибутов требуется установить значение бита 5 в единицу путем записи в индексный регистр кода 20h.

Таблица 4.8. Регистры данных контроллера атрибутов

Индекс

Регистр

00h-0Fh

Регистры палитры (Palette Registers)

10h

Управление режимом (Mode Control Register)

11 h

Цвет рамки (Overscan Color Register)

12h

Разрешение отображения цветовых слоев (Color Plane

 

Enable Register)

13h

Горизонтальное поэлементное панорамирование

 

(Horizontal PEL Panning Register)

14h

Выбор цвета (Color Select Register)

Регистры палитры

Эти регистры (совместно с регистром выбора цвета) ставят в соответствие 4-разрядным кодам цвета 8-разрядные номера регистров ЦАП, в которых хранятся реальные значения интенсивностей трех компонентов цвета. Назначение разрядов этих регистров следующее:

•        биты 0-5 — номер регистра ЦАП (разряды 0-5);

•        биты 6 и 7 — не используются.

Регистр управления режимом

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

•        бит 0 — выбор режима (0 — текстовый, 1 — графический);

•        бит 1 — тип дисплея (0 — цветной, 1 — монохромный);

•       бит 2 — разрешение использования 9-бнтных символов псевдографики в монохромном текстовом режиме (0 — использование запрещено, 1 — разрешено); в цветных режимах требуется установить этот разряд в 0;

•       бит 3 — определяет значение бита 7 атрибута символа в текстовых режимах (0 — мерцание, 1 — яркость фона); в графических режимах этот разряд должен быть установлен в 0;

•        бит 4 — не используется (установить в 0);

•       бит 5 — управление поэлементным панорамированием верхней области экрана в режиме разделения экрана на 2 части (этот режим нигде не применяется, и значение данного разряда нужно всегда устанавливать в 0);

•       бит 6 — управление шагом поэлементного панорамирования (должен иметь значение 1 в 256-цветном режиме и 0 во всех остальных случаях);

•       бит 7 — управление замещением битов 4 и 5 регистров палитры (при установке этого разряда в 1 биты 4 и 5 регистров палитры замещаются битами 0 и 1 регистра выбора цвета).

Регистр цвета рамки

Регистр имеет индекс llh и предназначен для задания цвета рамки экрана. В этот регистр заносится номер одного из регистров ЦАП (от 0 до 255), содержимое которого будет определять цвет обрамления.

Регистр разрешения отображения цветовых слоев

Регистр с номером 12h используется для ограничения доступа к битовым матрицам со стороны контроллера атрибутов. Ограничение доступа нужно было только для старых видеоконтроллеров с объемом памяти 64 Кбайт и менее. При работе с цветными видеорежимами в этот регистр должно быть записано значение OFh. Назначение разрядов регистра:

•        бит 0 — доступ к слою 0 (0 — запрещен, 1 — разрешен);

•        бит 1 — доступ к слою 1 (0 — запрещен, 1 — разрешен);

•        бит 2 — доступ к слою 2 (0 — запрещен, 1 — разрешен);

•        бит 3 — доступ к слою 3 (0 — запрещен, 1 — разрешен);

•        биты 4-7 — не используются (установить в 0).

Регистр горизонтального поэлементного панорамирования

Регистр имеет номер 13h и предназначен для реализации плавной прокрутки изображения по горизонтали в текстовых и 16-цветных графических режимах.

Дело в том, что в этих режимах увеличение или уменьшение на единицу значения начального адреса приводит к смещению изображения сразу на 8 пикселов. Регистр поэлементного панорамирования дополняет регистры начального адреса, обеспечивая перемещение изображения с точностью до пиксела. Запись информации в этот регистр можно производить только в процессе обратного хода луча по кадру. В регистр можно записывать число от 0 до 7 — будет происходить сдвиг изображения влево на соответствующее число пикселов.

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

Регистр с номером 14h расширяет набор оттенков, доступных в 16- цветных режимах, и обеспечивает быструю смену палитры. Регистр добавляет два старших бита к 6-разрядным значениям, хранящимся в регистрах палитры, обеспечивая тем самым доступ ко всему набору регистров ЦАП. Два старших бита регистров палитры (разряды 4 и 5) могут быть также замещены битами 0 и 1 регистра выбора цвета.

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

•       биты 0 и 1 — заменяют для всех регистров палитры биты 4 и 5, если установлен в единицу разряд 7 регистра управления режимом;

•       биты 2 и 3 — определяют разряды б и 7 восьмиразрядного номера регистра цвета ЦАП;

•       биты 4-7 — не используются.

Регистры цифро-аналогового преобразователя

ЦАП обеспечивает преобразование двоичного кода, хранящегося в памяти видеоконтроллера, в аналоговые сигналы для электроннолучевой трубки. В состав блока ЦАП входит несколько управляющих регистров и 256 регистров данных, каждый из которых определяет один цвет. Регистр данных имеет длину 18 бит, по 6 бит на каждый основной цвет — красный, зеленый и синий. Таким образом, общее количество возможных оттенков составляет 218 (262 144), но одновременно доступны всего 256 оттенков.

Содержимое таблицы регистров ЦАП влияет на вывод изображения только в текстовых режимах, 16-цветных и 256-цветных графических режимах. В режимах DirectDraw (HiColor и TrueColor) информация поступает прямо на цифро-аналоговые преобразователи (в обход таблицы регистров цвета).

В 256-цветных режимах по умолчанию (то есть после установки режима при помощи прерывания BIOS) первые 16 цветов таблицы ЦАП совпадают с набором цветов 16-цветных режимов. Далее следуют 16 оттенков серого цвета. К сожалению, оставшиеся регистры содержат довольно тусклые цвета. Кроме того, порядок размещения цветов, устанавливаемый по умолчанию, неудобен для трехмерной графики. Поэтому в компьютерных играх обычно приходится заносить в таблицу ЦАП специально подобранные значения, необходимые для решения конкретной задачи. Рассмотрим регистры ЦАП.

Регистр состояния ЦАП

Регистр доступен только для считывания через порт 3C7h. По содержимому регистра можно определить состояние ЦАП. Назначение разрядов регистра:

•       биты 0 и 1 — код режима доступа к регистрам таблицы ЦАП (0 — регистры данных доступны только для чтения, 3 — только для записи; коды 1 и 2 не определены);

•       биты 2-7 — зарезервированы.

Регистр выбора считываемого регистра цветовой таблицы

Регистр доступен только для записи через порт 3C7h. В него заносится номер регистра таблицы цветов, значение из которого требуется прочитать.

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

Регистр выбора записываемого регистра цветовой таблицы

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

Регистр данных цветовой таблицы ЦАП

Через порт 3C9h для чтения или для записи доступен один из регистров данных цветовой таблицы ЦАП, номер которого записан в соответствующем индексном регистре. Запись и считывание выполняются в три этапа, каждый раз передается 6 разрядов, соответствующих одному из основных цветов: первые 6 бит определяют интенсивность красного цвета, вторые — зеленого, третьи — синего. Нарушать процесс передачи информации нельзя, поэтому нужно запретить прерывания, пока не будет завершена запись или считывание всех трех 6-битовых групп. Назначение разрядов регистра данных следующее:

•         биты 0-5 — интенсивность одного из основных цветов;

•        биты 6 и 7 — не используются.

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

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

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии