Электронная библиотека книг Александра Фролова и Григория Фролова.
 
Библиотека
Братьев
Фроловых
Электронная библиотека книг Александра Фролова и Григория Фролова.
Библиотека системного программиста
Программирование на JAVA
ПК. Шаг за шагом
Другие книги
Восстановление данных
Антивирусная защита
Статьи для
программистов
Пользователю компьютера

Программирование видеоадаптеров CGA, EGA и VGA

© Александр Фролов, Григорий Фролов
Том 3, М.: Диалог-МИФИ, 1992, 287 стр.

[Назад] [Содеожание] [Дальше]

9.2. Загрузка таблиц знакогенератора - функция 11h

Функция 11h прерывания 10h предназначена для загрузки в память таблиц знакогенератора (наборов символов). При помощи данной функции можно загружать как стандартные таблицы знакогенератора, так и таблицы, самостоятельно разработанные программистом. Загружается либо вся таблица, либо ее часть. Данная функция позволяет легко "русифицировать" ваш видеоадаптер (если это не CGA или Hercules).

Функция 11h содержит одиннадцать различных подфункций, перечисленных ниже:

Номер подфункции Назначение
00 загрузка самостоятельно разработанных таблиц знакогенератора
01 загрузка стандартного монохромного набора символов
02 загрузка стандартного набора символов видеоадаптера CGA
03 выбор активных таблиц знакогенератора (EGA)
04 загрузка стандартного набора символов видеоадаптера VGA
20h установка вектора прерывания 1Fh
21h использование графического режима для отображения символов пользователя
22h использование набора символов 8х14 из ПЗУ
23h использование набора символов 8х8 из ПЗУ
24h использование набора символов 8х16 из ПЗУ
30h получение информации об используемом наборе символов

Для подфункций 00, 01, 02, 03, 04 установка бита D4 в регистре AL вызывает перезагрузку регистров контроллера ЭЛТ. Вновь устанавливаются значения принятые по умолчанию для регистров формы курсора и регистра высоты символа текста. Если используется эта особенность, вызов данной функции должен происходить сразу после установки режима работы видеоадаптера. В противном случае вызов функции 11h может привести к непредсказуемым последствиям.

Загрузка набора символов пользователя - подфункция 00h

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


На входе:   AH = 11h;

   AL = 00h, 10h - загрузка набора символов
      пользователя;

   ES:BP =   адрес таблицы с новым набором символов;

   CX = число загружаемых символов (1-256);

   DX = смещение в таблице знакогенератора
      (0-255), используется для загрузки части
      набора символов;

   BL = номер загружаемой таблицы знакогенератора
      - для EGA 0-3, для VGA 0-7;

   BH = число байт отводимых на символ в таблице
      символов (1-32);

На выходе:   Не используются.

Загрузка монохромного набора символов - подфункция 01h

