Программирование EGA и VGA
Вызов функции 0Eh: Вывод символа на активную страницу в режиме телетайпа.
Комментарии
Функция применяется для эмуляции телетайпа: после записи символа курсор перемещается в следующую позицию. В отличие от других функций, осуществляющих запись символов, рассматриваемая функция интерпретирует символы "Звонок", "Возврат каретки" и "Перевод строки" как команды, а не как символы IBM-набора.
Функция позволяет выполнять запись только на активную страницу.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается eh
- AL: ASCII-код символа
- BL: цвет символа (используется только в графическом режиме)
Приведенная ниже программа выполняет печать полной строки (сообщения). Следует обратить внимание на действие управляющих кодов 7, 10 и 13. Сравните результат действия функций 9, ah и 13h.
Пример на языке ассемблера:
data segment public msg db 'This line demonstrates printing' db 'ASCII 7 (',7,'), 10(',10,') and' db '13(',13,').' m_len equ $-msg ;формирование константы от текущей ;метки до начала сообщения ;(длина сообщения) data ends code segment public assume CS:code main proc far start: push DS sub AX,AX push AX mov AX,data mov DS,AX assume DS:data mov DH,05 ;строка 5 (для вызова функции 2) mov DL,0 ;столбец 0 (для вызова функции 2) mov CX,m_len ;число итераций mov BP,offset msg ;указатель на сообщение mov BL,1 ;начальный цвет 1 inc DX ;следующий столбец mov AH,2 ;функция 2 - установка курсора int 10h ;вызов видео-BIOS ;Установка курсора осуществляется вне цикла. Сравни- ;те этот пример с примером для функции 9. lp1: mov BH,0 ;страница 0 mov AL,msg[BP] ;получение ASCII-кода mov AH,0eh ;функция 0eh int 10h ;вызов видео-BIOS inc BP ;указатель на следующий символ inc BX ;следующий цвет cmp BL,15 ;если не 15, jbe skp ;пропустить до skp mov BL,1 ;если 15, установить цвет 1 ;В текстовом режиме цвет не поддерживается. Для вос- ;становления цвета необходимо использовать программу ;установки режима (функция 0) и перейти в графичес- ;кий режим. skp: loop lp1 mov DH,21 ;строка 21 mov DL,0 ;столбец 0 mov AH,2 ;функция 2 - установка курсора int 10h ;вызов видео-BIOS ret main endp code ends end start
Вызов функции 0Fh: Определение текущего видеорежима.
Комментарии
Функция возвращает информацию о текущем режиме.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 0Fh
Выходные данные
Регистры (читаются после вызова функции):
- AL: номер текущего режима (см. функцию 0)
- AH: число выводимых символьных столбцов
- BH: число активных страниц (см. функцию 5)
Пример, приведенный для функции dh (Считывание точки), использует обращение к рассматриваемой функции.
Данная функция была последней функцией из основного набора BIOS. Различия в вызовах этих функций между EGA/VGA и MDA/CGA адаптерами минимальны и объясняются расширением диапазона числа страниц или элементов изображения. Все остальные функции являются особенностью новых адаптеров (модели PC jr и PS/2 Model 30 также поддерживают некоторые из новых функций, однако в настоящем руководстве они не рассматриваются).
4. Дополнительные возможности
BIOS EGA/VGA
В настоящей главе рассматриваются новые функции, поддерживаемые адаптерами EGA и VGA. С помощью этих функций может быть решен широкий спектр проблем - от модификации палитры и символа до получения информации о конфигурации адаптера. Наиболее часто используются процедуры определения состояния, особенно в случаях, когда прикладные программы осуществляют автоматическую подстройку под устройство отображения.
Наряду с процедурами определения состояния достаточно часто используется функция установки палитры. Операция смены палитры, как правило, не требует высокого быстродействия. В случае, когда время выполнения программы не является определяющим фактором, использование процедур BIOS позволяет улучшить переносимость прикладного программного продукта, а также значительно сократить время его разработки.
Вызов функции 10h: Установка регистров палитры.
Комментарии
Обращение к функции позволяет изменить любой (или все) из цветов на другой цвет и установить цвет рамки.
В 16-цветном режиме число регистров палитры равно количеству используемых цветов. В совместимых режимах регистры 1 - 3 отвечают за формирование цветов палитры 1, а регистры 4 - 6 - за формирование цветов палитры 0. При работе с ECD в графическом режиме 10h с 64К памяти EGA используется схема, приведенная ниже.
Регистр палитры Номера цветов 0 0, 2, 8, 10 1 1, 3, 9, 11 4 4, 6, 12, 14 7 5, 7, 13, 15
При переустановке режима в регистры палитры заносятся принятые по умолчанию значения. Если функция применяется с целью установки палитры, обращение к ней должно выполняться после каждой переустановки режима. Принятые по умолчанию значения можно изменять путем формирования новой таблицы параметров и замены таблицы BIOS SAVE_PTR (подробно этот метод описан в главе 12). Переустановка принятых по умолчанию палитр для VGA возможна за счет использования функции альтернативного выбора (обращение к функции 12h, BL=31h).
Кроме стандартных регистров палитры VGA снабжен цифро-аналоговым преобразователем (ЦАП), с помощью которого также может быть осуществлено управление цветом. ЦАП использует 6 битов для определения яркости каждого цвета (красного, зеленого и синего), в результате чего значение цвета представляется 18-битовым кодом (262144 цветовых оттенка). ЦАП имеет 256 регистров, и каждый из регистров может содержать различное значение цвета. Таким образом, в режиме 13h может использоваться 256 цветов из 262144 возможных.
В 16-цветных режимах VGA регистры палитры занимают 16 регистров из 64-регистрового подмножества ЦАП (возможно переключение между четырьмя подмножествами). В другом варианте использования регистры палитры могут занимать 16 регистров из 16-регистрового подмножества ЦАП (при этом имеется возможность использования 16 подмножеств). По умолчанию после установки режима (за исключением режима 13h) устанавливаются значения 16/64/4; инициализируется и используется при этом только подмножество 0.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 10h
Подфункция 0: Установка отдельного регистра палитры.
Кроме основного назначения - изменения регистров палитры подфункция позволяет изменять любой из регистров атрибутов (регистры атрибутов описаны в главе 4).
Регистры (устанавливаются до вызова функции):
- AL: установить 0
- BL: регистр для установки (номер цвета)
- BH: значение регистра (цвет - см. таблицу ниже)
Подфункция 1: Установка регистра цвета рамки.
Подфункция устанавливает цвет рамки. Правильная работа подфункции обеспечивается только в 200-строчном режиме EGA, так как в 350-строчном режиме покрывается не полностью из-за недостаточной скорости развертки.
Регистры (устанавливаются до вызова функции):
- AL: установить 1
- BH: значение регистра (цвет)
Подфункция 2: Установка всех регистров палитры.
Подфункция требует помещения в память 17-байтовой таблицы. Первые 16 байтов содержат значения для регистров палитры 0 - 15, а 17-й байт - значение для регистра края развертки.
Регистры (устанавливаются до вызова функции):
- AL: установить 2
- ES: сегмент, содержащий таблицу
- DX: смещение первого байта в таблице
Подфункция 3: Переключение бита яркости/мерцания
Регистры (устанавливаются до вызова функции):
- AL: установить 3
- BH: 0 - яркий без мерцания;1 - мерцание без яркого
Форматы регистров цвета для EGA и CGA:
7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ ¦x x x¦I¦x¦R¦G¦B¦ +-+-+-+-+-+-+-+-+ | --+-- | +--- код цвета (R-красный, G-зеленый, B-синий) +--------- интенсивность (яркость) цвета
Форматы регистров цвета для ECD:
7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ ¦x x¦r¦g¦b¦R¦G¦B¦ +-+-+-+-+-+-+-+-+ --+-- --+-- ¦ +--- младшие разряды кода цвета +--------- старшие разряды кода цвета
По умолчанию устанавливаются цвета со следующими кодами:
Наименование цвета | ECD | EGA/CGA |
---|---|---|
Черный | xx000000 | xxx0x000 |
Синий | xx000001 | xxx0x001 |
Зеленый | xx000010 | xxx0x010 |
Голубой | xx000011 | xxx0x011 |
Красный | xx000100 | xxx0x100 |
Фиолетовый | xx000101 | xxx0x101 |
Коричневый | xx010110 | xxx0x110 |
Светло-серый | xx000111 | xxx0x111 |
Темно-серый | xx111000 | xxx1x000 |
Ярко-синий | xx111001 | xxx1x001 |
Ярко-зеленый | xx111010 | xxx1x010 |
Ярко-голубой | xx111011 | xxx1x011 |
Ярко-красный | xx111100 | xxx1x100 |
Сиреневый | xx111101 | xxx1x101 |
Желтый | xx111110 | xxx1x110 |
Белый | xx111111 | xxx1x111 |
Приведенные ниже подфункции поддерживаются только VGA.
Оставить комментарий
Комментарии
Регистры (устанавливаются до вызова функции):
AL: установить 3
BH: 0 - яркий без мерцания;1 - мерцание без яркого
---------------------
на самом деле регистр bl, а не bh