Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программирование EGA и VGA

Вызов функции 11h: Генерация символов

Комментарии

Рассматриваемая функция позволяет работать с наборами символов и вносить в них изменения.В алфавитно-цифровых режимах могут быть использованы до 4 полных наборов символов (называемых блоками - для каждых 64К памяти EGA имеется один блок), при этом могут быть задействованы только два из них. Таким образом поддерживается работа с 512 различными символами. В графическом режиме поддерживается только один набор из 256 символов.

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

Графические наборы символов размещаются в основной системной памяти (ОЗУ и ПЗУ). Наборы символов алфавитно-цифрового режима размещаются во второй разрядной матрице памяти EGA. При этом наборы символов алфавитно-цифрового режима должны загружаться в память EGA из ОЗУ или ПЗУ при каждой смене режима.

Каждая из строк,составляющих символ, содержит восемь точек, а для ее хранения требуется один байт памяти (один бит на точку). Символы размещены в памяти последовательно, начиная с верхней строки (ASCII-код равен 0) и заканчивая нижней строкой (ASCII-код равен 255) (см. таблицу ниже). Наборы символов алфавитно-цифрового режима могут состоять из произвольного непрерывного сегмента, например, коды с 25 по 32, в то время как наборы символов графического режима должны содержать все 256 символов набора.

ЗАМЕЧАНИЯ

Набор символов, принятый по умолчанию, устанавливается всякий раз после смены режима. При использовании рассматриваемой функции для смены режима обращение к ней должно выполняться после каждой операции смены режима. Замена набора символов, принятого по умолчанию, может также осуществляться путем модификации таблицы BIOS SAVE_PTR (подробно описание этого метода приводится в главе 12).

512-символьный набор при смене режима возвращается в 256-символьное состояние. Поэтому кроме модифицикации таблицы BIOS SAVE-PTR должна быть создана новая таблица параметров.

Именно эта функция наименее совместима с адаптерами EGA различных изготовителей.

Исходные данные

Регистры (устанавливаются до вызова функции):

  • АН: устанавливается 11h

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

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

Функция позволяет заменить набор символов,установленный по умолчанию (или часть этого набора), на символы, определенные пользователем.

Регистры (устанавливаются до вызова функции):

  • AL: установить 0
  • BL: номер загружаемого блока (0-3 [0-7 для VGA])
  • BH: количество байтов на символ (обычно 8,14,16)
  • CX: количество символов в таблице
  • DX: смещение (ASCII-код) первого символа
  • ES: сегмент таблицы символов пользователя
  • BP: смещение таблицы символов пользователя

Подфункция 1: Загрузка монохромного набора символов из пзу

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

Регистры (устанавливаются до вызова функции):

  • AL: установить 1
  • BL: номер блока (набор символов 0-3 [0-7 для VGA])

Подфункция 2: Загрузка набора символов из пзу в один из блоков.

Регистры (устанавливаются до вызова функции):

  • AL: установить 2
  • BL: номер блока (набор символов 0-3 [0-7 для VGA])

Подфункция 3: Установка спецификатора блока

В алфавитно-цифровом режиме функция формирует 512-символьный набор (для систем, оснащенных объемом памяти EGA, превышающим 64К). Альтернативный набор символов записывается вместо функции яркости - третий разряд байта атрибута. Поскольку наборы символов размещаются в 3-битовой матрице, советуем выполнить ее размаскирование при помощи регистра атрибута 12h (разрешающий регистр цветной матрицы - см. описание в главе 4). Размаскирование может быть выполнено посредством обращения к функции 10h (поместить 1000h в АХ; 0712h - в ВХ, после чего выполнить прерывание INT 10h).

Регистры (устанавливаются до вызова функции):

  • AL: установить 3
  • BL:
    • биты 0-1 и 4 определяют номер используемого
    • блока, когда 3-й бит регистра атрибута = 0
    • биты 2-3 и 5 определяют номер используемого блока,
    • когда 3-й бит регистра атрибута = 1

Замечания

Биты 4 и 5 используются только в VGA.

Следующие четыре функции могут вызываться только после выполнения операции переустановки режима. При вызове страница 0 должна быть активной страницей. В результате вызова выполняется пересчет числа точек количества байтов на символ), числа символьных строк на экране и длины размера буфера дисплея в байтах. Кроме того выполняется пересчет приведенных ниже регистров контроллера электронно-лучевой трубки (КЭЛТ) (описание регистров приведено в главе 4).

Регистр        Формула пересчета
------- -------------------------------------
9h*     число точек - 1
ah**    число точек - 2
bh      0
12h     (строка+1)*(число точек -1)
        2*(строка+1)*(число точек - 1)
        (только для 200-строчного режима VGA)
14h***  число точек
------- -------------------------------------

* Пересчет регистра выполняется только для режима 7

