3.5 Функции
ZX-BASIC содержит набор стандартных функций для математических
расчетов, операций над знаковыми последовательностями, а также для
опроса экрана и клавиатуры. За исключением функций ATTR, POINT и
SCREEN$ аргументы, являющиеся константами или единичными
переменными (простыми или массивами), не требуется заключать в
скобки.
ABS X - абсолютная величина числа.
ACS X - арккосинус; если X не относится к диапазону
<-1,1>, сигнализируется ошибка A (Invalid
argument). Значение функции выражается в
радианах.
ASN X - арксинус. Ограничение на использование такое же,
как и у ACS. Значение функции выражается в
радианах.
ATN X - арктангенс. Значение функции выражается в
радианах.
ATTR(K,M) - задание атрибутов в K-ой строке и M-ой
колонке. Способ кодирования атрибутов описан в
разделе "Использование памяти". Если параметры
не находятся в диапазонах 0<=K<23 и 0<=M<32,
сигнализируется ошибка B (Integer out of range).
BIN - преобразование двоичного числа без знака
(максимально 16 цифр) в десятичное (на экране),
либо в форму, принятую в ZX Spectrum (в памяти).
ZX-BASIC не имеет функции, осуществляющей
обратное преобразование десятичного числа в
двоичное.
CHR$ K - замена числа на соответствующие символы
ASCII или управляющий символ, если K не
относится к диапазону <0, 255>, сигнализируется
ошибка B.
CODE F - замена символов ASCII на число. Аргументом
является любое алфавитно-цифровое выражение, а
значением функции является код первого символа
этого выражения или 0, если аргумент - пустая
цепочка.
COS X - косинус. Аргумент должен быть выражен в
радианах.
EXP X - показательная функция E**X.
IN K - опрос состояния буфера ввода-вывода
процессора. Соответствует двум инструкциям
ассемблера процессора Z80: LD BC,K, а также IN
A,(C). Значением функции IN является целое число
в диапазоне <0,255>. Это единственная
инструкция, применение которой может привести к
тому, что Ваша программа не будет выполняться на
других экземплярах ZX Spectrum. Применение IN к
чтению с клавиатуры: каждый ряд клавиш разделен
на две группы по пять и каждая пятерка относится
к определенному буферу:
клавиши номер буфера
(десятичный) (16-ричный)
CS ... V 65276 FEFE
A ... G 65022 F0FE
Q ... T 64510 F8FE
1 ... 5 63486 F7FE
0 ... 6 61438 EFFE
P ... Y 57342 CFFE
Enter ... H 49150 8FFE
Space ... B 32766 7FFE
Пять младших битов в данном буфере
сигнализируют, какая клавиша нажата( 0-нажата,
1-отжата). Трудности возникают с тремя старшими
битами. В версии 1 (самой старой) ZX Spectrum
они всегда равны 1. Следовательно, IN 64510=255
означает освобождение клавиш между Q и T. В
версии 2 шестой бит равен 0 и в описанной
ситуации IN 64510=191. В версии 3 состояние
шестого бита неопределенно и необходимы
дополнительные операции, например: LET P=IN K:
LET P=P-32*INT(P/32). Чтение с клавиатуры с
помощью IN делает возможным распознавание
нескольких одновременно нажатых клавиш.
INKEY$ - чтение клавиатуры. Значением функции является
знак нажатой клавиши. Клавиатура читается в
режимах L и С. Если нажато несколько клавиш или
не нажато ни одной, то значением INKEY$ будет
пустая цепочка. Эта функция не ждет нажатия
клавиши.
INT X - целая часть числа. Действительное число
округляется до ближайшего целого не превышающего
X. Например, INT 3.1=INT 3.8=3, INT -5.1=-6.
LEN F - длина цепочки знаков.
LN X - натуральный логарифм. Если X<=0, сигнализируется
ошибка A.
PEEK K - содержимое ячейки памяти с адресом K.
PI - значение постоянной 3.14159265.
POINT (K,M) - проверяет состояние точки экрана. Эта функция
имеет значение 1, если точка на экране с
координатами (K,M) имеет цвет чернил (выведена)
и 0, если имеет цвет фона. Обнаруживает
выведенные точки даже при сливании цвета фона и
цвета чернил. Координаты должны находиться в
диапазонах 0<=K<=255, 0<=M<=175.
RND - генератор псевдослучайных чисел. Очередное
значение равняется SEED/65536, где SEED -
двухбайтовая системная переменная с адресом
23671=#5C76. Каждый раз с вызовом RND она
модифицируется в соответствии с формулой:
SEED=((SEED+1)*75MOD65537)-1. Таким образом
генерируется последовательность в пределах
65536. Переменной SEED можно задавать начальное
значение инструкцией RANDOMIZE K.
SCREEN$ (K,M) - распознает знак на экране. Эта функция на
основании формы определяет символ, выведенный на
экран в пересечении K-й строки и M-й колонки.
Распознаются только символы с кодами от 32 до
127. В случае нераспознавания знака значением
функции является пустой текст. Координаты должны
быть в диапазонах 0<=K<=23 и 0<=M<=31.
SGN X - знак числа. Значением функции являются числа
-1,0,1 в зависимости от знака аргумента.
SIN X - синус. Аргумент должен быть выражен в радианах.
SQR X - квадратный корень. Значение аргумента X<0
сигнализируется сообщением A.
STR$ X - замена числа на цепочку знаков. Эта функция
заменяет двоичное представление числа на
символьное, которое может быть представлено на
экране.
TAN X - тангенс. Аргумент должен быть выражен в радианах
и отличаться от (PI/2)*N.
USR - работа этой функции зависит от типа аргумента.
Ее вызов с числовым аргументом (USR K) приводит
в действие машинный код с адреса K. После ее
выполнения и возврата управления BASIC значением
функции является содержимое пары регистров BC.
Вызов функции с текстовым выражением (USR F),
где F содержит литеру (малую или большую) от "A"
до "U" включительно. Значением функции является
адрес в области UDG, с которого хранятся 8 байт,
определяющих вид графического символа,
определенного пользователем и получаемого в
режиме G путем нажатия клавиши с соответствующей
литерой.
VAL F - рассчитывает значение числового выражения,
представленного в символьной форме. Весьма
важная функция с разнообразными приложениями.
Если выражение F не представляет верного (для
BASIC) числового выражения, сигнализируется
ошибка C. В ходе расчета могут возникать и
другие ошибки, зависящие от вида выражения.
VAL$ F - определяет значение текстового выражения,
представленного в символьной форме. Область
применения меньше, чем у VAL. Трудно найти
ситуации, в которых ее применение необходимо,
кроме вывода текстовых переменных с именами,
заранее неизвестными и определяемыми только в
процессе выполнения программы. Допустим, что
значением переменной A$ является литера,
определяющая имя алфавитно-цифровой переменной.
Не располагая этой функцией, мы имели бы
значительные трудности при распечатке значения
этой переменной. PRINT VAL $(A$+"$").
К сожалению, не все функции выполняются в полном соответствии
с замыслами авторов интерпретатора ZX-BASIC. В разделе "Ошибки
системы" мы приводим известные неточности в выполнении функций
SCREEN$, STR$, USR.
3.6 Инструкции ZX-BASIC
ZX-BASIC предоставляет в Ваше распоряжение 50 инструкций. Все
они могут быть помещены в программе или выполнены сразу как
приказы, отданные с клавиатуры.
BEEP X,Y - Позволяет генерировать звуки. 0.5<=X<=10.5 -
время звучания в секундах. -60<=Y<=69.8 - высота
тона. Значение Y=0 соответствует "си" средней
октавы. Диапазон изменения Y соответствует
приблизительно трем октавам. Выход за
допустимые значения сигнализируется
сообщением B. Во время генерации тона не
контролируется клавиша "BREAK", в связи с чем
прерывание программы возможно лишь по завершении
этой инструкции.
BORDER K - Эта команда задает цвет рамки (бордюра) на экра-
не телевизора. 0<=K<=7 - обозначает номер
выбранного цвета. Выход за пределы
сигнализируется сообщением B. Командой BORDER K
устанавливают также цвет фона в нижней части
экрана, предназначенной для системных сообщений
и ввода данных инструкцией INPUT.
BRIGHT K - Оттенок фона K=0 - нормальный, K=1 - яркий.
K=8 - вызывает в данное поле уже определенный в
нем ранее оттенок. BRIGHT K может выступать как
самостоятельная инструкция или в составе PRINT
или INPUT, действуя в этом случае только на
время выполнения головной инструкции. Проверим
это на печати CHR$ 19 + CHR$ K. Эти символы
можно внести как в текст программы, так и в
текстовые константы, нажимая в расширенном
режиме (курсор Е) клавишу 8 как BRIGHT 0 и
клавишу 9 как BRIGHT 1.
CAT... - Эта инструкция может использоваться лишь с
подключенным ZX интерфейсом 1.
CIRCLE [C,],K,M,N
- Вывод окружности радиуса N с центром в точке
(K,M) в цвете C. Если C опущен, то принимается
INK 8, PAPER 8, BRIGHT 8, FLASH 8. Допустимые
значения параметров: 0<=K<=255, 0<=M<=175.
Попытка рисования окружности за пределами экрана
вызывает ошибку B.
CLEAR [K] - Очищает область переменных, освобождая занятую
ими память, стирает экран и стек адресов
возврата из подпрограмм, выполняет инструкцию
RESTORE, обнуляет указатели, определяющие
координаты для рисующих и пишущих инструкций.
Если задан параметр K, его значение будет
принято как новый RAMTOP. K должно быть в
пределах 23821 ... 65535, иначе появится
сообщение M (RAMTOP NO GOOD). Если в памяти
компьютера уже есть программа, то K должно
соответственно возрасти. Слишком малое значение
RAMTOP может сделать невозможным выполнение
программ и команд с клавиатуры.
CLOSE #K - Эта команда отключает K-й поток от приписанного
ему канала. Хотя K может принимать значения от
0 до 15, на практике попытка отключения потоков
от 0 до 3 системой игнорируется. См. разделы
"Каналы и потоки" и "Ошибки системы".
CLS - Очищает экран и обнуляет экранные указатели
инструкций печати и графики. После стирания
экран приобретает цвет, определенный последними
инструкциями PAPER и BRIGHT.
CONTINUE - Эта инструкция позволяет продолжить программу
после остановки. Если прерывание поступило в
результате ошибки, сигнализируемой от 9 до L, то
после CONTINUE будет повторена последняя
выполненная инструкция, а в остальных случаях
будет выполнена следующая инструкция. Это
позволяет исправить с клавиатуры найденные
ошибки и продолжить работу. Эта инструкция
неприменима к директивам, задаваемым с
клавиатуры. Локализация CONTINUE в программе
не сделана специально, так как ее работа
зависит от текущего значения системных
переменных OLDPPC и OSPPC. Те, в свою
очередь, модифицируются системой и
отслеживание и управление их состоянием
может быть затруднительно, особенно во время
тестирования программы.
COPY - Если к Spectrum подключен принтер, то по этой
команде содержимое 22 верхних строк экрана будет
скопировано на бумагу (копируется не только
текст, но и рисунки). При отсутствии принтера
эта инструкция просто игнорируется. Spectrum сам
определяет, подключен ли принтер. Во время
вывода внутренний таймер останавливается,
системные переменные FRAMES в это время не
модифицируются.
DATA E1, E2 - Позволяет размещать в тексте программы списки
данных. В списке можно размещать любые
выражения:
100 DATA SIN X + COS Y + 1,"значение"+("полож."
AND Z>0) + ("отриц." AND Z<0)
110 READ Z, Z$
Переменная Z примет значение SIN X + COS Y + 1,
рассчитанное для текущих значений X и Y.
Переменная Z$ будет содержать цепочку "значение
полож." или "значение отриц.", в зависимости от
рассчитанного Z. Бессмысленно задавать команду
DATA с клавиатуры, так как Spectrum после
проверки синтаксиса тут же забудет о ней. В
программе может присутствовать любое число
инструкций DATA и их можно размещать в любом
месте.
DEF FN @[$] ([@1[$], @2[$],...,@N[$]])=E
- Определение функции пользователем. Именем
функции может быть только одна литера, возможно,
со знаком $. Его использование определяет тип
функции как текстовой. После имени в
обязательных скобках можно задавать список
аргументов, разделенных запятыми. Допускается
определение безаргументных функций. Имена
аргументов должны быть однолитерными (возможно,
со знаком $). Ограничение на число аргументов:
52 (26 числовых и 26 алфавитно-цифровых). После
закрытия скобкой списка параметров и знака "="
следует определение функции. Им может быть любое
выражение соответствующего типа, состоящее из
постоянных, переменных, аргументов, стандартных
функций и функций, определенных программистом.
Следует избегать рекурсивного вызова процедур,
как косвенно, так и непосредственно. Spectrum не
распознает эту ситуацию. После заполнения памяти
появится сообщение (1 или 6) или даже дойдет до
краха системы. Инструкцию DEF FN не имеет смысла
задавать с клавиатуры. Зато с клавиатуры можно
вызывать функции, имеющиеся в программе.
Размещение определений функции и их вызов не
имеет значения. В случае многократного
определения в тексте программы функций с
одинаковыми именами и типами действующим
определением будет версия, размещенная в строке
с наименьшим номером. Обратим внимание, что в
определении функции могут выступать имена
переменных, используемые в других местах
программы. Единственно, переменные, имеющие
имена, идентичные именам параметров, становятся
для функции невидимыми, а вместо них выступают
значения параметров функции.
DIM @[$] (K1, K2,...,KJ)
- Объявление массива. Эта команда резервирует в
памяти место для числового или текстового
массива. Размерность массива ограничена числом
255. Определенные индексы задают верхние
границы, нижней границей индекса всегда является
1. Приказ стирает в памяти существующий массив с
таким же именем того же типа. Значения,
определяющие размерности, должны быть известны в
момент выполнения инструкции DIM, но
необязательно в момент запуска программы.
Числовые массивы в момент определения
автоматически заполняются нулями, а текстовые -
пробелами. Элементами знакового массива являются
единичные символы. Такие массивы могут
трактоваться как массивы простых текстовых
переменных с одинаковой заранее заданной длиной.
Длина эта устанавливается последним параметром,
определяющим массив. Обращаться к массиву знаков
как к списку простых текстовых переменных
следует при опускании последнего индекса. Если в
программе объявлено DIM A$(10): DIM B$(5,20), то
A$=A$() является алфавитно-цифровой переменной с
длиной 10, а B$(I)=B$(I,) является пятью
переменными с длиной 20. Если LET A$="ARA", то
длина A$ тоже 10 символов, нехватающие символы
автоматически дополняются пробелами.
DRAW [C,]K,M[,X] - Эта инструкция позволяет рисовать отрезки прямых
(X опускается или =0) и фрагментов дуги
окружности с центральным углом X, выраженным в
радианах. Началом рисунка является последняя
точка графической инструкции (PLOT, DRAW,
CIRCLE) - (Xold,Yold), а концом - точка
(Xold+K,Yold+M). Если X>0, то дуга рисуется
против часовой стрелки, а для X<0 - по часовой.
Любопытным советуем проверить выполнение
следующих команд:
PLOT 55,27:DRAW OVER 1,120,120,59^3*PI
ERASE ... - Команда действует только при наличии ZX
интерфейса 1.
FLASH K - Включение мерцания поля. K=0 - нет мерцания,
K=1 - есть мерцание и K=8 - означает, что статус
данного поля должен оставаться неизменным. FLASH
как самостоятельная инструкция определяет
способ высвечивания в пределах всей программы,
помещенный же в список PRINT или INPUT только во
время выполнения данной инструкции.
FOR @=X TO Y [STEP Z]
- Цикл: выполнить для @ от X до Y с шагом Z (Z>0 -
увеличение, Z<0 - уменьшение). Конец цикла
указывает команда NEXT @. Заданием инструкции
FOR является создание управляющей переменной
(после уничтожения в памяти числовых или
управляющих переменных с тем же именем). Эта
переменная имеет в памяти представление,
отличное от числовых переменных, кроме ее
значения хранятся также Y и Z, а также номер
строки инструкции FOR. После формирования
переменной контролируется: может ли цикл быть
выполнен хотя бы раз. Если да, то управление
передается следующей за FOR инструкцией, если
нет, то следующей за NEXT @ команде. Если NEXT @
нет, то выводится сообщение 1. Если STEP опущен,
то Z=1. Несмотря на то, что ZX-BASIC формально
не отличает чисел с плавающей запятой от целых,
для целых X,Y,Z обработка цикла ускоряется на
20%.
FORMAT ... - Инструкция выполняется только при наличии ZX
интерфейса 1.
GOSUB K - Вызов подпрограммы. Эта команда размещает в спе-
циальном стеке свой собственный адрес, а затем
передает управление строке под номером K (или
первой большей). Далее выполняются команды до
первой встречи с командой RETURN, после которой
со стека снимается адрес последнего GOSUB и
управление передается адресу, следующему за ним.
Подпрограммы позволяют выполнять одну и ту же
последовательность команд в разных местах
программы без их многократного повторения. На
глубину вызовов подпрограмм ограничений нет.
Допускается рекуррентность, т.е. вызов
процедурой самой себя.
GO TO K - Переход к строке с номером K или следующей. Если
нет такой строки, то программа заканчивается
сообщением 0. Эта команда, набранная с
клавиатуры, запускает программу с заданной
строки. Запуск программы с помощью GO TO (в
сравнении с RUN) имеет то преимущество, что не
вызывает потерь значений переменных.
IF X THEN S - Условный оператор. Если значение выражения X
отличается от 0, выполняется последовательность
команд S, в противном случае все команды до
конца строки пропускаются и управление
передается следующей строке.
INK K - Определение цвета очередных знаков на экране.
Эта команда определяет цвет чернил. Значения K
от 0 до 7 определяют номер выбранного цвета, 8
сигнализирует согласие на цвет ранее заданный
для данного поля экрана, 9 задает использование
белого или черного цветов в зависимости от
контрастности установленного в данном поле цвета
фона. В нижних строках экрана система всегда
использует INK 9. Эта инструкция может
применяться как самостоятельно, так и в списке
инструкций PRINT, INPUT, CIRCLE и т.д.
INRUT ... - Позволяет во время выполнения программы вводить
с клавиатуры данные для указанных в списке
переменных. Эта команда также позволяет ввод в
нижнюю часть экрана. Надпись сохраняется лишь на
время ввода. После ключевого слова INPUT следует
список элементов, определяющих, что и как должно
быть выполнено. Элементы списка должны быть
разделены запятыми, точкой с запятой или
апострофами. Запятая указывает, что надо
сдвинуть курсор в следующую половину экрана в
той же самой строке, а если это невозможно, то в
начало следующей строки. Апостроф означает
переход к новой строке, а точка с запятой не
изменяет положение курсора. Элементы списка,
предусмотренные к отображению на экране, должны
быть константами либо выражениями, заключенными
в круглые скобки. Спецификации цветов INK,
PAPER, BRIGHT, FLASH, INVERSE и OVER позволяют
получить любые цветовые эффекты. Переменные,
значения которых должны быть заданы с
клавиатуры, должны заноситься в список по одному
между разделителями. Если мы хотим, чтобы
программа считала с клавиатуры элемент массива
A(I,J) и проинформировала пользователя, чего она
от него ожидает, воспользуемся инструкцией:
INPUT "Введи значение элемента A(";I;",";J;")=";
A(I,J).
Инструкция INPUT ожидает ввода информации и
завершается только после ввода всех переменных,
указанных в списке. Каждое значение переменной
при вводе необходимо завершать нажатием клавиши
"Enter". Если вводится текстовая переменная, то
клавиша "Enter" вместо ввода ее значения вызовет
заполнение области переменной пробелами. Запросы
на числовые переменные нельзя игнорировать этим
способом и необходимо ввести существующие
переменные. При считывании значений числовых
переменных внизу экрана мигает курсор "L" или
"C", но при вводе знаковой последовательности
курсор появится вместе с окружающими его
кавычками. В случае необходимости их можно
удалить. Существует возможность считывания
текста без этих кавычек. В этом случае текстовую
переменную необходимо пометить в списке с
ключевым словом LINE. Одно LINE будет относиться
к одной переменной. Недопустимо использование
этого слова вместе с числовыми переменными. Во
время выполнения инструкции INPUT две нижние
строки экрана в случае необходимости будут
передвигаться вверх, создавая свободное место
для ввода и вводимых данных. Область эта может
максимально расшириться до 22 строк. Ввод данных
базируется на редакторе. Благодаря этому перед
нажатием "Enter" возможны любые исправления
введенных величин. В списке INPUT кроме этого
можно размещать TAB N, а также AT K,N. Действие
первого из них вызывает перемещение курсора до
N-й колонки в этой либо в следующей строке. В
свою очередь AT разместит курсор в положении
(K,N), это значит в K-m операторе и N-й колонке.
Некоторые трудности может вызвать факт, что
положение начала координат - поля (0,0)
изменяется вместе с расширением нижней части
экрана. Поле всегда указывает левый верхний угол
рабочей области редактора и значение поля (K,N)
определяется этим. Попытки расширить эту область
свыше 22 строк кончаются сигналом ошибки 5.
Перед этим компьютер может выражать свое
неодобрение ворчанием.
INVERSE K - Очередной определитель цветности. K=0 обозначает
высвечивание заданных цветов фона и чернил, а
K=1 меняет их местами. Может применяться как
самостоятельно, так и в списке инструкций PRINT,
INPUT, CIRCLE и т.д.
LET V=E - Присваивает значение переменной. Ее выполнение
опирается на вычисление выражения E и присвоение
полученного значения переменной V, если такая
переменная уже существует. Если V еще нет, то
она организуется в соответствующем поле памяти.
Это не относится к массивам, которые обязательно
должны быть объявлены перед использованием.
LIST [K] - Высвечивание на экране текста программы на языке
ZX-BASIC с K-ой строки. Если K опущен, то
принимается значение K=0. Данная команда
устанавливает указатель текущей строки в K,
делая ее доступной для редактирования.
Высвечивание всегда производится до конца текста
программы. Прервать его можно после появления в
нижней части экрана вопроса:"Scroll?" нажатием
одной из клавиш: BREAK, STOP или "N".
LLIST [K] - Инструкция аналогична LIST, но печать произво-
дится на подключенном принтере. Когда принтера
нет, LLIST только устанавливает указатель
текущей строки на строке K. Во время печати
программы останавливается таймер (системные
переменные FRAMES не модифицируются).
LOAD ... - Spectrum может считывать с магнитофона различные
типы данных. LOAD F вызывает считывание с
кассеты программы на языке BASIC, записанной на
ленте как набор с названием F. Все другие наборы
данных на кассете игнорируются. Вместо полного
имени отыскиваемого набора можно дать пустую
цепочку символов: LOAD "". Тогда будет считан
первый найденный набор на языке BASIC независимо
от его имени. После отыскания на ленте
необходимого блока находящаяся в памяти
программа и переменные удаляются (модифицируются
соответствующие системные переменные и лишь
незначительное число ячеек памяти меняет свое
значение) и подготавливается место для новой
программы. Доступ к удаленным данным для системы
невозможен.
LOAD F DATE @ [S] [()]
- Считывает числовой или текстовый массив и разме-
щает его в области переменных под именем @,
удаляя перед этим массив с тем же названием и
тем же типом данных. @ должна иметь имя, под
которым выступал данный массив перед записью на
кассету. Размерность массивов не задается, но
скобки обязательны. Как текстовые массивы можно
считывать и записывать простые переменные этого
типа.
LOAD F CODE [K[,N]]
- Форма оператора, позволяющая считывать наборы
байтов без определения их структуры. Параметр K
говорит, по какому адресу должен быть записан в
память считываемый блок, а N определяет его
длину. Если эти параметры опустить, то набор
будет считан в то же самое место, с которого был
сброшен на ленту. Эта инструкция не проверяет,
может ли считываемый блок уничтожить жизненно
важную для системы информацию и беззаботно
затирает соответствующие области памяти новой
информацией. Задание значения параметра N
меньше, чем фактическая длина набора на ленте,
сигнализируется сообщением R, а, следовательно,
этой инструкцией нельзя читать только начальные
фрагменты блоков памяти (разве что выключая
магнитофон в процессе считывания).
LOAD F SCREEN - Является особым случаем LOAD F CODE и отвечает
точно LOAD F CODE 16384,6912. Считывает экран
вместе с атрибутами. После считывания данных и
программ с кассеты возможны два рода ошибок.
Технические проблемы сигнализируются сообщением
R. При считывании слишком длинных блоков (частый
случай, когда RAMTOP установлен слишком низко)
появляется сообщение 4.
LPRINT ... - Инструкция работает как PRINT, но данные посыла-
ются на принтер. Когда принтера нет, инструкция
игнорируется. Помещенные в список LPRINT
определители цветов PAPER, INC, FLASH и BRIGHT
будут игнорироваться. Разделители а также TAB
действуют обычным способом. В AT первый параметр
(номер строки) опускается. Печать осуществляется
с помощью буфера длиной в 32 знака (256 байт).
Печать фактически наступает после заполнения
буфера, команды перехода к новой строке, а также
в момент обычного завершения программы. После
прерывания программы в случае ошибки или
вмешательства пользователя печать неполного
буфера вызывается нажатием клавиши "Enter".
MERGE F - Считывание программы на BASIC с ленты и присое-
динение ее к уже существующей в памяти. Строки,
номера которых в обоих программах перекрываются,
заменяются новыми, также как и переменные с
одинаковыми именами. Оставшиеся строки и
переменные заносятся в соответствующую область
памяти. Это позволяет создавать библиотеки
подпрограмм для последующего их использования.
Действие инструкции основано на считывании всего
блока в рабочую область и только после этого
старые и новые программы объединяются. При
длинных программах этот процесс может длиться
несколько минут. Директива может быть применена
даже когда в памяти ничего нет. Отличается от
LOAD F значительно более долгим временем
выполнения и тем, что не запускает программу,
даже если она была записана директивой SAVE F
LINE K (что очень важно для пиратов). Вместо
имени можно использовать пустой текст.
MOVE - Инструкция выполняется только при наличии ZX
интерфейса 1.
NEW - Инструкция действует практически как отключение
питания. Инициализирует систему BASIC, сохраняя
только системные переменные RAMTOP, PRAM, RASP,
PIP и UDG. Память ниже RAMTOP очищена, а область
выше RAMTOP остается нетронутой.
NEXT @ - Инструкция, замыкающая цикл (FOR ...). После
встречи с NEXT @ интерпретатор отыскивает управ-
ляющую переменную @, увеличивает ее значение на
величину шага и сравнивает с предельным значе-
нием. Если оно еще не превзойдено, то управле-
ние передается инструкции, следующей за соот-
ветствующим FOR. В противном случае выполнение
программы начнется со следующей за NEXT команды.
Если в области переменных не найдется такая
числовая переменная @, то это сигнализируется
сообщением 2. Если же эта переменная не является
управляющей, то появится сообщение 1. Одновре-
менно может быть организовано максимум 26 цик-
лов. Управляющие переменные могут быть исполь-
зованы как внутри цикла, так и вне его, как
обычные числовые переменные. После открытия
цикла нельзя модифицировать ни предельного зна-
чения, ни шага. Не существует ограничений на
взаимное расположение циклов. Например, конст-
рукция, приведенная ниже, недопустимая в других
версиях BASIC, будет воспринята ZX-BASIC как
правильная:
100 FOR I=1 TO 10
200 FOR J=10 TO 20
300 PRINT I,J
400 NEXT I
500 NEXT J
OPEN #K - Спецификация канала директив, позволяющая
подключить K-й поток к указанному каналу
(см.раздел "Каналы и потоки"). "Голый" Srectrum
(без внешних устройств, а конкретно без ZX
интерфейса 1) распознает только каналы "S", "K",
"P", "s", "k", "p". Нельзя использовать потоки
0...3, остальные 4...15 находятся в распоряжении
пользователя.
OUT M,N - M должно быть числом из диапазона 0...65535, N -
из диапазона -255...255, при этом отрицательные
числа будут автоматически увеличиваться на 256
(следовательно, OUT M,-3 это то же самое,что OUT
M,253). Эта инструкция позволяет с уровня BASIC
посылать информацию в порты вывода процессора и
может применяться при работе с внешними
устройствами. Эта инструкция - аналог команд
ассемблера:
LD A,N
LD BC,M
OUT (C),A
OVER K - Спецификатор способа наложения точек или симво-
лов. K=0 означает замену соответствующей точки
или знака на новый, а K=1 вызывает наложение
новых знаков на уже существующие. В местах где
старый и новый знак или точка имеют одинаковые
цвета - остается цвет фона, там же, где цвета
различны - появляется цвет чернил. Новый рисунок
вызывает, следовательно, инверсию предыдущего
цвета. Это позволяет удалять единичные точки,
линии на экране и т.д. Так же, как для
спецификаторов цветов, область действия
заданного режима рисования может быть глобальной
во всей программе или только на время действия
одной пишущей или рисующей инструкции.
PAPER K - Спецификатор цвета фона. Значения K от 0 до 7
определяют номер выбранного цвета, 8
сигнализирует согласие на цвет, ранее заданный
для данного поля экрана, 9 задает использование
белого или черного цветов в зависимости от
контрастности установленного в данном поле цвета
фона. В нижних строках экрана система всегда
использует PAPER 9.Эта инструкция может
применяться как самостоятельно, так и в списке
инструкций PRINT, INPUT, CIRCLE и т.д. Цвет фона
может появляться в двух различных оттенках (см.
BRIGHT).
PAUSE K - Временная остановка программы. Параметр K
определяет задержку в пятидесятых долях секунды.
Нажатие любой клавиши прерывает задержку
независимо от пройденного времени. Значение K=0
означает останов, продолжающийся до нажатия
любой клавиши (см. раздел "Ошибки системы").
PLOT [E,]K,M - Рисование единичной точки с координатами
0<= ABS K<=255 и 0<= ABS M <=175 на экране.
Начало координат помещено в левом нижнем углу,
выше двух строк, зарезервированных для системных
сообщений. Эта директива не может применяться в
двух нижних строках.
POKE K,M - Эта инструкция в ячейку с адресом 0<=K<=65535
загружает число -255<=M<=255 (увеличенное на 256
для M<0).
PRINT ... - Инструкция вывода на экран последовательности
знаков и чисел. PRINT печатает элементы своего
списка в верхних 22 строках экрана. В списке
можно размещать то же самое, что и в списках
INPUT. Нет необходимости заключать выражение в
скобки, которые перед вызовом должны быть
рассчитаны. Лучше применять AT K,N, если
положение начала координат является постоянным
(левый верхний угол). Параметр 0<=K<=21
определяет строку, а 0<=M<=31 - колонку.
Превышение допустимых значений параметров
сигнализируется сообщением 5. После заполнения
22 строк экрана, перед дальнейшим выводом,
компьютер предлагает продолжить вывод (Scroll?).
Клавиши BREAK, STOP или "N" прерывают выполнение
программы с сообщением D, остальные выражают
согласие на сдвиг экрана.
RANDOMIZE [K] - В принципе эта процедура предназначена для ини-
циализации генератора псевдослучайных чисел
(RND). Если параметр K задан и отличен от 0, то
он размещается в системной переменной SEED. Что
делается там с ним, было описано выше (функция
RND). Пропуск параметра или K=0 вызовет
размещение в SEED двух младших байт системных
переменных FRAMES. Побочным применением
инструкции RANDOMIZE может быть назначение
значения младшего и старшего байтов данного
целого числа K, размещенного в диапазоне
1...65535. Меньший байт обозначаем как PEEK
23670, а старший как PEEK 23671.
READ V1,V2,... - Эта команда задает очередным переменным зна-
чения из списка соответствующих выражений,
помещенных в DATA. Каждая из инструкций READ
модифицирует соответствующую системную
переменную DATADD, помнящую, какое из выражений
списка DATA было считано последним. Попытка
чтения уже несуществующих данных сигнализируется
сообщением Е.
REM - Вставка комментариев. После слова REM можно раз-
местить любую последовательность знаков (за
исключением символа с кодом 13), которая при
выполнении будет игнорироваться.
RESTORE [K] - Эта инструкция восстанавливает системный указа-
тель на первое выражение в списке DATA в строке
с номером K или первым большим. Если K опущен,
то по умолчанию принимается значение 0. Перед
новым запуском программы инструкцией GO TO
необходимо обязательно использовать директиву
RESTORE (если в этой программе есть операторы
READ).
RETURN - Возврат из подпрограммы.
RUN [K] - Запуск программы на BASIC. Выполнение программы
начинается со строки K или, если K опущен, с
начала программы. Перед запуском программы RUN
автоматически выполняет команду CLEAR, что
соответствует уничтожению всех переменных.
SAVE ... - Инструкция, обратная LOAD. С ее помощью на кас-
сету записывают программы на BASIC, числовые и
знаковые массивы, а также последовательности
байтов без уточнения их структуры. Форма команды
такая же, как у LOAD, с тем отличием, что нельзя
опускать ни одного параметра. Имя, под которым
данный блок должен быть записан на ленту, должно
быть непустой последовательностью знаков длиной,
не превышающей 10. При записи программы на BASIC
после имени можно поместить LINE K. Записанная
таким образом программа после считывания будет
автоматически запускаться со строки с номером
К.
STOP - Останов программы. Программа может быть продол-
жена нажатием клавиши CONTINUE.
VERIFY ... - Форма представления этой инструкции аналогична
инструкции LOAD ..., однако ничего в компьютер
не считывается, а только проверяется, совпадает
ли содержимое соответствующих областей памяти с
тем, что записано на кассете. Все выявленные
несоответствия сигнализируются сообщением R.