Глава 4. Вывод на терминал.

Раздел 4. Вывод точечной графики.

4.4.7 Графический вывод с использованием символов псевдографики.

Kогда Вы выводите изображение точка за точкой, то это отнимает очень много времени, особенно когда создаются эффекты мультипликации. Один из способов экономии времени состоит в сведении всех или части выводимых форм к фигурам, которые могут быть построены на матрице точек 8*8. Такие фигуры могут быть созданы, как определяемые пользователем символы, как показано в {4.3.4}. После того, как эти символы определены они выводятся на экран очень быстро и просто. Эти символы могут выводиться вперемешку с поточечными графиками, как обычные буквы. Один из способов быстрого заполнения фигуры состоит в последовательном выводе внутри фигуры полностью закрашенного блока. Отметим, что эти символы всегда располагаются в стандартных позициях курсора.

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

В этом примере рисуется фигура человека, занимающая 2 символа в высоту и 2 символа в ширину. Kак объяснено в {4.3.4} вектор прерывания 1FH указывает на начало области данных, определяющих символы. Четыре символа могут быть выведены обычными процедурами DOS или BIOS. Легко создать другой набор символов, для вывода фигуры с руками и ногами в другом месте экрана. Два набора символов могут поочередно меняться в соседних позициях курсора, создавая иллюзию человека, идущего по экрану.
;---в сегменте данных
CHARACTER_DATA DB 00110000B ;левый верхний квадрант
DB 01100111B
DB 01100111B
DB 00110011B
DB 00011111B
DB 00001111B
DB 00001111B
DB 00000111B
DB 00000011B ;правый верхний квадрант
DB 10001100B
DB 10011000B
DB 00110000B
DB 11100000B
DB 11000000B
DB 11000000B
DB 10000000B
DB 00001111B ;левый нижний квадрант
DB 00011111B
DB 00011100B
DB 00011000B
DB 00011000B
DB 00110000B
DB 01100000B
DB 00010000B
DB 11000000B ;правый нижний квадрант
DB 11000000B
DB 11000000B
DB 11000000B
DB 01100000B
DB 01100000B
DB 00010000B
DB 00011110B
DB 00000000B
;---установка вектора прерывания
PUSH DS ;сохраняем DS
MOV DX,OFFSET 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 DH,13 ;строка 13
MOV DL,20 ;столбец 20
MOV BH,0 ;страница 0
INT 10H ;установка курсора
;---рисуем верхние два символа
MOV DL,128 ;берем символ 128
MOV AH,2 ;функция вывода/курсор вперед
INT 21H ;вывод символа
MOV DL,129 ;берем символ 129
INT 21H ;выводим его
;---позиционируем курсор на нижнюю строку
MOV DH,14 ;строка 14
MOV DL,20 ;столбец 20
MOV AH,2 ;функция установки курсора
INT 10H ;устанавливаем курсор
;---рисуем нижние два символа
MOV DL,130 ;берем символ 130
MOV AH,2 ;функция вывода/курсор вперед
INT 21H ;вывод символа
MOV DL,131 ;берем символ 131
INT 21H ;выводим его


<~-4.4.6 Заполнение областей экрана.
Содержание
Раздел 5. Сдвиг экрана и страницы.-~>

Сайт управляется системой uCoz