Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

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

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

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

8.10. Запись символа с атрибутами в текущей позиции курсора - функция 09h

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


На входе:   AH = 09h - запись символа с атрибутом;

   AL = ASCII-код записываемого символа;

   BH = номер страницы видеопамяти;

   BL = атрибут (для текстового режма) или
      цвет (для графического режима);

   CX = число записываемых символов.

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

Если запись символа происходит на видеоадаптере EGA в графическом режиме, и бит D7 регистра BL содержит единицу, то новый символ накладывается на текущее содержимое экрана по логике булевой операции ИСКЛЮЧАЮЩЕЕ ИЛИ.

Ниже приведен пример, использующий рассмотренные функции BIOS для выбора режима работы видеоадаптера, выбора активной страницы видеопамяти, изменения формы и координат курсора и отображения символов на экране дисплея:

TITLE   BIOS_FUNCTION

.MODEL   tiny

DOSSEG


.STACK   100h

.DATA
   message      DB   "INT 10h", 0
   video_page   DB   2

.CODE
.STARTUP

   ; выбираем режим 0 видеоадаптера

   xor   ah,ah
   xor   al,al
   int   10h

   ; изменяем форму курсора

   mov   ah,1

   ; начало курсора - линия 0
   ; конец курсора - линия 7

   mov   ch,0
   mov   cl,7
   int   10h

   ; выбираем страницу видеопамяти - video_page

   mov   ah,5
   mov   al,video_page
   int   10h

   ; прокручиваем окно экрана

   mov   ah,6
   xor   al,al      ; прокручиваем все окно
   mov   bh,0FFh      ; используем атрибут 0FFh

   mov   cl,10      ; задаем верхний левый угол окна
   mov   ch,5         

   mov   dl,30      ; задаем правый нижний угол окна
   mov   dh,15      
   int   10h

   ; устнанавливаем координаты курсора

   mov   ah,2
   mov   bh,video_page   ; выбираем страницу video_page
   mov   dh,12      ; строка 12
   mov   dl,20      ; колонка 20
   int   10h

   ;отображаем на активной странице экрана строку message

   mov   si,OFFSET message
   call   WriteString

   .EXIT   0


; процедура WriteString выводит на экран строку, имеющую
; смещение si в сегменте ds

WriteString   PROC

   ; определяем текущую активную страницу экрана

   mov   ah,0Fh
   int   10h      ; номер активной страницы в регистре bh

   ; получаем в dx координаты курсора

   mov   ah,3
   int   10h

   ; в цикле выводим на экран символы строки

next_char:

   mov   ah,9
   lodsb
   cmp   al,0         ; находим конец строки
   je   exit_proc      ; если конец строки достигнут, то оканчиваем процедуру
   mov   bl,8         ; для отображаемых символов используем атрибут 8
   mov   cx,1         ; символы строки выводятся без повтора
   int   10h

   ; перемещаем курсор в следующую позицию строки

   mov   ah,2
   inc   dl
   int   10h

   jmp   next_char

exit_proc:

   ret

WriteString   ENDP

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