Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Системное Программирование" Выпуск от 27/06/2002 - Статья


Информационный Канал Subscribe.Ru

Новости ╧14
Добавить в избранное | Стартовая страница
Новости сайта Системное программирование

Новости сайта "Системное Программирование"

Приглашаем к сотрудничеству руководителей других интернет проектов

Уважаемые читатели присылайте свои отзывы по адресу:
mailto:odin_2000_sata@mail.ru?subject=Otzvnew


РАБОТА В ГРАФИЧЕСКОМ РЕЖИМЕ. УПРАВЛЕНИЕ ЭКРАНОМ, ЦВЕТОМ. ИЗОБРАЖЕНИЕ ТОЧКИ

Описание
Цветной графический адаптер имеет три графических режима, PCjr- шесть, а EGA - семь. Требования к размеру памяти существенноразличаются для доступных режимов в зависимости от разрешения экрана и числа цветов. В своих улучшенных графических режимах EGAиспользует память дисплея совсем по-другому, чем остальные видеосистемы, но он точно эмулирует их методы работы с памятью в трех общих режимах. 3.1. Цветной графический адаптер CGA и система PCjr. Сначала рассмотрим цветной адаптер и систему PCjr. Два цвета(черный и белый) требуют только один бит памяти для каждой точкина экране. Четыре цвета занимают 2 бита, а 16 цветов - 4 (8-цвет-ные режимы не используются, поскольку три бита, требующиеся для их представления, нельзя удобно разместить в битах байта). Для всех режимов по вертикали имеется 200 точек. Низкое разрешение (используемое только на PCjr) выводит 160 точек по горизонтали, среднее разрешение - вдвое больше (320 точек), а высокое разрешение - ещевдвое больше (640 точек). В двух- и четырехцветном режимах PCjr имеет возможность выбрать любой из 16 доступных цветов. Цветной адаптер более ограничен. В двухцветном режиме он всегда ограничен белым и черным, а в четырехцветном режиме только цвет фона может выбираться из 16 цветов, в то время как основной цвет нужно брать только из двух предопределенных палитр. Палитра 0 содержит коричневый, зеленый и красный цвета, а палитра 1 - циан, магента и белый. В отличие от текстовых данных в режимах 4-6 и 8-А графические данные разбиты на видеостранице на части. В большинстве режимов данные разбиваются на две части, при этом первая половина буфера содержит данные для четных строк экрана, а вторая - для нечетных (строки нумеруются начиная с верха экрана вниз). Однако в 16-цветных режимах PCjr буфер размером 32К делится на четыре части, каждая из которых содержит данные для каждой четвертой строки. В 4-цветных режимах первый байт буфера содержит информацию о самых левых точках строки 0, причем старший бит относится к самой левой точке. Второй байт содержит информацию о следующем сегменте строки и т.д. Для всей строки требуется 80 байт. 81-й байт содер жит информацию о левом конце строки 2. В 16-цветных режимах картина приблизительно такая же, но для каждой строки требуется 160 байт и каждая часть буфера содержит данные только для вдвое меньшего числа строк. Для цветного графического адаптера четные строки занимают память со смещениями от 0000 до 1F3FH, а нечетные - от 2000H до 3F3FH. Промежуток между 1F3FH и 2000Н игнорируется. Для цветного графического адаптера цвет доступен только в режиме умеренного разрешения. Для каждой точки отводятся два бита каждого байта видеобуфера. Четыре возможные комбинации этих битов представляют один фоновый и три основных цвета. Фоновый цвет может быть любым из 16. Однако три основных цвета могут выбираться изодной из двух палитр, каждая из которых содержит только три предопределенных цвета:

Номер кода       Цепочка битов      Палитра 0        Палитра 1
        0                                             00           цвет фона        цвет фона
        1                                             01            зеленый            циан
        2                                             10            красный          магента
        3                                             11       желтый/коричневый      белый