Функция загружает стандартный набор символов (8х14 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:


На входе:   AH = 11h;

   AL = 01h, 11h - загрузка монохромного набора
      символов ;

   BL = номер загружаемой таблицы знакогенератора       (для EGA 0-4, для VGA 0-7).

На выходе:   Не используются.

Загрузка стандартного набора символов видеоадаптера CGA - подфункция 02h

Функция загружает стандартный набор символов CGA (8х8 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:


На входе:   AH = 11h;

   AL = 02h, 12h - загрузка набора символов CGA;

   BL = номер загружаемой таблицы знакогенератора       (для EGA 0-4, для VGA 0-7);

На выходе:   Не используются.

Выбор активных таблиц знакогенератора (EGA) - подфункция 03h

Программа через эту функцию может установить активные таблицы знакогенератора. Напомним, что EGA имеет четыре таблицы, одна или две из которых могут быть активными. Каждая таблица содержит 256 символов. Одновременно могут отображаться 512 символов, при этом номер используемой таблицы определяется битом D3 байта атрибутов символа.


На входе:   AH = 11h;

   AL = 03h - выбор активных таблиц
      знакогенератора;

   BL   выбирает активные таблицы:

      D1-D0   номер таблицы, используемой, когда бит D3
         атрибута равен нулю;
   
      D3-D2   номер таблицы используемой, когда бит D3 
         атрибута равен единице;
   
      D4   только для VGA расширение для битов D0 и D1

      D5   только для VGA расширение для битов D2 и D3


      D7-D6   не используются.

На выходе:   Не используются.

Загрузка стандартного набора символов видеоадаптера VGA - подфункция 04h

Функция загружает стандартный набор символов VGA (8х16 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:


На входе:   AH = 11h;

   AL = 04h, 14h - загрузка набора символов CGA;

   BL = номер загружаемой таблицы знакогенератора   (0-7).

На выходе:   Не используются.

Установка вектора прерывания 1Fh - подфункция 20h

Используется в графических режимах 4, 5 и 6 (совместимых с CGA), если необходимо отображать одновременно больше 128 символов. Вектор 1Fh применяется для указания на таблицу с дополнительными 128 символми, имеющими коды ASCII от 127 до 255. Программа должна поддерживать таблицы для дополнителььных символов. Размер символов должн быть 8х8 пикселов.


На входе:   AH = 11h;

   AL = 20h - установка вектора прерывания 1Fh,
            который хранит адрес таблицы
            дополнительных символов;

   ES:BP - адрес таблицы дополнительных символов.

На выходе:   Не используются.

Использование графического режима для отображения символов пользователя - подфункция 21h

Позволяет программе отображать на экране одновременно графику и текст. Адаптер переходит в графический режим и вектор прервания 43h устанавливается так, что используется таблица знакогенератора пользователя.

В таком режиме может отображаться до 43 строк текста на экране. (Для этого необходим улучшенный цветной дисплей.)


На входе:   AH = 11h;

   AL = 21h - установка вектора прерывания 43h;

   ES:BP = адрес таблицы символов;

   CX = количество байт, кодирующих один символ в
      таблице символов;

   BL = количество отображаемых на экране строк
      текста:

      1   -   14 строк,
      2   -   25 строк,
      3   -   43 строки,
      0   -   число строк содержится в регистре
            DL.

На выходе:   Не используются.

Использование набора символов 8х14 из ПЗУ


На входе:   AH = 11h;

   AL = 22h установка вектора прерывания 43h;

   BL = количество отображаемых строк текста:

      1   -   14 строк,
      2   -   25 строк.

На выходе:   Не используются.

Использование набора символов 8х8 из ПЗУ


На входе:   AH = 11h;

   AL = 23h установка вектора прерывания 43h;

   BL = количество отображаемых строк текста:

      2   -   25 строк,
      3   -   43 строки.

На выходе:   Не используются.

Использование набора символов 8х16 из ПЗУ


На входе:   AH = 11h;

   AL = 24h установка вектора прерывания 43h;

   BL = количество отображаемых строк текста:

      1   -   14 строк,
      2   -   25 строк,
      3   -   43 строки.

На выходе:   Не используются.

Получение информации об используемом наборе символов - подфункция 30h

Функция позволяет получить информацию об используемом наборе символов: высоту символа, число текстовых строк на экране и т.д.:


На входе:   AH = 11h;

   AL = 30h;

   BH = вид запрашиваемой информации:

      0 - вернуть содержимое вектора INT 1Fh,

      1 - вернуть содержимое вектора INT 43h,

      2 - вернуть указатель на набор символов
          8х14 пикселов,

      3 - вернуть указатель на набор символов 
          8х8 пикселов,

      4 - вернуть указатель на символы с ASCII
          кодами от 127 до 255 (8х8 пикселов),

      5 - вернуть указатель на альтернативный
          набор символов размером 9х14 пикселов

      6 - вернуть указатель на альтернативный
          набор символов размером 8х16 пикселов

      7 - вернуть указатель на альтернативный
          набор символов размером 9х16 пикселов.

На выходе:   CL = высота символов в пикселах;

   DL = число текстовых строк на экране - 1;

   ES:BP = указатель (смысл зависит от BH).

[Назад] [Содеожание] [Дальше]


Создание интернет-магазинов: http://www.shop2you.ru/ © Александр Фролов, Григорий Фролов, 1991-2016