Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 25. Создание специальных символов. Часть 2


   Средний уровень.


   Для цветного адаптера и PCjr используйте функцию 25H  прерыва-
ния 21H для изменения вектора  прерывания  1FH.   При входе DS:DX
должны  указывать  на первый байт блока данных.  Более  подробное
описание см. в [1.2.3]. В примере создаются два символа с номера-
ми 128 и 129.  Они являются зеркальными отображениями друг друга,
а выведенные подряд образуют небольшой прямоугольник.

;---в сегменте данных
CHARACTER_DATA   DB  11111111B, 10000000B, 10000000B, 10000000B
                 DB  10000000B, 10000000B, 10000000B, 11111111B
                 DB  11111111B, 00000001B, 00000001B, 00000001B
                 DB  00000001B, 00000001B, 00000001B, 11111111B

;---установка вектора прерывания
   PUSH DS                ;сохраняем DS
   LEA  DX,CHAR_DATA      ;смещение для данных в DX
   MOV  AX,SEG CHAR_DATA  ;сегмент для данных в DS
   MOV  DS,AX             ;
   MOV  AH,25H            ;функция установки вектора
   MOV  AL,1FH            ;номер изменяемого вектора
   INT  21H               ;установка вектора
   POP  DS                ;восстанавливаем DS

;---печать символов
   MOV  AH,2              ;номер функции
   MOV  DL,128            ;первый символ
   INT  21H               ;вывод его
   MOV  DL,129            ;второй символ
   INT  21H               ;вывод его

   Для EGA функция 11H прерывания 10H манипулирует набором симво-
лов. Эта функция может быть очень сложной, когда она используется
для создания специальных режимов  экрана, но ее основное примене-
ние достаточно простое. Имеется четыре подфункции. Когда AL равен
0, то данные, определяемые  пользователем переносятся из памяти в
специальный  блок  символов.  Когда AL равен 1 или 2,  то  наборы
данных для символов 8*14 и 8*8 соответственно копируются из ПЗУ в
блок символов.  Когда AL равен 3, то функция устанавливает назна-
чение блока в регистре выбора карты символов, как описано выше. В
последнем случае надо просто поместить соотвествующие данные в BL
и вызвать функцию.  Для  загрузки  данных  из ПЗУ поместите номер
блока  в BL и выполните функцию.  Для загрузки своих данных  надо
чтобы ES:BP указывали на них,  число передаваемых символов должно
быть  в  CX, смещение (номер символа) в блоке должно  быть в  DX,
число байтов на символ - в BH, а номер блока - в BL.  После этого
вызывайте прерывание 10H. Вот пример:

;---устанавливаем 128 пользовательских символов в блоке 0
   MOV  AX,SEG CHARACTER_DATA   ;ES:BP должны указывать на данные
   MOV  ES,AX                   ;
   MOV  BP,OFFSET CHARACTER_DATA   ;
   MOV  CX,128                  ;число символов
   MOV  DX,128                  ;начальное смещение
   MOV  BL,0                    ;номер блока
   MOV  BH,8                    ;матрица 8*8
   MOV  AL,1                    ;номер подфункции
   MOV  AH,11H                  ;номер функции
   INT  10H                     ;переносим данные

 
« Предыдущая статья   Следующая статья »