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