Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование видеоадаптеров EGA, VGA и SVGA.doc
Скачиваний:
138
Добавлен:
01.05.2014
Размер:
4.51 Mб
Скачать

6. Область данных видеофункций bios

Глава описывает переменные BIOS, размещенные в младших адресах памяти (в так называемой системной области) и используемые видеофункциями BIOS. Знание адресов этих переменных позволяет программе определить количество и тип видеоадаптеров, подключенных к компьютеру, объем видеопамяти, текущий режим работы адаптера.

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

Переменные в младших адресах памяти

В младших адресах памяти 0000:0400h - 0000:0500h расположены переменные, используемые функциями BIOS. В них находятся основные параметры, определяющие состояние компьютера. Прикладные программы должны осторожно обращаться с этой областью памяти, так как нарушения в ней могут вызвать зависание системы, или другие нежелательные эффекты.

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

Например, если вы изменили непосредственно через регистры видеоадаптера положение курсора, а потом желаете определить его положение при помощи функций BIOS, то надо сразу после изменения регистра изменить и соответствующую переменную BIOS (ее адрес 0000:0450h).

Адрес и имя

Размер

Содержание

0000:0410h

bEquipFlags

Байт

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

D5 D4

0   0 зарезервировано;

0   1 40 символов в строке, цветной;

1   0 80 символов в строке, цветной;

1   1 текстовый, монохромный.

Если биты D5 и D4 содержат единицы, значит используется монохромный адаптер. Видеопамять начинается по адресу B000:0000h.

В противном случае активным является цветной видеоадаптер и видеопамять начинается по адресу B800:0000h.

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

0000:0449h

bVideoMode

Байт

Номер текущего режима работы видеоадаптера

0000:044Ah

wColumns

Слово

Количество символов в строке экрана

0000:044Сh

wPageLength

Слово

Размер страницы видеопамяти в байтах

0000:044Eh

wVidStart

Слово

Смещение отображаемой области видеопамяти от начала видеопамяти (значение регистра начального адреса - SAR)

0000:0450h

w8CursorPos

8 слов

Каждое слово определяет координаты курсоров для одной из 8 страниц видеопамяти. Младший байт слова определяет столбец, а старший строку экрана в которой находится курсор

0000:0460h

wCursorShape

Слово

Определяет форму курсора (позицию первой и последней линии курсора). Старший байт слова содержит позицию первой строки курсора, а младший - последней. Состояние данной переменной отвечает регистрам начальной и конечной линии курсора (CSR - старший и CER - младший байты соответственно)

0000:0462h

bActivePage

Байт

Номер отображаемой (текущей) страницы видеопамяти

0000:0463h

wAddrCRT

Слово

Адрес индексного регистра контроллера ЭЛТ. Содержит 3B4h для монохромных или 3D4h для цветных режимов адаптера

0000:0465h

bRegMode

Байт

Значение регистра режима для видеоадаптеров CGA и MDA (регистр MCR). Для видеоадаптеров EGA и VGA эмулируется CGA и MDA

0000:0466h

bRegPalette

Байт

Значение регистра цветовой палитры CGA (регистр CSR). Для видеоадаптеров EGA и VGA эмулируется CGA и MDA

0000:0484h

bRows

Байт

Количество текстовых строк на экране минус единица

0000:0485h

wCharHigh

Слово

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

0000:0487h

bInfo

Байт

Первый байт информации (для видеоадаптеров EGA и VGA):

D0 если бит равен единице, то разрешена эмуляция курсора CGA

D1 равен единице, видеоадаптер подсоединен к монохрому монитору

D2 единица в этом бите означает, что BIOS будет ожидать обратного вертикального хода луча перед записью в видеопамять (для видеоадаптера EGA).

D3 бит установлен, если видеоподсистема неактивна

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

D6 D5 позволяют определить объем видеопамяти, установленной на адаптере EGA. Объем видеопамяти адаптеров VGA и SVGA, как правило, не бывает меньше 256 Кбайт

D6 D5 объем видеопамяти:

0   0 64 Кбайт;

0   1 128 Кбайт;

1   0 192 Кбайт;

1   1 256 Кбайт

D7 единица означает, что последняя операция выбора режима видеоадаптера не очистила видеопамять

0000:0488h

bInfoTwo

Байт

Второй байт информации о EGA:

D3-D0 положение переключателей на плате EGA (1 - OFF, 0 - ON)

D3 переключатель 4;

D2 переключатель 3;

D1 переключатель 2;

D0 переключатель 1

BIOS видеоадаптера VGA эмулирует переключатели EGA в соответствии с типом используемого монитора;

D7-D4 значение регистра управления дополнительным устройством видеоадаптера EGA

0000:0489h

bFlags

Байт

Набор различных флагов

D7, D4 количество линий развертки для текстовых режимов:

D7 D4

0   0 350 линий;

0   1 400 линий;

1   0 200 линий;

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

D6 содержит единицу, если переключение мониторов разрешено и ноль в противном случае

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

D3 если данный бит содержит значение 1, значит загрузка палитры по умолчанию запрещена

D2 содержит единицу, если используется монохромный монитор и ноль - если используется цветной монитор

D1 содержит единицу, если разрешено преобразование серого цвета

D0 содержит единицу, если VGA активен и ноль - если не активен

0000:048Ah

bDCC

Байт

Индекс таблицы кодов комбинаций мониторов (Display Combination Code table index)

0000:04A8h

dwSavePtr

Двойное слово

Адрес таблицы окружения (см. следующий раздел)

Имена переменных видеофункций BIOS, которые мы привели в таблице соответствуют названиям полей структуры BIOS_VAR. Структура BIOS_VAR определена во включаемом файле SYSGRAPH.H. Вы можете просмотреть этот файл в листинге 3.3.

