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

Программирование видеоадаптеров.

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

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

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

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

При разработке видеоадаптеров VGA и SVGA внешние регистры были объединены с остальными регистрами в одной микросхеме, но название внешние сохранилось.

Каждому внешнему регистру соответствует порт ввода/вывода.

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

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

Биты

Описание

D0

Выбор адресов портов ввода/вывода

D1

Разрешение доступа к видеопамяти

D2, D3

Выбор частоты

D4

Запрещение управления видеоадаптером

D5

Бит четной/нечетной страницы

D6

Полярность сигнала горизонтальной синхронизации

D7

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

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

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

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

D7 D6

EGA

VGA

00

200 линий

Не используется

01

350 линий

350 линий

10

Не используется

400 линий

11

Не используется

480 линий

D5 Бит четной/нечетной страницы используется для режимов, которые передают данные по четным адресам в нулевой цветовой слой, а по нечетным - в первый. Все текстовые режимы устанавливают этот бит. Бит D5 выбирает одну из двух страниц видеопамяти.

D4 Управление видеоадаптером. Бит доступен только для видеоадаптера EGA. Видеоадаптеры VGA и SVGA этот бит не используют. Обычно бит D4 имеет значение 0. В этом случае управление монитором осуществляет видеоадаптер. Если бит D4 принимает значение 1, то монитор управляется сигналами, поступающими от разъема дополнительного устройства.

D2, D3 Биты выбора частоты управляют тактовой частотой видеоадаптера. Таблица, расположенная ниже, представляет правильные варианты установки битов D3 и D2:

D3

D2

Режим

0

0

640 пикселов в строке

0

1

720 пикселов в строке

1

0

Используется внешний генератор. Внешний генератор подключается через разъем дополнительного устройства)

1

1

Зарезервировано

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

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

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

Режим

0-6,0Dh,0Eh

7

Fh

10h

Содержимое регистра

23h

0A6h

0A2h

0A7h

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

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

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

Адрес порта ввода/вывода регистра FCR зависит от режима работы видеоадаптера. В монохромных режимах адрес порта 3BAh, а в цветных - 3DAh. У видеоадаптера EGA регистр FCR доступен только для записи. Видеоадаптеры VGA и SVGA позволяют прочитать его содержимое через порт 3CAh.

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

Регистр ISR0 доступен через порт 3C2h только для чтения. Формат регистра приведен ниже:

Биты

Описание

D3-D0

Не используются

D4

Состояние переключателей

D5

Бит 0 дополнительного устройства (FEAT0)

D6

Бит 1 дополнительного устройства (FEAT1)

D7

Бит прерывания от ЭЛТ

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

D6 Бит 1 дополнительного устройства. Используется только видеоадаптерами EGA. Бит D6 регистра управляет уровнем сигнала FEAT0 (вывод 17 разъема дополнительного устройства).

D5 Бит 0 дополнительного устройства. Используется только видеоадаптерами EGA. Бит регистра управляет уровнем сигнала FEAT1 (вывод 19 разъема дополнительного устройства).

D4 Состояние переключателей. Проанализировав бит D4, функции BIOS EGA могут определить состояние четырех переключателей, находящихся на плате видеоадаптера. Номер считываемого переключателя задается двумя битами выбора частоты (D2 и D3) регистра определения различных режимов работы (MOR), согласно следующей таблице:

Бит D3

Бит D2

Номер переключателя

0

0

1

0

1

2

1

0

3

1

1

4

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

К компьютеру могут быть подключены две различные видеосистемы - два видеоадаптера и два монитора. На плате адаптеров EGA расположены четыре переключателя. Их положение определяет, какие видеоадаптеры и мониторы могут быть подключены одновременно.

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

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

 

4

3

2

1

 

ON

.

   

.

Первичный: EGA с цветным монитором (40х25)

OFF

 

.

.

 

Дополнительный: MDA

 

4

3

2

1

 

ON

.

     

Первичный: EGA с цветным монитором (80х25)

OFF

 

.

.

.

Дополнительный: MDA

 

4

3

2

1

 

ON

 

.

.

.

Первичный: EGA с улучшенным цветным монитором

OFF

.

     

Дополнительный: MDA

 

4

3

2

1

 

ON

 

.

.

 

Первичный: EGA с улучшенным цветным монитором

OFF

.

   

.

Дополнительный: MDA

 

4

3

2

1

 

ON

 

.

 

.

Первичный: EGA с монохромным монитором

OFF

.

 

.

 

