Программирование видеоадаптеров

       

Запись символа в режиме телетайпа - функция 0Eh


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

Данная функция обрабатывает следующие управляющие символы: звуковой сигнал (7 - BELL), возврат курсора назад на одну позицию (8 - BACKSPACE), возврат каретки (0Dh - CARRIAGE RETURN) и перевод строки (0Ah - LINEFEED).

В текстовых режимах символы отображаются с атрибутами, использованными ранее. Атрибуты символов экрана не меняются и определяют цвет отображаемых символов. Если вам надо отобразить на экране символы различных цветов, вы должны предварительно установить атрибуты всех символов на экране.

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

Ниже приведен формат вызова функции 0Eh:



На входе:

AH

0Eh - запись символа в режиме телетайпа

AL

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

BH

Номер страницы видеопамяти (только в текстовых режимах)?

BL

Цвет символа (в графических режимах)

На выходе:

Не используются

Приведем текст процедуры WriteStringT, которая выводит на экран строку, имеющую смещение SI в сегменте DS, при помощи функции 0Eh прерывания INT 10h (листинг 5.3).

Листинг 5.3. Файл WRITESTR.C

WriteStringT        PROC

 

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

 

mov      ah,0Fh

 

int          10h                         ; Номер активной страницы в регистре BH

 

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

next_char:

 

mov      ah,0Eh

 

lodsb                                                    ; Получаем следующий символ строки

 

cmp      al,0                         ; Находим конец строки

 

je           exit_proc              ; Если конец строки достигнут, то

                                                                               

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

 

int          10h

 

jmp       next_char

exit_proc:

 

ret

WriteStringT        ENDP



Содержание раздела