Программирование видеоадаптеров.
© Александр Фролов, Григорий Фролов
Том 21, М.: Диалог-МИФИ, 1993.
Функция 11h прерывания 10h предназначена для загрузки в видеопамять таблиц знакогенератора (наборов символов). При помощи данной функции можно загружать как стандартные таблицы знакогенератора, так и таблицы, самостоятельно разработанные программистом. Загружается либо вся таблица, либо ее часть. Функция позволяет легко русифицировать видеоадаптер (если это не видеоадаптер CGA или Hercules).
Функция 11h имеет одиннадцать различных подфункций, перечисленных ниже:
Номер подфункции |
Назначение |
0 |
Загрузка таблиц знакогенератора |
1 |
Загрузка стандартного монохромного набора символов |
2 |
Загрузка стандартного набора символов видеоадаптера CGA |
3 |
Выбор активных таблиц знакогенератора (EGA) |
4 |
Загрузка стандартного набора символов видеоадаптера VGA и SVGA |
20h |
Установка вектора прерывания 1Fh |
21h |
Использование графического режима для отображения символов пользователя |
22h |
Использование набора символов 8х14 из ПЗУ |
23h |
Использование набора символов 8х8 из ПЗУ |
24h |
Использование набора символов 8х16 из ПЗУ |
30h |
Получение информации об используемом наборе символов |
Для подфункций 0, 1, 2, 3 и 4 установка бита D4 в регистре AL вызывает перезагрузку регистров контроллера ЭЛТ. Вновь устанавливаются значения принятые по умолчанию для регистров формы курсора и регистра высоты символа текста. Если используется эта возможность, вызов функции должен происходить сразу после выбора режима работы видеоадаптера. В противном случае вызов функции 11h может привести к непредсказуемым последствиям.
Загрузка набора
символов пользователя - подфункция 00h
Функция заменяет текущий набор символов знакогенератора или его часть набором символов, определенных пользователем. Таблица знакогенератора пользователя должна быть загружена в буфер оперативной памяти до вызова функции. После вызова она может быть удалена из памяти.
На входе: |
AH |
11h |
|
AL |
00h, 10h - загрузка набора символов пользователя |
|
CX |
Количество загружаемых символов. Может принимать значение от 1 до 256 |
|
DX |
ASCII-код первого загружаемого символа. Используется для загрузки части набора символов |
|
BL |
Номер загружаемой таблицы знакогенератора - для видеоадаптера EGA доступны таблицы 0 - 3, для VGA и SVGA 0 - 7 |
|
BH |
Количество байт, определяющих один символ в таблице символов |
|
ES:BP |
Адрес буфера, содержащего определение символов, загружаемых в таблицу знакогенератора |
На выходе: |
|
Не используются |
Загрузка набора
символов из BIOS - подфункция 01h
Функция загружает стандартный набор символов размера 8х14 пикселов из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: |
AH |
11h |
|
AL |
01h, 11h - загрузка набора символов 8х14 |
|
BL |
Номер загружаемой таблицы знакогенератора (для видеоадаптера EGA доступны таблицы 0 - 3, для VGA 0 - 7) |
На выходе: |
|
Не используются |
Загрузка набора
символов из BIOS - подфункция 02h
Функция загружает стандартный набор символов CGA размера 8х8 пикселов из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: |
AH |
11h |
|
AL |
02h, 12h - загрузка набора символов размера 8х8 пикселов |
|
BL |
Номер загружаемой таблицы знакогенератора (для видеоадаптера EGA доступны таблицы 0 - 3, для VGA 0 - 7) |
На выходе: |
|
Не используются |
Выбор активных
таблиц знакогенератора - подфункция 03h
Программа через эту функцию может установить активные таблицы знакогенератора. Напомним, что видеоадаптер EGA имеет четыре таблицы, одна или две из которых могут быть активными, а VGA - восемь. Каждая таблица содержит 256 символов. Одновременно могут отображаться 512 символов. Номер используемой таблицы определяется битом D3 байта атрибутов символа.
На входе: |
AH |
11h |
|
AL |
03h - выбор активных таблиц знакогенератора |
|
BL |
Выбирает активные таблицы: D1-D0 номер таблицы, используемой, когда бит D3 атрибута равен нулю; D3-D2 номер таблицы используемой, когда бит D3 атрибута равен единице; D4 только для VGA. Расширение для битов D0 и D1; D5 только для VGA. Расширение для битов D2 и D3; D7-D6 не используются |
На выходе: |
|
Не используются |
Загрузка набора
символов из BIOS - подфункция 04h
Функция загружает стандартный набор символов VGA размера 8х16 пикселов из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: |
AH |
11h |
|
AL |
04h, 14h - загрузка набора символов размера 8х16 пикселов |
|
BL |
Номер загружаемой таблицы знакогенератора (для видеоадаптера VGA доступны таблицы 0 - 7) |
На выходе: |
|
Не используются |
Установка
вектора прерывания 1Fh - подфункция 20h
Используется в графических режимах 4, 5 и 6 (совместимых с CGA), если необходимо отображать одновременно больше 128 символов. Вектор 1Fh указывает на таблицу с дополнительными 128 символами, имеющими коды ASCII от 127 до 255. Программа должна поддерживать таблицы для дополнительных символов. Размер символов должен быть 8х8 пикселов.
На входе: |
AH |
11h |
|
AL |
20h - установка вектора прерывания 1Fh, который хранит адрес таблицы дополнительных символов |
|
ES:BP |
Адрес таблицы дополнительных символов, определенной пользователем |
На выходе: |
|
Не используются |
Установка набора
символов для графических режимов - подфункция 21h
Позволяет установить собственный набор символов для отображения текста в графических режимах видеоадаптера.
На входе: |
AH |
11h |
|
AL |
21h - установка вектора прерывания 43h |
|
ES:BP |
Адрес таблицы символов, определенной пользователем |
|
CX |
Количество байт, кодирующих один символ в таблице символов |
|
BL |
Количество строк текста, отображаемых на экране монитора: 0 - количество строк определяется регистром DL; 1 - 14 строк; 2 - 25 строк; 3 - 43 строки |
|
DL |
Количество строк текста, отображаемых на экране. Используется только если регистр BL равен нулю |
На выходе: |
|
Не используются |
Установка набора
символов 8х14 из ПЗУ BIOS
На входе: |
AH |
11h |
|
AL |
22h - установка вектора прерывания 43h |
|
BL |
Количество строк текста, отображаемых на экране монитора: 0 - количество строк определяется регистром DL; 1 - 14 строк; 2 - 25 строк; 3 - 43 строки |
|
DL |
Количество строк текста, отображаемых на экране. Используется только если регистр BL равен нулю |
На выходе: |
|
Не используются |
Установка набора
символов 8х8 из ПЗУ BIOS
На входе: |
AH |
11h |
|
AL |
23h установка вектора прерывания 43h |
|
BL |
Количество строк текста, отображаемых на экране монитора: 0 - количество строк определяется регистром DL; 1 - 14 строк; 2 - 25 строк; 3 - 43 строки |
|
DL |
Количество строк текста, отображаемых на экране. Используется только если регистр BL равен нулю |
На выходе: |
|
Не используются |
Установка набора
символов 8х16 из ПЗУ BIOS
На входе: |
AH |
11h |
|
AL |
24h установка вектора прерывания 43h |
|
BL |
Количество строк текста, отображаемых на экране монитора: 0 - количество строк определяется регистром DL; 1 - 14 строк; 2 - 25 строк; 3 - 43 строки |
|
DL |
Количество строк текста, отображаемых на экране. Используется только если регистр BL равен нулю |
На выходе: |
|
Не используются |
Получение
информации об используемом наборе символов - подфункция 30h
Функция позволяет получить информацию об используемом наборе символов - высоту символа, число текстовых строк на экране и т.д.
На входе: |
AH |
11h |
|
AL |
30h |
|
BH |
Тип запрашиваемой информации: 0 - вернуть содержимое вектора INT 1Fh; 1 - вернуть содержимое вектора INT 43h; 2 - вернуть указатель на набор символов размера 8х14 пикселов, расположенный в ПЗУ BIOS; 3 - вернуть указатель на набор символов размера 8х8 пикселов, расположенный в ПЗУ BIOS; 4 - вернуть указатель на символы с ASCII кодами от 127 до 255 (размера 8х8 пикселов), расположенные в ПЗУ BIOS; 5 - вернуть указатель на альтернативный набор символов размером 9х14 пикселов, расположенный в ПЗУ BIOS; 6 - вернуть указатель на набор символов размером 8х16 пикселов, расположенный в ПЗУ BIOS; 7 - вернуть указатель на альтернативный набор символов размером 9х16 пикселов, расположенный в ПЗУ BIOS |
На выходе: |
CL |
Высота символов в пикселах |
|
DL |
Количество текстовых строк на экране - 1 |
|
ES:BP |
Указатель на таблицу символов (значение зависит от значения регистра BH) |
|