logo search
ZX-Review-1992-01-12

Эмуляция команд БЕЙСИКа из машинного кода.

Здесь мы рассмотрим, как выполнить БЕЙСИК овские команды, связанные с графикой, из машинного кода. Как правило, это несложная задача. Поскольку в ПЗУ имеются процедуры, способные это сделать, надо только знать, каким образом к ним следует обращаться.

CLS

Сначала займемся очисткой экрана. В машинном коде это можно сделать вызовом процедуры CLS, расположенной в ПЗУ по адресу 0D6BH (3435). В результате ее работы выключаются все пикселы на экране, а цветовые атрибуты устанавливаются такими, как установлено в системной переменной ATTR_P 5С8DH (23693). Ее побитовая раскладка та же, что и у системной переменной ATTR_T (см. выше). Данная процедура работает точно так же, как и соответствующая команда БЕЙСИКа.

Вы можете также очистить только нижнюю часть экрана (обычно это две нижние строки). Это делается вызовом процедуры CLS_LOWER, которая находится по адресу 0D6EH (3438). В отличие от основного экрана, эта область очищается с цветом бордюра, а не с цветом, установленным в ATTR_P.

Среди процедур ПЗУ есть еще одна, обеспечивающая более мощные возможности. Она называется CL_LINE (0E44H = 3652) и очищает заданное количество строк в нижней части экрана.

Перед ее вызовом в регистре B должно быть установлено количество строк, подлежащих очистке от 01 до 18Н (от 1 до 24). Так, например, чтобы очистить 10 нижних строк, нужно предварительно в регистр B заслать число 0АН.

Эту процедуру можно применять двумя способами. Если нулевой бит системной переменной TVFLAG (5C3C = 23612) выключен, то при очистке используются цвета экрана, а если он включен, то используется цвет бордюра. Таким образом, здесь есть возможность очистить одновременно весь экран, включая и нижние две строки, в цвет ATTR_P. Процедура CLS сделать такого не может. В то же время, следует обратить внимание на то, что процедура CLS после очистки экрана инициализирует курсор и текущая позиция печати устанавливается в исходное положение левый верхний угол. Процедура же CL_LINE этого не делает.