Программирование видеоадаптеров.
© Александр Фролов, Григорий Фролов
Том 21, М.: Диалог-МИФИ, 1993.
Адрес таблицы окружения содержится в области переменных видеофункций 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 |
Область
сохранения
В таблице области сохранения хранятся значения регистров цветовой палитры и регистра цвета рамки. Когда функции BIOS изменяют содержимое этих регистров, они одновременно обновляют таблицу области сохранения.
Для видеоадаптера EGA регистры цветовой палитры и регистр цвета рамки доступны только для записи. Через таблицу в область сохранения программа может определить значения этих регистров.
Смещение в байтах |
Размер, байт |
Содержимое |
0 |
16 |
Список значений 16 регистров цветовой палитры |
10h |
1 |
Значение регистра цвета рамки экрана |
11h-0FFh |
239 |
Не используется |
Таблица символов
текстового режима
Когда BIOS устанавливает текстовый режим работы видеоадаптера, он загружает таблицу знакогенератора шрифтами, записанными в ПЗУ. Если определена таблица символов текстового режима, то шрифты загружаются из нее, а не из ПЗУ. Таблица символов текстового режима может отсутствовать. Если соответствующий указатель в таблице окружения равен нулю, то она не используется.
Формат таблицы символов текстового режима:
Смещение (байт) |
Размер |
Содержание |
0 |
Байт |
Количество байт, используемых для определения одного символа шрифта |
1 |
Байт |
Номер таблицы знакогенератора (для видеоадаптера EGA 0-3, для VGA 0-7) |
2 |
Слово |
Количество символов в таблице знакогенератора (обычно 256) |
4 |
Слово |
Номер первого символа, определяемого таблицей |
6 |
Двойное слово |
Указатель на таблицу символов (см. описание INT 1Fh) |
0Ah |
Байт |
Высота символов в пикселах |
0Bh |
Массив байт переменной длины |
Список режимов, использующих данную таблицу символов. На каждый номер режима отводится один байт. Должен оканчиваться числом 0FFh |
Вы можете использовать эту таблицу для установки собственных наборов шрифтов.
Таблица символов
графического режима
Назначение таблицы символов графического режима практически полностью соответствует назначению таблицы символов текстового режима. За исключением того, что она используется при выборе графических режимов работы видеоадаптера.
Таблица символов графического режима может отсутствовать. Если соответствующий указатель в таблице окружения равен нулю, то она не используется.
Формат таблицы символов графического режима видеоадаптера:
Смещение, байт |
Размер |
Содержание |
0 |
Байт |
Количество строк символов на экране |
1 |
Слово |
Количество байт, используемых при определении одного символа шрифта |
3 |
Двойное слово |
Указатель на таблицу символов |
7 |
Массив байт переменной длины |
Список режимов, использующих данную таблицу символов. На каждый номер режима отводится один байт. Должен оканчиваться числом 0FFh |
|