Глава 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. Сдвиг экрана и страницы.-~>