Если вы в какой-то момент переключились между палитрами, то все выведенные на экран цвета будут соответственно изменены. Отметим, что BIOS хранит в своей области данных однобайтовую переменную, которая содержит текущий номер палитры. Ее адрес 0040:0066Н. Изменение этого числа не меняет текущую установку палитры; наоборот, если вы измените цвет палитры другими средствами, помимо функций операционной системы, то значение этой переменной будет модифицировано. Для цветного адаптера мы можем получить доступ к "регистру выбора цвета" через порт 3D9H. В графических режимах этот регистр действует по-другому, чем в текстовых. Биты 0-3 содержат информацию о фоновом цвете в обычном формате (соответственно синий, зеленый и красный компоненты и интенсивность). Бит 5 выбирает палитру, и когда этот бит равен 0, то назначается палитра номер 0. В графических режимах остальные биты не имеют значения. Этот регистр только для записи, поэтому вы должны указывать информацию и о фоновом цвете, и о палитре при изменении любого из них.
2.Расширенный графический адаптер.
Расширенный Графический Адаптер (Enhanced Graphics Adapter EGA) фирмы IBM представляет собой графический контроллер, обеспечивающий возможность работы в различных видеорежимах совместно с цветными или монохромными мониторами с цифровыми входами. Кроме того, адаптер обеспечивает возможность работы со световым пером. Адаптер может функционировать в нескольких графических режимах (используются 4 битовые плоскости) и обладает возможностью загрузки в видеопамять шрифтов в алфавитно-цифровых режимах. Адаптер содержит в себе 64Кбайт памяти, оформленной в виде 4 битовых плоскостей по 16 Кбайт. Кроме того, обеспечивается возможность расширения памяти адаптера до 128 Кбайт или 256 Кбайт. Ниже представлена структурная схема видеоадаптера EGA.
                                CPU addr.                    +------+
  -------------------------------->╕ MUX  +----------+
     ╕CPU data+-----+              ╕      +--------+ ╕
  ----------->╕CRTC ╕              +---^--+        ╕ ╕
     ╕     ╕  ╕     +---------+        +-----+     ╕ ╕
     ╕     ╕  +--^--+         ╕   +------+   ╕     ╕ +-->+------+
     ╕     +-----╕------------╕-->╕ GRAPH╕<--------╕-╕-->╕    1 ╕<+
     ╕     ╕     ╕    +---╕---╕-->╕      ╕<--------╕-╕>+------+ ╕ ╕
  +------+ ╕     ╕    ╕   ╕   ╕   +------+         ╕ +>╕ BIT 0╕-+ ╕
  ╕ ROM  +-╕     ╕    ╕   ╕   ╕        +--------+  ╕   ╕ MAP  ╕<--╕
  ╕      ╕ ╕     ╕    ╕   ╕   ╕                 ╕  ╕   +------+   ╕
  +------+ ╕     ╕    ╕   ╕   ╕                 ╕  +---->+------+ ╕
           ╕     ╕    ╕   ╕   ╕                +╕ -╕---->╕    3 ╕<╕
           ╕     ╕    ╕   ╕   ╕   +------+     ╕++ ╕   +------+ ╕ ╕
           ╕     ╕    ╕   +---╕-->╕ GRAPH╕<----+ ╕ +-->╕ BIT 2╕-+ ╕
           ╕ +------+ +---╕---╕-->╕      +-------╕---->╕ MAP  ╕<--+
           +>╕      +-+   ╕   ╕   +------+     ╕ ╕     +------+
             ╕ SEQ  +-----╕---╕--------╕-------╕-╕---------------
             ╕      +-+   ╕   ╕        +-----+ ╕ ╕
             +------+ ╕   ╕   ╕             +v-v-v-+------>  O
                      ╕   ╕   +------------>╕      ╕------>  U
                      ╕   +---------------->╕ATTRIB╕------>  T
                      +-------------------->╕      ╕------>  P
                                            ╕      ╕------>  U
                                            +------+------>  T