В конце данной главы мы приведем пример использования структуры BIOS_VAR для доступа к переменным видеофункций BIOS (листинг 6.1).

Таблица окружения

Адрес таблицы окружения содержится в области переменных видеофункций BIOS (см. выше, переменная по адресу 0000:04A8h). Таблица окружения содержит пять двойных слов, представляющих собой указатели на различные структуры (таблицы и буфера памяти), используемые BIOS видеоадаптера.

Таблица окружения, используемая сразу после загрузки компьютера, располагается в ПЗУ BIOS. Поэтому чтобы изменить какие-либо элементы этой таблицы, вы должны сначала перенести ее в оперативную память. Обычно для этого копируется уже существующая таблица и затем в копию вносятся необходимые изменения. Если надо сохранить в памяти новую таблицу окружения после окончания работы программы, то ее оставляют резидентной в памяти.

Вы можете заменить таблицу окружения, записав указатель на новую таблицу по адресу 0000:04A8h. Таким образом, вы можете изменить шрифты и некоторые другие параметры, устанавливаемые BIOS при выборе режима работы видеоадаптера.

Ниже описаны элементы таблицы окружения:

Смещение

Размер

Описание

00h

Двойное слово

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

04h

Двойное слово

Указатель на область сохранения значений некоторых регистров EGA/VGA, доступных только для чтения

08h

Двойное слово

Указатель на таблицу символов текстового режима

0Ch

Двойное слово

Указатель на таблицу символов графического режима

10h

Двойное слово

Указатель на дополнительную таблицу окружения, используемую для расширения таблицы окружения (доступна только для видеоадаптеров VGA и SVGA)

14h

Двойное слово

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

18h

Двойное слово

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

Сразу после загрузки компьютера заполняются только два элемента таблицы окружения - указатель на таблицу параметров и указатель на дополнительную таблицу окружения. Остальные указатели имеют нулевое значение и не используются.

Таблица параметров

Таблица параметров используется функциями BIOS для установки регистров видеоадаптера при изменении режимов его работы. Таблица содержит описания для каждого поддерживаемого адаптером режима (по 64 байта на каждый режим):

Смещение

Размер

Содержание

0

Байт

Количество символов в строке

1

-"-

Количество текстовых строк на экране

2

-"-

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

3

Слово

Объем страницы видеопамяти в байтах

Синхронизатор

5

Байт

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

6

-"-

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

7

-"-

Регистр выбора знакогенератора (CGSR)

8

-"-

Регистр определения структуры памяти (MMR)

9

-"-

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

Контроллер ЭЛТ

0Ah

Байт

Общая длина линии горизонтальной развертки (HTR)

0Bh

-"-

Длина отображаемой части горизонтальной развертки (HDER)

0Ch

-"-

Начало импульса гашения луча горизонтальной развертки (SHBR)

0Dh

-"-

Конец импульса гашения луча горизонтальной развертки (EHBR)

0Eh

-"-

Начало импульса горизонтального обратного хода луча (SHRR)

0Fh

-"-

Конец импульса горизонтального обратного хода луча (EHRR)

10h

-"-

Количество горизонтальных линий растра (VTR)

11h

-"-

Дополнительный регистр (OVR)

12h

-"-

Предварительная установка горизонтальной развертки (PRSR)

13h

-"-

Высота символов текста (MSLR)

14h

-"-

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

15h

-"-

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

16-19h

4 Байта

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

1Ah

Байт

Начало обратного вертикального хода луча (VRSR)

1Bh

-"-

Конец обратного вертикального хода луча (VRER)

1Ch

-"-

Начало гашения вертикальной развертки (VDER)

1Dh

-"-

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

1Eh

-"-

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

1Fh

-"-

Начало импульса гашения вертикальной развертки (SVBR)

20h

-"-

Конец импульса гашения вертикальной развертки (EVBR)

21h

-"-

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

22h

-"-

Разделение экрана монитора (LCR)

Контроллер атрибутов

23-32h

Байт

Регистры цветовой палитры (0-15) (CPR)

33h

-"-

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

34h

-"-

Регистр цвета рамки экрана (SBCR)

35h

-"-

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

36h

-"-

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

Графический контроллер

37h

Байт

Регистр установки/сброса (SRR)

38h

-"-

Регистр разрешения установки/сброса (SRER)

39h

-"-

Регистр сравнения цветов (CCR)

3Ah

-"-

Регистр циклического сдвига и выбора функции (DRFS)

3Bh

-"-

Регистр выбора читаемого слоя (RPSR)

3Ch

-"-

Регистр режима работы (MDR)

3Dh

-"-

Регистр смешанного назначения (MIR)

3Eh

-"-

Регистр маскирования цветовых слоев (CDCR)

3Fh

-"-

Регистр битовой маски (BMR)

В таблице параметров различные режимы размещаются в следующем порядке:

Смешение от начала таблицы параметров

Номер режима видеоадаптера

+00h

0h

+40h

1h

+80h

2h

+C0h

3h

+100h

4h

+140h

5h

+180h

6h

+1C0h

7h

+200h

8h

+240h

9h

+280h

Ah

+2C0h

Bh

+300h

Ch

+340h

Dh

+380h

Eh

+3C0h

Fh (адаптер EGA, имеющий 64 Кбайт памяти)

+400h

10h (адаптер EGA, имеющий 64 Кбайт памяти)

+440h

Fh

+480h

10h

+4C0h

0*h

+500h

1*h

+540h

2*h

+580h

3*h

+5C0h

0h+,1h+

+600h

2h+,3h+

+640h

7h+

+680h

11h

+6C0h

12h

+700h

13h