В младших адресах памяти 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).