2.1. Основные компоненты.
Блок управления электронно-лучевой трубкой (CRT Controller) управляетсигналами горизонтальной и вертикальной синхронизации,начальным адресом вывода в видеобуфере, положением и формой курсора и др. Блок синхронизации (Sequencer) генерирует тактовые сигналы и сигналы для синхронизации доступа к видеопамяти. Данным устройством обеспечивается возможность доступа к видеопамяти со стороны процессора в специально выделенные моменты времени в промежутке между интервалами времени, необходимыми для доступа к видеопамяти в процессе регенерации изображения на экране дисплея. В этом же блоке содержатся регистры управления записью данных в битовые плоскости.
Графический контроллер (Graphics Controller) направляет данные из памяти в контроллер атрибутов и в процессор. В графических режимах данные из видеопамяти пересылаются в микросхему контроллера атрибутов последовательно. В текстовых режимах данные пересылаются в параллельной форме в обход графического контроллера. Для быстрого изменения изображения на экране дисплея аппаратурой обеспечивается возможность записи 32 бит данных за один цикл памяти (8 бит для каждой плоскости), а дополнительная логика позволяет процессору записывать данные в дисплейную память не придерживаясь границ байтов. Контроллер атрибутов (Attribute controller) устанавливает цветовую палитру из 16 цветов, каждый из которых может быть определен независимо от остальных цветов. На вход монитора подается 6-ти битовый код цвета. Этой же микросхемой выполняются действия по управлению мерцанием и подчеркиванием. Контроллер получает данные из видеобуфера и преобразует их в управляющие сигналы, подаваемые на вход монитора.
Видеобуфер (Display Buffer).Размер видеобуфера (называемого также видеопамятью или памяью
адаптера) равен 64 Кб. Видеобуфер доступен со стороны процессора как на чтение так и на запись и состоит из 4 битовых плоскостей по 16 Кб. Существует возможность расширения видеобуфера до 128 Кб. На плате расширения установлены разъемы для подключения еще 128 Кб памяти, что позволяет довести размер видеобуфера до 256 Кб. При этом в каждую битовую плоскость добавляется два дополнительных банка памяти по 16 Кб.
С целью совместимости с более ранними моделями видеоадаптеров, адреса видеобуфера могут изменяться. Возможны 4 варианта. Видеобуфер может установлен длиной 128 Кб и начинаться с сегментного адреса A0000, длиной 64 Кб и начинаться с адреса A0000, длиной 32 Кб и начинаться с адреса B0000 или длиной 32 Кб с началом по адресу B8000. Базовая система ввода/вывода видеоадаптера (BIOSV) находится в памяти специального ПЗУ установленного на плате адаптера.BIOSV объединяется с системной базовой системой ввода/вывода. Здесь размещаются шрифты, используемые для генерации символов и управляющие программы видеоадаптера. Размер ПЗУ - 16 Кб, начальный адрес C0000.
2.2.Работа в графическом режиме 16/64 (10H)
Для режимов экрана EGA от DH до 10Н память организована совсемпо-другому. Она разделяется на одну, две или четыре битовые плоскости, каждая из которых организована так же, как для черно-белого режима высокого разрешения, описанного выше: когда байт данных посылается в определенный адрес видеобуфера, каждый бит соответствует точке на экране, причем они описывают горизонтальный сегмент строки и бит 7 соответствует самой левой точке. Записываются четыре такие битовые плоскости, соответствующие одним м тем же адресам, в видеобуфере. Это отводит каждой точке 4 бита, что позволяет описывать 16 цветов. PCjr и EGA работают с цветом совсем по-другому, чем цветной адаптер. Они используют регистры палитры, которые позволяют в любой момент изменить цвет, соответствующий данному коду. Обе системы используют один и тот же основной набор кодов цвета, который в точности совпадает с применяемым в текстовых режимах. EGA может использовать 6 бит регистра палитры, а не 4, когда к нему присоединен улучшенный цветной графический дисплей фирмы IBM. При этом становятся доступными 64 цвета, кодировка для которых R'G'B'RGB.R, G и B соответствуют темным цветам, а R', G' и B' -светлым. Различные комбинации создают 64 оттенка. Как всегда,111111 соответствует белому цвету, а 000000 - черному. Отметим, что через регистры палитры для EGA всегда доступны 64 цвета независимо от того,в каком режиме он работает. При работе врежиме 4-цветной графики (как у цветного адаптера) активны только младшие 4 регистра палитры, но они могут содержать любые цвета. Функция ВН прерывания 10Н устанавливает как фоновый цвет, так и цвета палитры, но не одновременно. Для установки фонового цвета надо поместить в ВН 0, а затем код цвета от 0 до 15 - в BL. Для установки палитры надо поместить в ВН 1, а в BL 0 или 1.
2.3. Назначение регистров.
2.3.1. Регистры блока синхронизации

  Таблица  1             Назначение регистров блока синхронизации