** Применение 14-строчных символов на ECD в алфавитно-цифровом режиме приводит к исчезновению курсора. Это происходит в связи с тем, что из соображений совместимости предполагается использование 8-строчной области расположения символа в алфавитно-цифровом режиме (см. обращение к функции 1).

*** Значение должно рассчитываться по формуле: -1. Это ошибка в ПЗУ EGA. Посредством этой установки предотвращается появление подчеркивания при использовании атрибута подчеркивания.

Подфункция 4: Загрузка 16-строчного набора символов (8х16) из ПЗУ

Функция выполняет загрузку 16-строчного набора символов ПЗУ в один из блоков (только VGA).

Регистры (устанавливаются до вызова функции):

  • AL: установить 4
  • BL: номер блока (набор символов 0-7)

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

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

Регистры (устанавливаются до вызова функции):

  • AL: установить 10h
  • BL: номер загружаемого блока (0-3 [0-7 для VGA])
  • BH: количество байтов на символ (обычно 8,14,16)
  • CX: количество символов в таблице
  • DX: смещение (ASCII-код) первого символа
  • ES: сегмент таблицы символов пользователя
  • BP: смещение таблицы символов пользователя

Подфункция 11h: Загрузка монохромного набора символов из ПЗУ

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

Регистры (устанавливаются до вызова функции):

  • AL: установить 11h
  • BL: номер блока (набор символов 0-3 [0-7 VGA])

Подфункция 12h: Загрузка набора символов из ПЗУ с удвоенным числом точек

Функция выполняет загрузку 8-строчного набора символов (8х8) из ПЗУ в один из блоков.

Регистры (устанавливаются до вызова функции):

  • AL: установить 12h
  • BL: номер блока (набор символов 0-3 [0-7 VGA])

Подфункция 14h: Загрузка 16-строчного набора символов из ПЗУ

Функция выполняет загрузку 16-строчного набора символов (8х16) из ПЗУ в один из блоков (только VGA).

Регистры (устанавливаются до вызова функции):

  • AL: установить 14h
  • BL: номер блока (набор символов 0-7)

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

Подфункция 20h: Графические символы (8х8) определяемые пользователем

Функция устанавливает вектор прерывания INT 1fh на таблицу символов 8х8 для ASCII-кодов 128-255. Основная задача-использование в совместимых режимах.

Регистры (устанавливаются до вызова функции):

  • AL: установить 20h
  • ES: сегмент таблицы символов пользователя
  • BP: смещение таблицы символов пользователя

Подфункция 21h: Графические символы, определяемые пользователем

Функция устанавливает вектор прерывания INT 43h так,чтобы он указывал на таблицу символов.

Регистры (устанавливаются до вызова функции):

  • AL: установить 21h
  • BL: указатель строки (количество символьных строк на экран)
    • 0-определено пользователем (поместить количество строк в регистр DL)
    • 1-14 строк
    • 2-25 строк
    • 3-43 строки
  • CX: число точек (байтов на символ)
  • ES: сегмент таблицы символов пользователя
  • BP: смещение таблицы символов пользователя

Подфункция 22h: Набор символов 8х14 из ПЗУ

Функция устанавливает вектор прерывания INT 43h так, чтобы он указывал на таблицу символов 8х14 из ПЗУ.

Регистры (устанавливаются до вызова функции):

  • AL: установить 22h
  • BL: указатель строки (число строк символов на экран)
    • 0-определено пользователем (поместить число строк в регистр DL)
    • 1-14строк
    • 2-25 строк
    • 3-43 строки

Подфункция 23h: Набор символов 8х8 из ПЗУ

Функция устанавливает вектор прерывания INT так, чтобы он указывал на таблицу символов 8х8 из ПЗУ.

Регистры (устанавливаются до вызова функции):

  • AL: установить 23h
  • BL: спецификатор строк (число строк символов на экране)
    • 0-определено пользователем (поместить число строк в регистр DL)
    • 1-14 строк
    • 2-25 строк
    • 3-43 строки

Подфункция 24h: Набор Символов 8х16 из ПЗУ

Функция устанавливает вектор прерывания INT 43h так, чтобы он указывал на таблицу символов 8х16 из ПЗУ.

Регистры (устанавливаются до вызова функции):

  • AL: установить 24h
  • BL: спецификатор строк (количество символьных строк на экране)
    • 0-определено пользователем (поместить количество строк в регистр DL
    • 1-14 строк
    • 2-25 строк
    • 3-43 строки

Приведенная ниже функция возвращает информацию о наборах символов.

[ Назад ] [ Оглавление ] [ Далее ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
3 марта 2006, 12:26:00
Подфункция 21h: Графические символы, определяемые пользователем
Подфункция 22h: Набор символов 8х14 из ПЗУ
Подфункция 23h: Набор символов 8х8 из ПЗУ
Подфункция 24h: Набор Символов 8х16 из ПЗУ

У Р. Журдена вектор прерывания, точно не помню, но вроде бы равен INT 41h, а не INT 43h. Интересно знать, почему они отличаются?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог