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

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

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

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

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

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

Адрес      Размер   Содержание

0000:0410   1 байт   Флаги конфигурации:
                     биты D5 и D4 определяют тип
                     текущего первичного дисплея:
                     D5 D4   видеоадаптер
                     0  0      EGA
                     0  1      CGA 40х25
                     1  0      CGA 80х25
                     1  1      MDA
0000:0449   1 байт   Текущий режим работы
                     видеоадаптера

0000:044A   слово    Число символов в строке

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

0000:044E   слово    Значение регистра начального
                     адреса (SAR)

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

0000:0460   слово    Содержимое регистров
                     начальной и конечной линии
                     курсора (CSR - старший и CER -
                     младший байты
                     соответственно)

0000:0462   1 байт   Номер активной страницы
                     видеопамяти

0000:0463   слово    Адрес порта контроллера ЭЛТ
                     (3B4 или 3D4)

0000:0465   1 байт   Установка регистра режима CGA
                     (регистр MCR)

0000:0466   1 байт   Установка цветовой палитры
                     CGA (регистр CSR)

0000:0484   1 байт   Число текстовых строк - 1

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

0000:0487   1 байт   Первый байт информации о EGA:
                        7 6 5 4 3 2 1 0
                       +-+-+-+-+-+-+-+-+
                       | |   | | | | | |
                       +-+-+-+-+-+-+-+-+
                        | L-| | | | | L-- если бит равен единице, то 
                        |  |  | | | |     разрешена эмуляция курсора CGA;
                        |  |  | | | |   
                        |  |  | | | L---- равен единице, видеоадаптер
                        |  |  | | |       подсоединен к монохрому дисплею;
                        |  |  | | |      
                        |  |  | | L------ единица в этом бите означает,
                        |  |  | |         что BIOS будет ожидать обратного
                        |  |  | |         вертикального хода луча для
                        |  |  | |         записи в видеопамять;
                        |  |  | |        
                        |  |  | L-------- бит установлен, если  первичным
                        |  |  |           видеоадаптером является EGA;
                        |  |  |
                        |  |  L---------- не используется;
                        |  |
                        |  L------------- объем видеопамяти:
                        |                 0 0 - 64К байт,
                        |                 0 1 - 128К байт,
                        |                 1 0 - 192К байт,
                        |                 1 1 - 256К байт;
                        |
                        L---------------- единица означает, что последняя
                                          операция выбора режима
                                          видеоадаптера не очистила
                                          видеопамять
   
0000:0488   1 байт   Второй байт информации о EGA:

                        7 6 5 4 3 2 1 0
                       +-------+-------+
                       |       |       |
                       +-------+-------+
                        L--T--| L--T--|
                           |       |----- положение переключателей на плате
                           |              EGA
                           |
                           L------------- значение регистра управления
                                          дополнительным устройством


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

Таблица 11.1 Переменные видеофункций BIOS.

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

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

Вы можете заменить таблицу окружения, записав указатель на новую таблицу по адресу 0000:04A8. Таким образом вы можете изменить шрифты и некоторые другие опции, устанавливаемые BIOS при выборе режима работы видеоадаптера. Обычно для этого копируется уже существующая таблица и затем в копию вносятся необходимые изменения. Если надо сохранить в памяти новую таблицу окружения после окончания работы программы, то ее оставляют резидентной в памяти.

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

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

второй элемент     указатель на область сохранения
(смещение 4)       значений некоторых регистров EGA/VGA,
                   доступных только для чтения

третий элемент     указатель на вспомогательную таблицу
(смещение 8)       символов текстового режима

четвертый элемент  указатель на вспомогательную таблицу
(смещение 0Ch)     символов графического режима

пятый элемент      указатель на вторую область
(смещение 10h)     сохранения, используемую для расширения
только для VGA     тблицы окружения

шестой элемент     не используются

седьмой элемент    не используются

восьмой элемент    не используются

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

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

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

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

Смещение   Содержание

0          число символов в строке
1          число текстовых строк на экране
2          высота символов в пикселах
3-4        объем страницы видеопамяти в байтах
           Синхронизатор.
5          регистр режима синхронизации (CMR)
6          регистр разрешения записи цветового 
           слоя (CPWER)
7          регистр выбора знакогенератора (CGSR)
8          регистр определения структуры памяти
           (MMR)

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

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     не используются
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           0
+40h           1
+80h           2
+C0h           3
+100h          4
+140h          5
+180h          6
+1C0h          7
+200h          8
+240h          9
+280h          A
+2C0h          B
+300h          C
+340h          D
+380h          E
+3C0h          F  (EGA с 64К)
+400h          10 (EGA с 64К)
+440h          F
+480h          10
+4C0h          0*
+500h          1*
+540h          2*
+580h          3*
+5C0h          0+,1+
+600h          2+,3+
+640h          7+
+680h          11
+6C0h          12
+700h          13

Область сохранения

BIOS EGA/VGA сохраняет в этой таблице значения регистров цветовой палитры и регистра цвета рамки. На видеоадаптере EGA эти регистры доступны только для записи. Таким образом, через область сохранения программа может определить значения этих регистров.

Смещение   Размер     Содержимое
в байтах   в байтах
0          10h        список значений регистров
                      цветовой палитры (16
                      регистров)
10h        1          значение регистра цвета рамки
                      экрана
11h        0EFh       не используется

Вспомогательная таблица символов текстового режима

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

Данная таблица определяет шрифт в текстовых режимах видеоадаптера:

Смещение  Размер    Содержание
(байт)
0         1 байт    число байтов,
                    используемых при определении
                    одного символа шрифта
1         1 байт    номер таблицы знакогенератора
                    (для EGA 0-3, для VGA 0-7)
2         слово     число символов в таблице
                    знакогенератора (обычно 256)
4         слово     номер первого символа (обычно
                    0)
6         двойное   указатель на таблицу символов
          слово     (смотри INT 1Fh)
0Ah       байт      высота символов в пикселах
0Bh       перемен-  список режимов, использующих
          ный       эту таблицу символов;
                    оканчивается числом FFh

Вы можете использовать эту таблицу для установки собственных наборов шрифтов.

Вспомогательная таблица символов для графического режима

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

Данная таблица определяет шрифт в графических режимах видеоадаптера:

Смещение    Размер    Содержание
(байт)
0           1 байт    число строк символов на
                      экране
1           слово     число байт на символ в
                      таблице символов
3           двойное   указатель на таблицу символов 
            слово     
7           перемен-  список режимов, использующих
            ный       эту таблицу символов;
                      оканчивается числом FFh