+----------------------------------------------------------------+
╕              Наименование           ╕   Порт     ╕   Индекс    ╕
+-------------------------------------+------------+-------------╕
╕ Адресный                            ╕    3C4     ╕      -      ╕
╕ (Address)                           ╕            ╕             ╕
╕ Инициализации                       ╕    3C5     ╕      00     ╕
╕ (Reset)                             ╕            ╕             ╕
╕ Тактового режима                    ╕    3C5     ╕      01     ╕
╕ (Clocking mode)                     ╕            ╕             ╕
╕ Маски битовой плоскости             ╕    3C5     ╕      02     ╕
╕ (Map mask)                          ╕            ╕             ╕
╕ Выбора набора символов              ╕    3C5     ╕      03     ╕
╕ (Character map select)              ╕            ╕             ╕
╕ Режима использования памяти         ╕    3C5     ╕      04     ╕
╕ (Memory mode)                       ╕            ╕             ╕
+----------------------------------------------------------------+
              Адресный регистр блока синхронизации
    Адресный - регистр,  указывающий на один  из
        регистров  блока синхронизации, расположенный по адресу 3С4.
        В этот регистр загружается двоичный номер регистра блока
        синхронизации, в который будет производится запись. Номера
        регистров, помещаемые в адресный регистр представлены в поле
        "Индекс" приведенной выше таблицы.
Таблица  2                    Формат адресного регистра.
+---------------------------------------------------------------+
╕        Формат адресного регистра блока синхронизации          ╕
+---------------------------------------------------------------╕
╕Биты 7 6 5 4 3 2 1 0                                           ╕
╕     ╕ ╕ ╕ ╕ +--------> Адрес                                  ╕
╕     +----------------> Не используются                        ╕
+---------------------------------------------------------------+
    Наибольший интерес представляет регистр маски битовой плоскости.
    2.3.2. Регистры блока управления ЭЛТ.
 Таблица  3            Назначение регистров блока управления ЭЛТ
+----------------------------------------------------------------+
╕              Наименование           ╕   Порт     ╕   Индекс    ╕
+-------------------------------------+------------+-------------╕
╕ Адресный                            ╕   3?4      ╕      -      ╕
╕ (Address)                           ╕            ╕             ╕
╕ Общей длительность строки           ╕   3?5      ╕      00     ╕
╕ (horisontal total)                  ╕            ╕             ╕
╕ Длительности участка отображения    ╕   3?5      ╕      01     ╕
╕ в строке (Horizontal display        ╕            ╕             ╕
╕ enable end)                         ╕            ╕             ╕
╕ Начала горизонтального гашения      ╕   3?5      ╕      02     ╕
╕ (Start horisontal blank)            ╕            ╕             ╕
╕ Окончания горизонтального гашения   ╕   3?5      ╕      03     ╕
╕ луча (End horisontal blank)         ╕            ╕             ╕
╕ Начала горизонтального обратного    ╕   3?5      ╕      04     ╕
╕ хода луча (Start horisontal retrace)╕            ╕             ╕
╕ Окончания горизонтального обратного ╕   3?5      ╕      05     ╕
╕ хода луча (End horisontal retrace)  ╕            ╕             ╕
╕ Общего количество строк растра      ╕   3?5      ╕      06     ╕
╕ в кадре (vertical total)            ╕            ╕             ╕
╕ Переполнения                        ╕   3?5      ╕      07     ╕
╕ (Overflow)                          ╕            ╕             ╕
╕ Установки строки растра             ╕   3?5      ╕      08     ╕
╕ (Preset row scan)                   ╕            ╕             ╕
╕ Вертикального размера символа       ╕   3?5      ╕      09     ╕
╕ (Max scan line)                     ╕            ╕             ╕
╕ Начала курсора                      ╕   3?5      ╕      0A     ╕
╕ (Cursor start)                      ╕            ╕             ╕
╕ Окончания курсора                   ╕   3?5      ╕      0B     ╕
╕ (Cursor end)                        ╕            ╕             ╕
╕ Старшей составляющей начального     ╕   3?5      ╕      0C     ╕
╕ адреса (Start address high)         ╕            ╕             ╕
╕ Младшей составляющей начального     ╕   3?5      ╕      0D     ╕
╕ адреса (Start address low)          ╕            ╕             ╕
╕ Старшей составляющей позиции        ╕   3?5      ╕      0E     ╕
╕ курсора (Cursor location high)      ╕            ╕             ╕
╕ Младшей составляющей позиции        ╕   3?5      ╕      0F     ╕
╕ курсора (Cursor location high)      ╕            ╕             ╕
╕ Начала вертикального обратного хода ╕   3?5      ╕      10h    ╕
╕ луча (Vertical retrace start)       ╕            ╕             ╕
╕ Старшей составляющей адреса         ╕   3?5      ╕      10h    ╕
╕ светового пера (Light pen high)     ╕            ╕             ╕
╕ Окончания обратного хода луча       ╕   3?5      ╕      11h    ╕
╕ (Vertical retrace end)              ╕            ╕             ╕
╕ Младшей составляющей адреса         ╕   3?5      ╕      11h    ╕
╕ светового пера (Light pen low)      ╕            ╕             ╕
╕ Длительности участка отображения    ╕   3?5      ╕      12h    ╕
╕ в кадре (Vertical display end)      ╕            ╕             ╕
╕ Смещения (Offset)                   ╕   3?5      ╕      13h    ╕
╕ Положения символа подчеркивания     ╕   3?5      ╕      14h    ╕
╕ (Underline location)                ╕            ╕             ╕
╕ Начала вертикального гашения луча   ╕   3?5      ╕      15h    ╕
╕ (Start vertical blank)              ╕            ╕             ╕
╕ Окончания вертикального гашения луча╕   3?5      ╕      16h    ╕
╕ (End vertical blank)                ╕            ╕             ╕
╕ Управления режимом                  ╕   3?5      ╕      17h    ╕
╕ (Mode control)                      ╕            ╕             ╕
╕ Сравнения строк                     ╕   3?5      ╕      18h    ╕
╕ (Line compare)                      ╕            ╕             ╕
+----------------------------------------------------------------╕
╕         ? = B в монохромных режимах и D в многоцветных         ╕
+----------------------------------------------------------------+
    Эксперименты с регистрами блока управления ЭЛТ,которые
        формируют  изображение кадра,  могут  привести  к поломке видеотерминала.
    2.3.3.     Регистры графического контроллера.