Дополнительный: CGA с цветным монитором (40х25)

 

4

3

2

1

 

ON

 

.

   

Первичный: EGA с монохромным монитором

OFF

.

 

.

.

Дополнительный: CGA с цветным монитором (80х25)

 

4

3

2

1

 

ON

.

.

.

.

Первичный: MDA

OFF

       

Дополнительный: EGA с цветным монитором (40х25)

 

4

3

2

1

 

ON

.

.

.

 

Первичный: MDA

OFF

     

.

Дополнительный: EGA с цветным монитором (80х25)

 

4

3

2

1

 

ON

.

.

 

.

Первичный: MDA

OFF

   

.

 

Дополнительный: EGA с цветным монитором (80х25)

 

4

3

2

1

 

ON

.

.

   

Первичный: MDA

OFF

   

.

.

Дополнительный: EGA с цветным монитором

 

4

3

2

1

 

ON

.

 

.

.

Первичный: CGA с цветным монитором 40х25

OFF

 

.

   

Дополнительный: EGA с монохромным монитором

 

4

3

2

1

 

ON

.

 

.

 

Первичный: CGA с цветным монитором 80х25

OFF

 

.

 

.

Дополнительный: EGA с монохромным монитором

Видеоадаптеры VGA и SVGA используют бит D4 для определения типа монитора (цветной или монохромный). Положение этих переключателей может быть считано из оперативной памяти по адресу 0000:0488h:

Биты

Описание

D3-D0

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

D7-D4

Не используются

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

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

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

Биты

Описание

D0

Бит разрешения отображения

D1

Бит триггера светового пера

D2

Бит переключателя светового пера

D3

Бит обратного вертикального хода

D5-D4

Диагностические биты

D7-D6

Биты не используются

D7, D6 Биты не используются

D5, D4 Диагностические биты позволяют проверить два из шести цветовых выходных сигналов передаваемых монитору (для видеоадаптера EGA). Для выбора проверяемых сигналов используют регистр разрешения цветового слоя контроллера атрибутов:

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

Регистр состояния 1

D5

D4

D5

D4

0

0

Красный

Синий

0

1

Второй красный

Второй зеленый

1

0

Второй синий

Зеленый

1

1

Не используется

Не используется

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

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

Регистр состояния 1

D5

D4

D5

D4

0

0

P2

P0

0

1

P5

P4

1

0

P3

P1

1

1

P7

P6

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

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

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

D2 Бит переключателя светового пера. Если переключатель светового пера находится в положении ON (включено), то бит D2 равен единице. Если переключатель находится в положении OFF (выключено), то бит D2 равен нулю.

D1 Бит триггера светового пера. Бит равен единице, если триггер светового пера установлен. Сброс бита происходит при записи нуля через порт с адресом 3BBh для монохромного режима, или через порт 3DBh - для цветного режима.

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

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

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

Листинг 4.2. Файл RASTR.C


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

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

#define   NUM  200

// Описания функций. Смотри файл DISPLAY.ASM
void		__pascal __far WaitVert(void);
unsigned	__pascal __far HorByVer(void);

//===========================================================
// Главная функция
//===========================================================
void main() {

	time_t	t_start, t_end;
	int		i;
	float		fr;
	unsigned	vert_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 );
}

Исходный текст функции WaitVert представлен в листинге 4.3. Функция WaitVert периодически проверяет регистр состояния 1 (ISR1), ожидая начало обратного вертикального хода луча по экрану монитора.

Листинг 4.3. Файл DISPLAY.ASM


TITLE	DISPLAY.ASM
NAME	DISPLAY
PAGE	55,132

P286
IDEAL
NOWARN BRK

SEGMENT WAIT_TEXT WORD PUBLIC 'CODE'
ASSUME	cs:WAIT_TEXT
;===========================================================
; Функция void WaitVert(void)
;===========================================================
PUBLIC	WAITVERT
PROC	WAITVERT FAR

	enter	0, 0

	mov  ax,0h
	mov  es,ax

	; Определяем адрес порта индексного регистра контроллера 
	; ЭЛТ (3B4h/3D4h)
	mov  dx,es:[463h]

	; Вычисляем адрес порта регистра состояния 1 (ISR1)
	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

	; +------------------------------------------------------+
	;  Здесь могут распологаться операции, которые необходимо
	;  выполнить  во время обратного  вертикального хода луча
	; +------------------------------------------------------+

	leave
	ret

	ENDP	WAITVERT

ENDS	WAIT_TEXT

END

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

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

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

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

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

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

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