Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

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

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

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

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

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

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

Регистр определения различных режимов работы
(Miscellaneous Output Register - MOR)

В видеоадаптере EGA данный регистр доступен по адресу 3C2h только для записи. Видеоадаптер VGA позволяет также считать содержимое регистра, но уже по адресу 3CCh.

Ниже приведено описание отдельных битов регистра MOR:

  • D0 Выбор адресов ввода/вывода.
  • D1 Разрешение доступа к видеопамяти.
  • D2 Выбор частоты 0.
  • D3 Выбор частоты 1.
  • D4 Запрещение управления видеоадаптером.
  • D5 Бит четной/нечетной страницы.
  • D6 Полярность сигнала горизонтальной синхронизации.
  • D7 Полярность сигнала вертикальной синхронизации. Нулевая величина для данного бита устанавливает положительную полярность, единичная - отрицательную. Монохромный, цветной и улучшенный цветной дисплеи используют положительную полярность сигнала синхронизации.
  • D6 Полярность сигнала горизонтальной синхронизации. Нулевая величина для данного бита устанавливает положительную полярность, единичная - отрицательную. Монохромный дисплей использует отрицательную полярность сигнала синхронизации, а цветной - положительную.

Улучшенный цветной дисплей и аналоговый дисплей используют биты D7 и D6 для определения скорости сканирования. Таблица 8.4 содержит допустимые значения для этих битов.


D7   D6          EGA                  VGA

0    0           200 линий            не используется

0    1           350 линий            350 линий

1    0           не используется      400 линий

1    1           не используется      480 линий

Таблица 8.4 Соответствие полярности синхронизации и вертикальной разрешающей способности.

  • D5 Бит четной/нечетной страницы используется для режимов, которые передают четные адреса в нулевой цветовой слой, а нечетные - в первый. Все текстовые режимы устанавливают этот бит. Данный бит выбирает одну из двух 64К байтных страниц видеопамяти.
  • D4 Запрещение управления видеоадаптером. Используется только для EGA. При работе на VGA и Super VGA этот бит не используется. Обычно бит D4 имеет значение 0. В этом случае управление дисплеем осуществляет EGA. Если же бит D4 принимает значение 1, то дисплей управляется сигналами, поступающими от выходных выводов разъема дополнительного устройства.
  • D2, D3 Биты выбора частоты управляют тактовой частотой. Таблица 8.5 представляет правильные варианты установки этих битов.
D3 D2 Режим
0 0 640 столбцов (или 320 столбцов)
0 1 720 столбцов
1 0 внешний генератор (доступен через разъем дополнительного устройства)
1 1 зарезервированно

Таблица 8.5 Установка битов D3 и D2.

  • D1 Разрешение доступа к видеопамяти. Данный бит может быть запретить доступ процессора к видеопамяти для операций чтения и записи. Если бит равен нулю, то доступ к видеопамяти запрещен. Хотя процессор при запрещении доступа к видеопамяти не может обращаться к ней, циклы регенерации все равно будут выполняться. И содержимое видеопамяти не разрушится.
  • D0 Выбор адресов ввода/вывода. Бит D0 определяет адрес регистра управления дополнительным устройством (Feature Control Register), регистра состояния 1 (Input Status Register 1) и регистров контроллера ЭЛТ (CRT Controller). Когда данный бит равен нулю, происходит выбор адресного пространства монохромного режима (3Bхh). Если бит равен единице, то используется адресное пространство цветного режима работы видеоадаптера (3Dхh).

Данные, первоначально записываемые BIOS в этот регистр зависят от режима работы видеоадаптера:

Режим 0-6,0Dh,0Eh 7 Fh 10h
Содержимое регистра 23h 0A6h 0A2h 0A7h

Регистр управления дополнительным устройством
(Feature Control Register - FCR)

Для видеоадаптера EGA биты D1 и D0 данного регистра передают сигналы на разъем дополнительного устройства, соответственно, на линии FC0 (вывод 21) и FC1 (вывод 20) разъема. Этот регистр не используется для VGA, но бит D3 должен содержать ноль.

Адрес порта ввода/вывода данного регистра зависит от режима видеоадаптера. В монохромном режиме адрес порта 3BAh, а в цветном - 3DAh.

Регистр доступен только для записи, но VGA позволяет прочитать его содержимое через порт 3CAh.

Регистр состояния 0
(Input Status Register 0 - ISR0)

Данный регистр, имеющий адрес 3C2h, доступен только для чтения.

Регистр позволяет получить различную информацию от видеоадаптера EGA. Формат регистра приведен ниже:

3-D0   Не используются.
4   Состояние переключателей.
5   Бит 0 дополнительного устройства (FEAT0).
6   Бит 1 дополнительного устройства (FEAT1).
7   Бит прерывания от ЭЛТ.
  • D7 Бит прерывания от ЭЛТ. Бит установлен в 1, когда произошло вертикальное прерывание (по линии IRQ2) из-за обратного вертикального хода луча по кадру (погашеный луч перемещается из правого нижнего угла экрана в левый верхний). Этот бит устанавливается в начале обратного вертикального хода луча и сбрасывается записью в регистр конца вертикального хода луча.
  • D6 Бит 1 дополнительного устройства. Используется только EGA. Бит регистра подключен к 17-му выводу разъема дополнительного устройства.
  • D5 Бит 0 дополнительного устройства. Используется только EGA. Бит регистра подключен к 19-му выводу разъема дополнительного устройства.
  • D4 Состояние переключателей. При помощи данного бита регистра, BIOS EGA считывает состояние четырех переключателей, находящихся на плате видеоадаптера и определяющих его конфигурацию. Номер считываемого переключателя задается двумя битами выбора частоты (Бтиы D2 и D3) регистра определения различных режимов работы (MOR), согласно следующей таблице:
Бит D3 Бит D2 Считываемый переключатель
0 0 переключатель 1
0 1 переключатель 2
1 0 переключатель 3
1 1 переключатель 4

Таблица 8.6 Установка битов D3 и D2.

Если бит D4 установлен в единицу, то переключатель, заданный битами D2 и D3 регистра определения различных режимов работы, находится в положении ON. Если бит сброшен в ноль, то переключатель находится в положении OFF.

Для EGA эти четыре переключателя определяют, какой дисплей используется с видеоадаптером и какой дополнительный видеоадаптер может быть подключен к компьютеру (cм. главу "Системы с двумя дисплеями").

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

      4 3 2 1
     _________   Первичный: EGA с цветным дисплеем (40х25).
ON   ¦Ё     Ё¦   
OFF  ¦  Ё Ё  ¦   Дополнительный: MDA.
     _________   


      4 3 2 1
     _________   Первичный: EGA с цветным дисплеем (80х25).
ON   ¦Ё      ¦
OFF  ¦  Ё Ё Ё¦   Дополнительный: MDA.
     _________


      4 3 2 1
     _________   Первичный: EGA с улучшенным цветным дисплеем.
ON   ¦  Ё Ё Ё¦
OFF  ¦Ё      ¦   Дополнительный: MDA.
     _________


      4 3 2 1
     _________   Первичный: EGA с улучшенным цветным дисплеем.
ON   ¦  Ё Ё  ¦
OFF  ¦Ё     Ё¦   Дополнительный: MDA.
     _________


      4 3 2 1
     _________   Первичный: EGA с монохромным дисплеем.
ON   ¦  Ё   Ё¦
OFF  ¦Ё   Ё  ¦   Дополнительный: CGA с цветным дисплеем
     _________             (40х25).


      4 3 2 1
     _________   Первичный: EGA с монохромным дисплеем.
ON   ¦  Ё    ¦
OFF  ¦Ё   Ё Ё¦   Дополнительный: CGA с цветным дисплеем
     _________             (80х25)


      4 3 2 1
     _________   Первичный: MDA.
ON   ¦Ё Ё Ё Ё¦
OFF  ¦       ¦   Дополнительный: EGA с цветным дисплеем
     _________             (40х25).


      4 3 2 1
     _________   Первичный: MDA.
ON   ¦Ё Ё Ё  ¦
OFF  ¦      Ё¦   Дополнительный  EGA с цветным дисплеем
     _________             (80х25).


      4 3 2 1
     _________   Первичный: MDA.
ON   ¦Ё Ё   Ё¦
OFF  ¦    Ё  ¦   Дополнительный: EGA с улучшенным цветным
     _________             дисплеем.


      4 3 2 1
     _________   Первичный: MDA.
ON   ¦Ё Ё    ¦
OFF  ¦    Ё Ё¦   Дополнительный: EGA с улучшенным цветным
     _________             дисплеем.


      4 3 2 1
     _________   Первичный:  CGA с цветным дисплеем 40х25
ON   ¦Ё   Ё Ё¦
OFF  ¦  Ё    ¦   Дополнительный: EGA с монохромным дисплеем.
     _________


      4 3 2 1
     _________   Первичный:  CGA с цветным дисплеем 80х25
ON   ¦Ё   Ё  ¦
OFF  ¦  Ё   Ё¦   Дополнительный: EGA с монохромным дисплеем.
     _________



VGA использует бит D4 для определения типа используемого дисплея (цветной или монохромный).

Особенно подчеркнем, что положение этих переключателей может быть считано также из байта памяти с адресом 0000:0488h:

  • D3-D0 Биты, соответствующие переключателям. Если бит установлен в единицу, то соответствующий переключатель находится в положении ON. Если бит сброшен в ноль, то переключатель находится в положении OFF.
  • D7-D4 Не используются.

Следующая программа считывает значение регистра состояния 0, выделяет биты D5 и D6, поступающие с разъема дополнительного устройства и отображает значения этих битв на экране диспля.

// чтение битов дополнительного устройства
// (битов D5 и D6 регистра состояния 0)

#include <stdio.h>
#include "sysp.h"
#include "sysgraph.h"

void main(void) {
   int            feature_bits;
   unsigned       crt_address;
   BIOS_VAR _far  *bios_var_ptr;

   // читаем содержимое регистра состояния 0 и выделяем 
   // биты D5 и D6

   feature_bits = (ReadReg(0x3C2) & 0x60) >> 5;

   printf("Биты дополнительного устройства: %x\n", feature_bits);
}

Функция ReadReg, используемая в программе, описана ранее.

Регистр состояния 1
(Input Status Register 1 - ISR0)

Регистр позволяет получить различную информацию о состоянии видеоадаптера.

Для видеоадаптера CGA Содержимое регистраможно считать через порт, имеющий адрес 3DAh. Для адаптеров EGA и VGA данный регистр, имеет адрес 3BAh в монохромных режимах и адрес 3DAh - в цветных. Регистр состояния 1 доступен только для чтения.

Приведем формат регистра состояния 1:

D0   Бит разрешения отображения.
D1   Бит тригера светового пера.
D2   Бит переключателя светового пера.
D3   Бит обратного вертикального хода 
D5-D4   Диагностические биты.
D7-D6   Биты не используются.

  • D7, D6 Биты не используются.
  • D5, D4 Диагностические биты, применяемые для получения двух из шести цветовых выходных сигналов передаваемых на дисплей (для EGA). Какие два сигнала из шести будут диагностироваться, определяют с помощью регистра разрешения цветового слоя контролленра атрибутов (Таблица 8.7):

Регистр разрешения      Регистр состояния 1
цветового слоя          
D5  D4                  D5                 D4


0   0                   красный            синий

0   1                   второй красный     второй зеленый

1   0                   второй синий       зеленый

1   1                   не используется    не используется

Таблица 8.7 Считывание диагностических битов EGA.

Таблица 8.8 показывает, как можно считать два из восьми цветовых сигналов вырабатываемых контроллером атрибутов видеоадаптера VGA:


Регистр разрешения              Регистр состояния 1
цветового слоя                  
D5  D4                          D5  D4


0   0                           P2  P0

0   1                           P5  P4

1   0                           P3  P1

1   1                           P7  P6

Таблица 8.8 Считывание диагностических битов VGA.

Фактически биты D5 и D4 представляют возможность прочитать содержимое регистров таблицы цветовой палитры для видеоадаптера EGA. Следует отметить, что некоторые адаптеры, совместимые с EGA, не поддерживают эти биты. По-этому их использование может наложить некоторые ограничения на работу программы.

  • D3 Бит обратного вертикального хода луча. Бит принимает значение 1 в течение обратного вертикального хода луча по кадру. Данный бит также установлен в случае, если разрешено прерывание IRQ2 EGA, и другое устройство выдает запрос на это прерывание.

Биты D2 и D1 относятся к управлению световым пером. Для видеоадаптеров VGA и Super VGA эти биты не используются, так как такие адаптеры не поддерживают световое перо.

  • D2 Бит переключателя светового пера. Если переключатель светового пера находится в положении ON (включено), то бит D2 равен единице. Если же переключатель находится в положении OFF (выключено), то бит D2 равен нулю.
  • D1 Бит триггера светового пера. Бит равен единице, если триггер светового пера установлен. Этот бит будет сохранять единицу до записи нуля через порт с адресом 3BBh для монохромного режима, или через порт 3DBh - для цветного режима.
  • D0 Бит разрешения отображения. Бит принимает значение единицы во время интервала активности дисплея (когда адаптер читает данные из видеопамяти), и равен нулю во время горизонтального и вертикального обратного хода луча.

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

Ниже представлена программа, использующая функцию WaitVert, для определения частоты кадров. Функция WaitVert задерживает выполнение программы до начала обратного вертикального хода луча.

// программа определения частоты кадров

#include   <time.h>
#include   <stdio.h>
#include   <bios.h>

#define   NUM   200

void WaitVert(void);


void main() {

   time_t   t_start, t_end;
   int      i;
   float   fr;

// определяем время запуска процесса

   t_start = clock();

// ожидаем когда процесс вертикальной разверти выполнится NUM раз

   for(i = 0; i < NUM; i++) WaitVert();

// определяем время завершения процесса

   t_end = clock();

// вычисляем частоту кадров

   fr = NUM/(((float)t_end - t_start) / CLK_TCK);
   printf( "\nЧастота кадров = %4.1f \n", (float)fr );
}


/**
*.Name   WaitVert
*
*.Title   Определение начала обратного вертикального хода луча.
*
*.Descr   Функция ожидает начало обратного вертикального хода луча.
*      Использование функции позволяет синхронизировать работу 
*      программы с периодами работы видеоадаптера.
*
*.Proto   void WaitVert(void)
*
*.Params   Отсутствуют.
*
*.Return   Не используются.
*
*.Sample   get_vert.c
**/
void WaitVert(void) {
   unsigned count;
   _asm {

; устанавливаем регистр es на сегмент с нулевым адресом

      mov   ax,0h
      mov   es,ax

; определяем адрес порта индексного регистра
;  контроллера ЭЛТ (3B4h/3D4h в 
; зависимости от режима работы видеоадаптера -
;  монохромный или цветной)

      mov   dx,es:[463h]

; вычисляем адрес порта регистра состояния 1 (ISR1);
; это достигается добавлением к адресу порта
; индексного регистра 6, так как адрес  порта регистра
; состояния 1 равен 3BAh или 3DAh в зависимости от режима
; работы видеоадаптера (монохромный или цветной)

      add   dl,6

; читаем содержимое порта регистра состояния 1

      in   al,dx

; тестируем бит D3 регистра состояния 1
; бит D3 = 1 во время обратного вертикального хода луча

      test   al,8
      jz   wait_on

   wait_off:

      in   al,dx

; тестируем бит D3

      test   al,8

; ожидаем конец обратного вертикального хода луча

      jnz   wait_off

   wait_on:

      in   al,dx
      test   al,8

; ожидаем начало обратного вертикального хода луча

      jz   wait_on
; 
;  здесь могут распологаться операции, которые необходимо 
;  выполнить  во время обратного  вертикального хода луча 
;
   }
}

Регистр разрешения работы системы VGA
(VGA Enable Register - VGA_ER)

Данный регистр имеет адрес 3С3h. Регистр используется только для VGA. Биты D1-D7 зарезервированны, а бит D0 управляет работой VGA. Если он равен нулю, то запрещен доступ к видеопамяти и портам ввода/вывода видеоадаптера (кроме самого регистра VGA_ER).

Регистр сброса триггера-защелки светового пера (Light Pen Latch Reset Register - LPLRR)

Доступ к регистру производится через порт 3DBh для цветного режима и через 3BBh для монохромного. Регистр используется только видеоадаптерами CGA и EGA. Любая операция записи (OUT) в этот регистр сбрасывает триггер-защелку светового пера.

Регистр установки триггера-защелки светового пера (Light Pen Latch Set Register - LPLRR)

Доступ к регистру производится через порт 3DCh для цветного режима и через 3BCh для монохромного. Регистр используется только видеоадаптерами CGA и EGA. Любая операция записи (OUT) в этот регистр вызывает установку триггера-защелки светового пера.

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