Таблица  4    Назначение регистров  графического контроллера
+----------------------------------------------------------------+
╕              Наименование           ╕   Порт     ╕   Индекс    ╕
+-------------------------------------+------------+-------------╕
╕ Регистр позиции графики 1           ╕    3СС     ╕      -      ╕
╕ (Graphics 1 Position )              ╕            ╕             ╕
╕ Регистр позиции графики 2           ╕    3СA     ╕      -      ╕
╕ (Graphics 2 Position )              ╕            ╕             ╕
╕ Адресный регистр графического конт- ╕    3CE     ╕      -      ╕
╕ роллера (Graphics 1 & 2 Address)    ╕            ╕             ╕
╕ Цвета (Set/Reset)                   ╕    3CF     ╕      00     ╕
╕ Разрешения цвета (Enable Set/Reset) ╕    3CF     ╕      01     ╕
╕ Сравнения цвета (Color Compare)     ╕    3CF     ╕      02     ╕
╕ Вращения данных (Data rotate)       ╕    3CF     ╕      03     ╕
╕ Выбора плоскости для чтения         ╕    3CF     ╕      04     ╕
╕ (Read Map Select)                   ╕            ╕             ╕
╕ Выбора режима (Mode)                ╕    3CF     ╕      05     ╕
╕ Многоцелевой (Miscellaneous)        ╕    3CF     ╕      06     ╕
╕ Регистр независимости от значения   ╕            ╕             ╕
╕ плоскости при чтении                ╕    3CF     ╕      07     ╕
╕ (Color Don't Care)                  ╕            ╕             ╕
╕ Маски (Bit Mask)                    ╕    3CF     ╕      08     ╕
+----------------------------------------------------------------+
    2.3.4.  Регистры контроллера атрибутов.
Таблица  5      Назначение регистров  контроллера атрибутов
+----------------------------------------------------------------+
╕              Наименование           ╕   Порт     ╕   Индекс    ╕
+-------------------------------------+------------+-------------╕
╕ Адресный регистр (Address Register) ╕   3C0      ╕      -      ╕
╕ Регистры палитры (Palette Registers)╕   3C0      ╕   00 - 0F   ╕
╕ Регистр управления режимом          ╕   3C0      ╕   10        ╕
╕ (Mode Control Register)             ╕            ╕             ╕
╕ Регистр управления цветом бордюра   ╕   3C0      ╕   11        ╕
╕ (Overscan Color Register)           ╕            ╕             ╕
╕ Регистр разрешения отображения бито-╕   3C0      ╕   12        ╕
╕ вой плоскости (Color Plane Enable   ╕            ╕             ╕
╕ Register)                           ╕            ╕             ╕
╕ Горизонтального сдвига пикселов     ╕   3C0      ╕   13        ╕
╕ (Horisontal Pel Panning Register)   ╕            ╕             ╕
+----------------------------------------------------------------+
 
                        

2.4. Рисование точек.
Вследствие организации графической информации в видеобуфере вывод одной точки подразумевает изменение отдельных битов памяти. Режимы двух, четырех и шестнадцати цветов требуют, чтобы для установки характеристик одной точки были изменены один, два и четыре бита соответственно. Для этих операций необходимы огромные затраты процессорного времени, поэтому графическое программное обеспечение, как правило, работает очень медленно. Тщательное обдумывание часто позволяет сразу установить все биты одного байта, а не обращаться к одному и тому же байту 4 или 8 раз. Функция СН прерывания 10Н устанавливает точку. DX содержит строку, а CX - столбец. Они отсчитываются от 0. Код цвета помещается в AL. Отметим, что содержимое AX будет разрушено при выполнении прерывания. В то время как цвет палитры помещается в младшие биты AL, старший бит также имеет значение. Если он равен 1, то над цветом производится операция исключающего ИЛИ с текущим цветом. Напомним, что операция исключающего ИЛИ устанавливает бит только в том случае, если из двух сравниваемых битов установлен только один. Если оба сравниваемые бита равны 1 или оба равны 0, то результат будет 0. Для двуцветного режима это означает, что такая операция обращает установку бита. Если эту операцию применить ко всем точкам экрана, то будет обращен весь экран. В 4- и 16-цветном режимах, с другой стороны, области экрана могут менять свои цвета. На низком уровне мы имеем возможность прямого доступа к видеобуферу (отображение в память). Сначала вы должны вычислить смещение точки (а) внутри буфера и (б) внутри байта, содержащего биты, относящиеся к данной точке. После этого битовые операции обеспечат соответствующую установку. У EGA - адаптера графика более сложная. С точки зрения процессора режимы экрана 0-7 действуют так же, как соответствующие режимы для цветного адаптера или PCjr, но режимы от DH до 10Н совершенно другие. Организация памяти для этих режимов меняется в зависимости от числа цветов и количества памяти, имеющейся на плате дисплея. В режимах D, E и 10Н память разбита на 4 битовые плоскости. Каждая плоскость организована таким же образом, как для черно-белого режима высокого разрешения цветного адаптера, когда байт данных посылается в определенный адрес видеобуфера, каждый бит соответствует горизонтальному сегменту линии, а бит 7 - самой левой точке. Выводятся четыре такие битовые плоскости, относящиеся к одним и тем же адресам в видеобуфере. Это приводит к тому, что каждая точка описывается четырьмя битами (давая 16 цветов), причем каждый бит находится в отдельном байте отдельной битовой плоскости. Но как вы можете записать 4 различных байта данных, расположенных по одному и тому же адресу? Ответ на этот вопрос состоит в том, что вы не посылаете последовательно четыре байта по этому адресу. Вместо этого один из трех режимов записи позволяет изменить все 4 байта на основании одного байта данных, полученного от процессора. Влияние данных, посланных процессором, зависит от установки нескольких регистров, включающих два регистра маски, которые определяют, на какие биты и в каких битовых плоскостях будут изменяться биты. Для понимания этих регистров мы должны сначала разобраться с четырьмя регистрами задвижки (latch register). Они содержат данные для четырех битовых плоскостей в той позиции, к которой было последнее обращение. (Заметим, что термин " битовая плоскость" используется как для целой области видеобуфера, так и для и однобайтового буфера, временно хранящегося в регистре задвижки). Когда процессор посылает данные по определенному адресу, эти данные могут изменить или полностью сменить данные регистра задвижки, а впоследствии именно данные из регистра задвижки записываются в видеобуфер. Каким образом данные процессора влияют на регистр задвижки, зависит от режима записи, а также установки некоторых других регистров. При чтении адреса из видеобуфера регистры задвижки заполняются четырьмя байтами из четырех битовых плоскостей по данному адресу. Регистрами задвижки легко манипулировать, производя с их содержимым различные логические операции, что позволяет устраивать различные графические трюки. Регистр маски битов (смотри блок графического контроллера регистр 08H) и регистр маски (смотри блок синхронизации регистр 02H) карты действуют на регистры задвижки, защищая определенные биты или битовые плоскости от изменения под действием данных, поступающих от процессора. Установка бита регистра маски битов в 0 маскирует этот бит во всех четырех битовых плоскостях, делая соответствующую точку недоступной для изменения. Однако поскольку оборудование работает в байтовых терминах, реально "неизменяемые" биты перезаписываются в четыре битовые плоскости. Данные для этих маскируемых битов хранятся в регистрах задвижки, поэтому программа должна быть уверена, что текущее содержимое регистров задвижки относится к правильному адресу.Поэтому перед записью в видеобуфер надо сначала считывать из него. Биты 0-3 регистра маски карты соответствуют битовым плоскостям 0-3. Старшие 4 бита регистра не используются. Когда биты 0-3 равны 0, соответствующие битовые плоскости не меняются при операциях записи. Посылаемые в видеобуфер данные могут быть модифицированы и логически обработаны вместе с данными,хранящимися в регистрах-задвижках с помощью регистра вращения данных( регистр 03H блока графического контроллера ) Биты 0 - 2 регистра вращения определяют число разрядов,на которое производится циклический сдвиг данных процессора влево при записи данных в видеобуфер. Для записи данных без сдвига этот бит должен быть установлен в 0. При записи задают логическую функцию данных процессора с данными регистров задвижек. Значение битов: 00-данные не меняются
01-логическое "И"
10-логическое "ИЛИ"
11-исключающее "ИЛИ"
Операция сдвига выполняется раньше логической операции. Это свойство используется по разному в различных режимах записи.
Три режима записи и два режима чтения устанавливаются регистром установки режима(смотри блок графического контроллера регистр 05H).Режим записи устанавливается в битах 0 и 1, как число от 0 до 2. Бит 2 должен быть равным 0, также как и биты 4-7. Бит 3 устанавливает один из двух режимов чтения из видеобуфера. Этот бит может быть 0 или 1. BIOS EGA устанавливает режим записи в 00,режим чтения в 0. 2.4.1. Режим записи 0.
В простейшем случае режим записи 0 копирует данные процессорав каждую из четырех битовых плоскостей. Пусть, например, по определенному адресу видеобуфера послано 11111111В и разрешены все биты и все битовые плоскости (т.е. ничто не маскированно описанными выше регистрами масок). Тогда каждый бит во всех четырех плоскостях будет установлен в 1, так что цепочка битов для каждой из соответствующих точек будет 1111В. Это означает, что восемь точек будут выведены в цвете 15, который изначально соответствует белому цвету, хотя регистры палитры позволяют, чтобы на самом деле был любой из допустимых цветов. Теперь рассмотрим ту же ситуацию, когда посылается значение 00001000В. Цепочка битов для точки 3 будет 1111, а для остальных 0000, что соответствует черному (изначально). Поэтому в данном случае только точка 3 появится на экране, остальные 7 точек будут выключены. Если вы пошлете код палитры желаемого цвета в регистр маски карты, то регистр будет маскировать определенные битовые плоскости таким образом, что будет воспроизведен требуемый цвет. Приведенное выше обсуждение касалось одновременного вывода восьми точек. Ну а как вывести меньшее количество точек? В этом случае, конечно, необходимо сохранить существующие данные для некоторых точек, а чтобы это было возможно, текущее содержимое данного адреса сохраняется в регистрах задвижки. Затем используется регистр маски битов для маскирования тех точек, которые не должны изменяться. Если бит этого регистра сброшен в 0, то данные, получаемые от процессора для этого бита, игнорируются и вместо них используются данные, хранящиеся в регистрах задвижки. Заполнение регистров-задвижек меняется при ненулевом значении регистра разрешения цвета( регистр 01H блока графического адаптера) , разряды 0-3 которого разрешают заполнение байта выбранных битовых плоскостей значениями из соответствующих разрядов регистра цвета ( регистр 00H блока графического адаптера ). В этом случае значения данных процессора ( маски карты игнорируются).
2.4.2. Режим записи 1.
Режим записи 1 предназначен для специальных приложений. В этом режиме текущее содержимое регистра задвижки записывается по указанному адресу. Напоминаем, что регистры задвижки заполняются операцией чтения. Этот режим очень полезен для быстрого переноса данных при операциях сдвига экрана. Регистр маски битов и регистр маски карты не влияют на эту операцию. Не имеет значения также, какие данные посылает процессор - содержимое регистров задвижки записывается в память без изменений.
2.4.3. Режим записи 2.
Режим записи 2 представляет альтернативный способ установки отдельных точек. Процессор посылает данные, у которых имеют значение только 4 младших бита, рассматриваемые как цвет (индекс регистра палитры). Можно сказать, что эта цепочка битов вставляется поперек плоскостей. Цепочка дублируется на все восемь точек, относящихся к данному адресу, до тех пор, пока регистр маски битов не предохраняет определенные точки от изменения. Регистр маски карты активен, как и в режиме записи 0. Конечно, процессор должен послать полный байт, но только младшие 4 бита существенны.

2.4.4. Режим чтения 0.
Процессор осуществляет чтение данных (8 точек ) из регистра задвижки той плоскости, которая разрешена регистром выбора плоскости для чтения (разряды 0-2 регистра 04H блока графического контроллера).Для чтения цветов (кодов регистра палитры) всех 4 битовых плоскостей необходимо последовательно разрешить чтение и прочитать все плоскости по одному адресу.
2.4.5. Режим чтения 1.
В результате выполнения операции чтения в 1 будут установлены только те биты в байте, для которых цвет совпадает с цветом, заданным в битах 0-3 регистра сравнения цвета ( регистр 02H блока графического адаптера ).

2.5. Программирование регистров.
Каждая из микросхем адаптера обладает адресным регистром и несколькими регистрами данных. Адресный регистр используется в качестве указателя на тот или иной регистр данных. Адресный регистр является регистром типа "только запись" в который процессор при помощи команды OUT может быть помещен индекс выбранного регистра данных. Регистры данных каждой микросхемы адаптера доступны через соответствующий порт ввода/вывода. Доступ к различным регистрам данных осуществляется путем предварительного занесения в адресный регистр индекса требуемого регистра данных с последующей выдачей команды OUT со стороны процессора для занесения в него необходимого значения. Отличие имеют регистры контроллера атрибутов,где адресный регистр и регистр данных имеют один порт с адресом 3C0H. Внутри контроллера адресация организована таким образом, что каждый раз после записи в порт 3COH, производится переключение: адресный регистр -> регистр данных, соответствующий значению адресного регистра и наоборот. Для инициализации процесса переключения адресный регистр - регистр данных (вначале доступ к адресному регистру, а потом к регистру данных и т.д.) необходимо выполнить операцию чтения из порта с адресом 3BAH или 3DAH. После выполнения операции чтения, первый доступ к порту 3C0H будет обращением к адресному регистру контроллера атрибутов. После загрузки адресного регистра, следующая команда вывода в порт 3C0H приведет к записи требуемого значения в соответствующий регистр данных контроллера атрибутов. Выполнение этой команды снова делает адресный регистр доступным для записи и процесс может быть продолжен. После записи данных в регистры контроллера атрибутов необходи-
мо установить 5 бит адресного регистра контроллера в 1 ( разрешение вывода), т.е. послать в порт 3C0H значение 20H. EGA поддерживает стандартные графические функции BIOS.Можно вывести точку с помощью функции CH прерывания 10H, так же как для цветного дисплея или PCjr.При входе DX должен содержать номер строки, а CX -номер столбца, и то и другое отсчитывается от 0. Код цвета помещается в AL.Содержимое AX меняется при выполнении прерывания.

Составители:
А.И.Поворознюк,
И.С.Зыков,


Команда "Системных Программистов" - набирает внештатных сотрудников, для развития Сайта "Системный Программист". Оплата договорная банерными показами сети "ИнтерРеклама" . Свои резюме и предложения присылайте сюда

Все предложения присылайте на  Email

Нам будет приятно если Вы установите код нашей кнопки

<A HREF="http://www.iatp.kharkov.ua/sites/program/index.htm">
<IMG SRC="http://www.iatp.kharkov.ua/sites/program/images/baner.gif"
ALT=" Сайт Системного Программиста" BORDER=0 HEIGHT=31 WIDTH=88></A>

Харьков 2001 - 2002
(с) Софронов П.Н. 2001 - 2002

(с) Команда "Системных Программистов" 2001 - 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное