|
Echo
#03
31 марта 1997 |
|
Книга - Тайники ZX-Spectrum: ZX-Бейсик.

Глава 3.
ZX - Б Е Й С И К
В этой главе кратко представлен алфа-
витный перечень функций и команд языка
ZX-Бейсик. Его стоит просмотреть даже тем,
кто хорошо знает этот диалект, так как мы
приводим информацию, пропущенную в ориги-
нале инструкции по эксплуатации.
В перечне используются следующие обоз-
начения:
@ - единичная литера;
V - переменная любого типа;
X, Y, Z - численные выражения с дейст-
вительными значениями;
K, M, N - численные выражения со значе-
ниями автоматически округляемыми ближай-
шими целыми числами;
E - численное выражение или строка;
F - строка;
S - последовательность команд, отделен-
ных друг от друга двоеточием;
C - последовательность инструкций, оп-
ределяющих цвета и способ высвечивания
(INK, PAPER, BRIGHT, FLASH, OVER, INVER-
SE), отделяемые запятыми и точками с запя-
той.
Символы, помещенные в квадратные скобки
( [ ] ), можно не употреблять. Например:
LOAD F CODE [M[, N]] означает, что верными
являются формы:
LOAD F CODE
LOAD F CODE M
LOAD F CODE M, N.
В этом случае SPECTRUM обычно дополняет
пропущенные параметры значениями, вытекаю-
щими из контекста, в нашем случае - счи-
танными с магнитной ленты. Запись @[Z] оз-
начает или @Z, или @, т. е. допускается
использование как числовой переменной, так
и текстовой.
SPECTRUM почти во всех случаях допус-
кает использование в качестве параметров
выражений, требующих предварительных рас-
четов. Ограничения затрагивают лишь допус-
тимые значения рассчитываемых результатов
и их типы. Выражения типа K, M, N могут
давать в результате любые действительные
числа меньшие 65535 (2^16-1), которые бу-
дут округлены ближайшими целыми числами.
Появление большего числа сигнализируется
как ошибка сообщением INTEGER OUT OF
RANGE.
3. 1. Структура программы
Программа на Бейсике - это последова-
тельность инструкций, разделенных на стро-
ки. Каждая строка начинается со своего но-
мера - натурального числа в диапазоне 1...
9999. Пронумерованные операторы могут
вводиться в любой последовательности, они
будут автоматически упорядоченны по воз-
растанию номеров. Необязательно нумеровать
подряд, например 1, 2, 3,... , такой стиль
программирования не рекомендуется. Удобнее
пользоваться номерами через 10, т. е. 10,
20, 30,..., что облегчит вставку новых
строк между старыми.
Ввод новой строки с уже существующим
номером, вызывает замену старой версии
этой строки. Допускается размещение в
тексте программы строк, содержащих лишь
номер строки с целью оптического выделения
фрагментов программы.
Единичный оператор программы может быть
значительно длинее экранной строки (32
знака), но не может содержать более 127
инструкций. Команды в операторе должны
быть отделены двоеточием. Между инструк-
циями в строке можно размещать любое число
пробелов с целью улучшения читаемости
программы.
Нажатие <ENTER> завершает ввод строки.
Компьютер проверяет ее синтаксис и, если
она начинается с номера, включает ее в су-
ществующую программу, вставляя ее в тре-
буемое место, а если номер опущен, компью-
тер приступает к немедленному выполнению
введенной последовательности команд.
3. 2. Типы данных
ZX-Бейсик позволяет непосредственно
оперировать числами и текстами. Числа мо-
гут записываться в одной из трех форм:
- целочисленной: 0, +17, -12, 35 и так
далее;
- дробной: +31. 1768, 3303, 12, -. 72 и
т. д.;
- показательной: 7.32Е-7 обозначает
число 7.32*10^-7;
Максимальное значение действительного
числа не может превышать 1.7Е+38. Числа
хранятся с точностью до 9-10 значных
цифр. Пробелы в середине записи числа не
допускаются. SPECTRUM для высвечивания
числа потребует максимально 14 знаков.
Значения, требующие не более 8 цифр, выво-
дятся точно. Остальные в показательной
форме.
Другим типом данных ZX-Бейсика являются
текстовые константы, называемые также це-
почками (строками). Это любая последова-
тельность знаков (символов с кодами от 0
до 256), размещенная в кавычках. В тексто-
вую константу можно также включать конт-
рольные (управляющие символы), коды ключе-
вых слов и даже коды символов не задейст-
вованные в ZX-SPECTRUM. Длина текстовой
константы - это число содержащихся в ней
символов, а не число знаков, необходимых
для высвечивания константы на экране. Это
число ограниченно лишь размером допустимой
памяти. Допускаются и тексты длиной 0, т.
е. пустые.
Во время конструирования текста боль-
шинство символов можно вводить непосредст-
венно с клавиатуры. Но некоторые могут
потребовать дополнительных усилий. Чтобы
ввести в текст кавычку, необходимо ввести
ее с клавиатуры дважды. Универсальным спо-
собом вставки в текстовую строку символов,
не задействованных в ZX, является исполь-
зование алфавитно-цифровых выражений и
функции CHR$. Например, конструкция "Э-
ТО"+CHR$ 13+"ТЕКСТ" даст в результате
текст:
ЭТО
ТЕКСТ
ZX-Бейсик не знает логических перемен-
ных. Эту роль исполняют числа. Значения,
отличающиеся от 0, интерпретируются как
ИСТИНА, равные 0 - ЛОЖЬ. Результатом рас-
четов логических выражений являются числа
0 и 1.
Кроме констант ZX-Бейсик допускает ис-
пользование числовых и текстовых перемен-
ных. Они служат для сохранения в памяти
компьютера констант определенного типа.
Переменные модифицируются именами, которые
им присваивает программист.
Переменные, хранящие число или цепочку
знаков, называются простыми переменными.
Кроме них можно также применять так назы-
ваемые табличные переменные (массивы), но
они должны быть объявленны инструкцией
DIM. Допускаются как числовые массивы, так
и символьные. Элементом числовой таблицы
является число, а символьной - единичный
символ с кодом от 0 до 255. Операторы зна-
ковых массивов могут использоваться как
алфавитно-цифровые переменные постоянной
длины, определенной последним индексом
(размерностью) декларации данного массива.
Число размерностей ограниченно 255. Индек-
сы не могут превышать значение 65535. На
практике эти значения должны быть значи-
тельно меньше из-за допустимых размеров
памяти. В объявлении массива дается только
верхняя граница индекса. За нижнюю границу
всегда принимается 1.
3. 3. Имена
Одно из неудобств ZX-Бейсика, это огра-
ничения в определении имен используемых
переменных. Только простые числовые пере-
менные могут быть любой последовательнос-
тью букв, цифр и пробелов. Первым символом
имени должна быть литера.
Все остальные переменные должны иметь
однобуквенные имена, в том числе и пере-
менные, управляющие циклами (FOR...
NEXT).
Текстовые переменные отличаются от чис-
ловых знаком $, размещенным после литеры.
Это также касается названий функций, опре-
деленных пользователем с помощью директивы
DEF FN и ее аргументов.
Для задания имен в программе можно ис-
пользовать как малые, так и большие лите-
ры. ZX-SPECTRUM автоматически заменяет
большие литеры на малые. Все пробелы игно-
рируются.
Ограничение использования имен частично
компенсируется возможностью использования
одной и той же литеры как имени переменных
различных типов. Естественное требование
при этом: текстовая переменная не должна
помечаться тем же символом, что и знаковый
массив. Например, литера A в программе мо-
жет означать:
A - числовая или управляющая перемен-
ная;
A$ или A$(I, J) - текстовая переменная
или знаковый массив;
A(I) - числовой массив;
FN A... - функция с числовым значе-
нием;
FN A$... - функция с текстовым значе-
нием;
DEF FN A$(A, A$,...) - параметры в оп-
ределении функции.
Все это не приводит к неоднозначному
толкованию этих имен.
3. 4. Выражения
Выражения в ZX-Бейсике строятся из пос-
тоянных, переменных, операторов, функций,
а также скобок. Последовательность выпол-
нения действий в выражении определяют
круглые скобки и приоритеты отдельных опе-
раций. Ниже рассмотрены все допустимые в
ZX-Бейсике операции в последовательности
их приоритетов.
3. 4. 1 Выделение фрагмента текста
Операция может быть выполнена над це-
почками, текстовыми переменными, а также
знаковыми массивами. Для цепочек и пере-
менных, параметры, определяющие извлекае-
мый фрагмент, должны записываться в круг-
лых скобках. Для массивов эти данные раз-
мещают в поле последнего индекса или, при
его отсутствии, в отдельных скобках, ана-
логично простым переменным. Эти параметры
могут быть представленны:
- отсутствовать, изменению не подвер-
гать;
(K) - арифметическое выражение, резуль-
тат - единичный символ, находящийся на К-й
позиции текста;
(K TO M) - арифметическое выражение с
ключевым словом "TO", результат - фрагмент
текста, включающий символы от K-го до M-го
включительно. Если K>M>0, результат
- пустая цепочка, а если текст короче
M, сигнализируется ошибка. Например, при
выполнении программы:
10 LET A$="ТЕКСТ"
20 DIM B$(2, 3)
30 LET B$(1) ="ABC"
40 LET B$(2) ="XYZ"
получаем:
A$=A$() =A$(TO) =A$(1 TO 5) ="ТЕКСТ"
A$(1) =A$(TO 1) =A$(1 TO 1) ="Т"
A$(3 TO 3) =A$(3) =A$(5-2) ="K"
A$(TO 2) =A$(1 TO 2) ="ТЕ"
A$(3 TO) =A$(3 TO 5) ="КСТ"
A$(2 TO 4) ="ЕКС"
B$(1) =B$(1,)=B$(1)()=B$(1,TO)=
=B$(1)(TO) =B$(1, 1 TO 3)=
=B$(1)( 1 TO 3) ="ABC"
B$(2, 2) =B$(2)( 2) =B$(2, 2 TO 2) =
=B$(2)( 2TO2) ="Y".
В других диалектах Бейсика подобную
роль выполняют функции:
LEFT(A$, N) = A$(TO N)
RIGHT(A$, N) = A$(N TO)
MID(A$, K, M) = A$(K TO M)
TL(A$) = A$(2 TO)
3. 4. 2 Возведение в степень
Аргументами операций возведения в сте-
пень являются вещественные числа. Основа-
ние всегда должно быть положительным чис-
лом. Следует помнить, что A^B рассчиты-
вается как EXP(B*LN(A)), поэтому A^2 будет
вычислятся дольше, чем A*A.
3. 4. 3 Минус как знак числа (-)
Аргументом этой операции всегда являет-
ся число. Результатом - то же число с про-
тивоположным знаком. Минус как знак числа
следует отличать от обозначаемой тем же
символом операции вычитания. Высокий прио-
ритет этой операции позволяет написать
A*-B, что интерпретируется как A*(-B). В
иных диалектах Бейсика употребление двух
операций подряд не допускается.
3. 4. 4 Умножение и деление (*, /)
Умножение и деление арифметически вы-
полняются в той же последовательности, в
какой встречаются в выражении. Знаки умно-
жения опускать нельзя. Умножение выпол-
няется компьютером быстрее чем деление,
следовательно лучше писать A*.5 вместо
A/2.
3. 4. 5 Сложение и вычитание (+, -)
Для числовых аргументов эти символы оз-
начают сложение и вычитание. Обе операции
имеют одинаковый приоритет и выполняются в
очередности появления.
Плюс в применении к текстовым констан-
там и переменным дает текст, который скла-
дывается из символов первого и, добавлен-
ных к его концу, символов второго. В отли-
чие от сложения чисел свойство перестанов-
ки здесь не выполняется.
3. 4. 6 Знаки отношений ( =, <, >, <=,
>=, <>)
Это двухаргументные операции сравнения
одного типа. Все они имеют одинаковый
приоритет и означают отношения: РАВНО,
МЕНЬШЕ, БОЛЬШЕ, МЕНЬШЕ ИЛИ РАВНО, БОЛЬШЕ
ИЛИ РАВНО, НЕ РАВНО. Результатом является
число 1, если отношение соблюдается и 0,
если нет. Результаты проверки отношений
могут быть использованы в арифметических
выражениях как обычные числа.
Как пример разберем следующую проблему:
имеем в программе числовой массив B, объ-
явленный инструкцией DIM B(100). Необхо-
димо определить сколько элементов этого
массива больше 7. Проще всего этого можно
добиться командами:
LET X=0
FOR I=1 TO 100
LET X=X+(B(I)>7): NEXT I
После выполнения этих команд переменная
X будет содержать искомое число.
Эти же операторы применяются к тексто-
вым переменным и константам. Результат
операции сравнения последовательности сим-
волов определяется лексикографическим по-
рядком. Наименьший код у пустого текста.
Сравнивая поочередно символ за символом
ищется первое место в котором обе последо-
вательности отличаются. За меньший прини-
мается тот текст, в котором первый отли-
чающийся символ имеет меньший код. Напри-
мер, истинны следующие отношения:
"" < "TEKST" < "TZ" < "TZ0"
3. 4. 7 Логическое отрицание (NOT)
Это операция логического отрицания зна-
чения числового выражения, являющегося ее
аргументом, которое рассматривается как
логическая величина.
| 0, если X<>0
NOT X = |
| 1, если X=0
Помните, что логические выражения типа
(A>B) OR (C=D) компьютер трактует как чис-
ловые выражения.
3. 4. 8 Логическое И (AND)
Логическое И - двухаргументная опера-
ция. Это весьма полезная операция, приме-
нение которой выходит далеко за расчет ло-
гических выражений. Первым аргументом опе-
рации AND может быть как числовое, так и
алфавитно-числовое выражение. Вторым долж-
но быть только числовое. Ниже дано опреде-
ление логического И, как его понимает
ZX-Бейсик:
| X, если Y<>0
X AND Y = |
| 0, если Y=0
| F, если Y<>0
F AND Y = |
| "", если Y=0
Определение это может показаться странным
и не связанным с тем, что мы привыкли счи-
тать логическим И. Обратим внимание, что
если оператор AND будет находиться между
двумя логическими выражениями, то 1 будет
его результатом тогда и только тогда, ког-
да оба эти выражения будут истины. Дос-
тоинство такого определения операции AND
проявляется ниже в примерах. Допустим, что
переменной MAKSIMUM мы хотим присвоить
значение максимального из чисел A и B. Для
этого достаточно одной инструкции:
LET MAKSIMUM = (A AND A>B) +(B AND
A<=B)
Скобки в этом выражении обязательны
ввиду высокого приоритета операции "+".
Еще более наглядные результаты можно полу-
чить работая с текстами. Следующая прог-
рамма распознает пол пользователя по его
имени:
10 PRINT "СООБЩИ СВОЕ ИМЯ" : A$
20 PRINT "ПРИВЕТ ПАН"+("И" AND A$(LEN
A$) ="A")
Ком. Ред.: книга была переведена с польс-
кого.
Не распологая операцией AND такого ти-
па, необходимо было бы многократно исполь-
зовать инструкции IF... THEN, а также
GOTO.. .
3. 4. 9 Логическое сложение (OR)
Операция OR - двухаргументная. Оба ар-
гумента должны быть числовыми выражениями.
Действие этой операции следующее:
| 1, если Y<>0
X OR Y = |
| X, если Y =0
Применение OR вне логических выражений
значительно реже чем AND. Например, инст-
рукцию, рассчитывающую максимум из двух
чисел можно записать в следующей форме:
LET MAKSIMUM = A*(0 OR A>B) +B*(0 OR
A<=B).
3. 5 Функции
ZX-Бейсик содержит набор стандартных
функций для математических расчетов, опе-
раций над знаковыми последовательностями,
а также для опроса экрана и клавиатуры.
За исключением функций ATTR, POINT и
SCREEN$ аргументы, являющиеся константами
или единичными переменными (простыми или
массивами), не требуется заключать в скоб-
ки.
ABS X - Абсолютная величина числа X.
ACS X - Арккосинус X (в радианах). Если
X не относится к диапазону [-1,1], сигна-
лизируется ошибка A (Ошибочный аргумент).
ASN X - Арксинус X (в радианах). Огра-
ничение на использование такое же как и у
ACS.
ATN X - Арктангенс X (в радианах).
ATTR (K, M) - Задание аттрибутов в K-м
операторе, и M-й колонке. Способ кодирова-
ния аттрибутов описан в главе "Использова-
ние памяти". Если параметры не находятся в
диапазонах 0<=K<23 и 0<=M<=31 сигнализи-
руется ошибка B (превышение допустимого
значения).
BIN - Преобразование двоичного числа
без знака (максимально 16 цифр) в десятич-
ное (на экране), либо в форму принятую в
ZX-SPECTRUM (в памяти). ZX-Бейсик не имеет
функции, осуществляющей обратное преобра-
зование десятичного числа в двоичное.
CHR$ K - Замена числа на соответствую-
щие символы ASCII, или управляющий символ,
если K не относится к диапазону [0, 255]
сигнализируется ошибка B.
CODE F - Замена символов ASCII на чис-
ло. Аргументом является любое алфавитно
-цифровое выражение, а значением функции
является код первого символа этого выраже-
ния или 0, если аргумент пустая цепочка.
COS X - Косинус (X в радианах).
EXP X - Функция e^x.
IN K - Опрос портов процессора. Соот-
ветствует двум инструкциям ассемблера
процессора Z80:
LD BC, K , а также
IN A,(C).
Значением функции IN является целое
число в диапазоне [0, 255]. Это единствен-
ная инструкция, применение которой может
привести к тому, что Ваша программа не
будет выполнятся на других экземплярах
ZX-SPECTRUM! Применение IN к чтению с кла-
виатуры: каждый ряд клавиш разделен на
две группы по пять и каждая пятерка отно-
сится к определенному порту (или буферу,
как кто называет):
_____________________________________
| | |
| | НОМЕР БУФЕРА |
| КЛАВИША |---------------------|
| | 10-ный | 16-ричный |
|---------------|---------|-----------|
| CS ... V | 65276 | #FEFE |
| A ... G | 65022 | #FDFE |
| Q ... T | 64510 | #FBFE |
| 1 ... 5 | 63486 | #F7FE |
| 0 ... 6 | 61438 | #EFFE |
| P ... Y | 57342 | #DFFE |
| ENTER ... H | 49150 | #BFFE |
| SPACE ... B | 32766 | #7FFE |
|_______________|_________|___________|
Пять младших битов в данном буфере сиг-
нализируют какая клавиша нажата (0 -нажа-
та, 1 -отжата). Трудности возникают с тре-
мя старшими битами. В 1-й версии ZX-SPEC-
TRUM (самой старой) они всегда равны 1.
Cледовательно 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 и C. Если
нажато несколько клавиш или не нажато ни
одной, то значением INKEY$ будет пустая
цепочка. Эта функция не ждет нажатия кла-
виши.
INT X - Целая часть числа. Действитель-
ное число округляется до ближайшего целого
не превышающего X. Например:
INT 3.1=INT 3.9=3, INT -5.1=-6.
LEN F - Длина цепочки знаков.
LN X - Натуральный логарифм от 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)*75 MOD 65537)
-1 (X MOD Y: остаток от деления X на Y).
Таким образом генерируется последователь-
ность в пределах 65536. Переменной SEED
можно задавать первоначальное значение ин-
струкцией RANDOMIZE K.
SCREEN$ (K, M) - Распознает знак на эк-
ране. Эта функция на основании формы опре-
деляет символ, выведенный на экран в пере-
сечение K-й строки и M-й колонки. Распоз-
наются только символы с кодами от 32 до
127. В случае не распознования знака, зна-
чением функции является пустой текст.
Координаты должны быть в диапазонах
0<=K<=23 и 0<=M<=31.
SGN X - Знак числа. Значением функции
являются числа -1, 0, 1 в зависимости от
знака аргумента.
SIN X - Синус (X в радианах).
SQR X - Квадратный корень из X. Если
X<0 сигнализируется ошибка A.
STR$ X - Замена числа на цепочку зна-
ков. Эта функция заменяет двоичное предс-
тавление числа на символьное, которое мо-
жет быть представленно на экране.
TAN X - Тангенс (X в радианах). X не
должен быть кратен PI/2.
USR - Работа этой функции зависит от
типа аргумента. Ее вызов с числовым аргу-
ментом (USR K) приводит в действие машин-
ный код с адреса K. После ее выполнения и
возврата управления Бейсику, значением
функции является содержимое пары регистров
BC. При вызове функции с текстовым выраже-
нием (USR F), где F содержит малую или
большую литеру от A до U включительно,
значением функции является адрес в области
UDG, начиная с которого хранятся 8 байт,
определяющих вид графического символа,
определенного пользователем и получаемого
в режиме G путем нажатия клавиши с соот-
ветствующей литерой.
VAL F - Рассчитывает значение числового
выражения, представленного в символьной
форме. Весьма важная функция с разнообраз-
ными приложениями. Если выражение F не
представляет верного (для Бейсика) число-
вого выражения, сигнализируется ошибка C.
В ходе расчета могут возникать и другие
ошибки, зависящие от вида выражения.
VAL$ F - Определяет значение текстового
выражения, представленного в символьной
форме. Область применения меньше чем у
VAL. Трудно найти ситуации, в которых ее
применение необходимо, кроме вывода текс-
товых переменных с именами, заранее неиз-
вестными, определяемыми только в процессе
выполнения программы. Допустим, что зна-
чением переменной A$ является литера,
определяющая имя алфавитно-цифровой пере-
менной. Не располагая этой функцией мы
имели бы значительные трудности при распе-
чатке этой переменной. PRINT VAL$(A$+"$").
К сожалению не все функции выполняются
в полном соответствии с замыслами авторов
интерпретатора ZX-Бейсик. В главе "Ошибки
системы" мы приводим известные неточности
в выполнении функций SCREEN$, STR$ и USR.
3.6 Инструкции ZX-Бейсика
ZX-Бейсик представляет в наше распоря-
жение 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. Эти символы можно ввести как в
текст программы, так и в текстовые
константы, нажимая в расширенном режиме
(курсор E) клавишу <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 - Позволяет размещать в тексте
программы списки данных. В списке можно
размещать любые выражения:
100 DATA SIN X+COS X+1, "ЗНАЧЕНИЕ"
+ ("ПОЛОЖ." AND Z>0 + ("ОТРИЦ." AND Z<0)
110 READ Z,Z$
Переменная Z примет значение SIN X + COS X
+ 1 рассчитанное для текущих значений X и
Y. Переменная Z$ будет содержать цепочку
"ЗНАЧЕНИЕ ПОЛОЖ." или "ЗНАЧЕНИЕ ОТРИЦ.", в
зависимости от рассчитанного Z. Бессмысле-
но задавать команду DATA с клавиатуры,
т.к. SPECTRUM после проверки синтаксиса
тут же забудет о ней. В программе может
присутствовать любое число инструкций
DATA, размещенные в любом месте.
DEF FN @[$]([@1[$],@2[$],....,@I[$]]) =
E - Определение функции пользователем.
Именем функции может быть только одна ли-
тера, возможно со знаком $. Его использо-
вание определяет тип функции как тексто-
вой. После имени в обязательных скобках
можно задавать список аргументов,разделен-
ных запятыми. Допускается определение бе-
заргументных функций. Имена аргументов
должны быть однолитерными (возможно со
знаком $). Ограничение на число аргумен-
тов: 52 (26 числовых и 26 алфавитно-цифро-
вых). После закрытия скобкой списка пара-
метров и знака "=" следует определение
функции. Им может быть любое выражение со-
ответствующего типа, состоящее из постоян-
ных, переменных, аргументов, стандартных
функций и функций, определенных програм-
мистом. Следует избегать рекурсивного вы-
зова процедур, как косвенно, так и непос-
редственно. SPECTRUM не распознает эту си-
туацию. После заполнения памяти появится
сообщение (1 или 6), или даже дойдет до
краха системы. Инструкцию DEF FN не имеет
смысла задавать с клавиатуры. Зато с кла-
виатуры можно вызывать функции, имеющиеся
в программе. Размещение определений
функций и их вызов не имеет значение. В
случае многократного определения в тексте
программы функций с одинаковыми именами и
типами, действующим определением будет
версия размещенная в строке с наименьшим
номером. Обратим внимание, что в определе-
нии функции могут выступать имена перемен-
ных, используемых в других местах програм-
мы. Единственно: переменные, имеющие имена
идентичные именам параметров, становятся
для функции "невидимыми", а вместо них
выступают значения параметров функции.
DIM @[$](K1,....,KJ) - Объявление
массива. Эта команда резервирует в памяти
место для числового или текстового масси-
ва. Размерность массива ограничена числом
255. Определенные индексы задают верхние
границы, нижней границей всегда является
1. Приказ стирает в памяти существующий
массив с таким же именем того же типа.
Значения, определяющие размерности, должны
быть известны в момент выполнения инструк-
ции DIM, но не обязательно в момент запус-
ка программы. Числовые массивы в момент
определения автоматически заполняются ну-
лями, а текстовые - пробелами. Элементами
знакового массива являются единичные сим-
волы. Такие массивы могут трактоваться как
массивы простых текстовых переменных с
одинаковой, заранее заданной, длиной. Дли-
на эта устанавливается последним заданным
параметром, определяющим массив. Обра-
щаться к массиву знаков как к списку прос-
тых текстовых переменных следует при опус-
кании последнего индекса. Если в программе
объявлено:
DIM A$(10): DIM B$(5,20),
то A$=A$() является алфавитно-цифровой пе-
ременной с длиной 10, а B$(I)=B$(I,) явля-
ется пятью переменными с длиной 20. Если
LET A$="ARA",
то длина A$
тоже 20 символов, нехватающие символы ав-
томатически дополняются пробелами.
DRAW [C,]K,M[,X] - Эта инструкция
позволяет рисовать отрезки прямых (X опус-
кается или равен 0) и фрагменты дуги ок-
ружности с центральным углом X, выраженном
в радианах. Началом рисунка является пос-
ледняя точка графической инструкции (POLT,
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 @
нет, то выводится сообщение I. Если STEP
опущен, то Z=1. Несмотря на то, что
ZX-Бейсик формально не отличает чисел с
плавающей запятой от целых, для целых 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 и т.д..
INPUT ...- Позволяет во время выполне-
ния программы вводить с клавиатуры данные
для указанных в списке переменных. Эта ко-
манда также позволяет ввод в нижнюю часть
экрана. Надпись сохраняется лишь на время
ввода. После ключевого слова 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-той строке и 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-Бейсик с K-ой строки.
Если K опущен, то принимается значение
K=0. Данная команда устанавливает указа-
тель текущей строки в K, делая ее доступ-
ной для редактирования. Вывод всегда про-
изводится до конца текста программы по 22
строки (см. PRINT). Прервать его можно
после появления в нижней части экрана воп-
роса: SCROLL ? - нажатием одной из нижних
клавиш: BREAK, STOP или N.
LLIST [K] -Инструкция аналогична LIST,
но печать производится на подключенном
принтере. Когда принтера нет, LLIST только
устанавливает указатель текущей строки на
строке K. Во время печати программы оста-
навливается таймер (системные переменные
FRAMES не модифицируются).
LOAD ... - SPECTRUM может считывать с
магнитофона различные типы данных. LOAD F
вызывает считывание с кассеты программы на
языке Бейсик, записанной на ленте как на-
бор с названием F. Все другие наборы дан-
ных на кассете игнорируются. Вместо полно-
го имени отыскиваемого набора можно дать
пустую цепочку символов: LOAD "". Тогда
будет считан первый найденный набор данных
на языке Бейсик независимо от его имени.
После отыскания на ленте необходимого бло-
ка, находящаяся в памяти программа и пере-
менные удаляются (модифицируются соот-
ветствующие системные переменные и лишь
незначительное число ячеек памяти меняет
свое значение) и подготавливается место
для новой программы. Доступ к удаленным
данным для системы невозможен.
LOAD F DATE @[S][()] - Считывает число-
вой или текстовый массив и размещает его в
области переменных под именем @, удаляя
перед этим массив с тем же названием и тем
же типом данных. @ должна иметь имя, под
которым выступал данный массив перед за-
писью на кассету. Размерность массивов не
задается, но скобки обязательны. Как
текстовые массивы можно считывать и запи-
сывать простые переменные этого типа.
LOAD F CODE [K[,N]] - Форма оператора,
позволяющая считывать наборы байтов без
определения их структуры. Параметр K гово-
рит, по какому адресу должен быть записан
в память считываемый блок, а N определяет
его длину. Если эти параметры опустить, то
набор будет считан на то же самое место, с
которого был сброшен на ленту. Эта
инструкция не проверяет, может ли считыва-
емый блок уничтожить жизненно важную для
системы информацию, и беззаботно заполняет
соответствующие области памяти новой ин-
формацией. Задание значения параметра N
меньше, чем фактическая длина набора на
ленте, сигнализируется сообщением R, а
следовательно, этой инструкцией нельзя чи-
тать только начальные фрагменты блоков
(разве что выключая магнитофон в процессе
считывания).
LOAD F SCREEN$ - Является особым случа-
ем LOAD F CODE и отвечает точно LOAD F
CODE 16384,6912 считывает экран вместе с
атрибутами. После считывания данных и
программ с кассеты возможны 2 рода ошибок.
Технические проблемы сигнализируются сооб-
щением R. При считывании слишком длинных
блоков (частный случай, когда RAMTOP уста-
новлен слишком низко) появляется сообщение
4.
LPRINT...- Инструкция работает как
PRINT, но данные посылаются на принтер.
Когда принтера нет, инструкция игнорирует-
ся. Помещенные в список LPRINT определите-
ли цветов PAPER, INC, FLASH, BRIGHT будут
игнорироваться. Разделители, а также TAB
действуют обычным способом. В AT первый
параметр (номер строки) опускается. Печать
осуществляется с помощью буфера длиной 32
знака (256 байт). Печать фактически насту-
пает после наполнения буфера, команды пе-
рехода к новой строке, а также в момент
обычного завершения программы. После пре-
рывания программы в случае ошибки или вме-
шательства пользователя печать осуществля-
ется нажатием клавиши <ENTER>.
MERGE F - Считывание программы на Бей-
сике с кассетной ленты и присоединение ее
к уже существующей в памяти. Строки, номе-
ра которых в обеих программах перекрывают-
ся, заменяются новыми. Так же как и пере-
менные с одинаковыми именами. Оставшиеся
строки и переменные заносятся в соот-
ветствующую область памяти. Это позволяет
создавать библиотеки подпрограмм для пос-
ледующего их использования. Действие
инструкции основывается на считывании все-
го блока в рабочую область и только после
этого старые и новые программы объединяют-
ся. При длинных программах этот процесс
может длится несколько минут. Директива
может быть применена даже когда в памяти
ничего нет. Отличается от LOAD F значи-
тельно долгим временем выполнения и тем,
что не запускает программу даже если она
была записана SAVE F LINE K (что очень
ценно для пиратов!). Вместо имени можно
использовать пустой текст.
MOVE - Команда действует только при на-
личии ZX-ИНТЕРФЕЙСА-1.
NEW - Инструкция действует практически
как отключение питания. Инициализирует
систему Бейсик, сохраняя только системные
переменные RAMTOP, PRAM, RASP, PIP, UDG.
Память ниже RAMTOP очищена, а область выше
RAMTOP остается нетронутой.
NEXT @ - Инструкция, замыкающая цикл
(FOR ...). После встречи с NEXT @ ин-
терпретатор отыскивает управляющую пере-
менную @, увеличивает ее значение на вели-
чину шага и сравнивает с предельным значе-
нием. Если оно еще не превзойдено, то уп-
равление передается к инструкции, следую-
щей за соответствующим FOR. В противном
случае, выполнение программы начнется со
следующей за NEXT @ команды. Если в облас-
ти переменных не найдется такая числовая
переменная @, то это сигнализируется сооб-
щением 2. Если же эта переменная не явля-
ется управляющей - сообщением 1. Одновре-
менно может быть организовано максимум 26
циклов. Управляющие переменные могут быть
использованы как внутри цикла, так и вне
его как обычные числовые переменные. После
открытия цикла нельзя модифицировать ни
предельного значения, ни шага. Не су-
ществует ограничения на взаимное располо-
жение циклов. Например, конструкция, при-
веденная ниже, недопустимая в других вер-
сиях Бейсика, будет восприниматься ZX-Бей-
сиком, как правильная конструкция:
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-тый поток к ука-
занному каналу (см.главу "Каналы и пото-
ки"). "Голый" SPECTRUM (без внешних
устройств, а конкретно без ZX-ИНТЕРФЕЙ-
СА-1) распознает только каналы
"S","K","P","s","k","p". Нельзя использо-
вать потоки 0...3, остальные 4...15 нахо-
дятся в распоряжении пользователя.
OUT M,N - М должно быть числом из диа-
пазона 0...65535, N - из диапазона
-255...255, при этом отрицательные числа
будут автоматически увеличиваться на 256
(следовательно OUT M,-3 это то же самое,
что OUT M,253). Эта инструкция позволяет с
уровня Бейсика посылать информацию в порты
вывода процессора и может применяться для
работы с внешними устройствами. Эта
инструкция аналог команд Ассемблера:
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 определяет задержку в 50-х
долях секунды. Нажатие любой клавиши пре-
рывает паузу независимо от пройденного
времени. Значение K=0 обозначает останов,
продолжающийся до нажатия любой из клавиш
(см.главу "Ошибки системы").
PLOT [E,]K,M - Рисование единичной точ-
ки с координатами 0<=ABS K <=255 и 0<=ABS
M <=175 на экране. Начало координат поме-
щено в левом нижнем углу, выше 2-х строк,
зарезервированных для системных сообщений.
Эта директива не может применяться в двух
нижних операторах.
POKE K,N - Эта инструкция в ячейку с
адресом 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
модифицирует соответствующую системную пе-
ременную DATADO, помнящую какое из выраже-
ний списка DATA было считано последним.
Попытка чтения уже несуществующих данных
сигнализируется сообщением E.
REM - Вставка комментариев. После слова
REM можно разместить любую последова-
тельность знаков (за исключение символа с
кодом 13), которая при выполнении будет
игнорироваться.
RESTORE [K] - Эта инструкция устанавли-
вает системный указатель на первое выраже-
ние в списке DATA в строке с номером K или
первым большем. Если K опущен, то по умол-
чанию принимается значение 0. Перед новым
запуском программы инструкцией GO TO обя-
зательно необходимо использовать директиву
RESTORE (если в этой программе есть опера-
торы READ).
RETURN - Возврат из подпрограммы.
RUN [K] - Запуск программы на Бейсике.
Выполнение программы начинается со строки
K или, если K опущен с начала программы.
Перед запуском программы RUN автоматически
выполняет команду CLEAR, что соответствует
уничтожению всех переменных.
SAVE ... - Инструкция, обратная LOAD. С
ее помощью на кассету записывают программу
на Бейсике, числовые или знаковые массивы,
а также последовательности байтов для
уточнения их структуры. Форма команды та-
кая же, как у LOAD с той разницей, что
нельзя опускать ни одного параметра. Имя,
под которым данный блок должен быть запи-
сан на ленту, должно быть непустой после-
довательностью знаков длиной, не превышаю-
щей 10. При записи программы на Бейсике
после имени можно поместить LINE K. Запи-
санная таким образом программа, после счи-
тывания будет автоматически запускаться со
строки с номером K.
STOP - Останов программы. Программа мо-
жет быть продолжена нажатием клавиши
<CONTINUE>.
VERIFY ... - Форма представления этой
инструкции аналогична инструкции LOAD ...
. Однако ничего в компьютере не считывает-
ся, а только проверяется, совпадает ли со-
держимое соответствующих областей памяти с
тем, что записано на кассете. Все выявлен-
ные несоответствия сигнализируются сообще-
нием R.
3.7 Управляющие символы
Среди символов, используемых в
ZX-SPECTRUM, есть так называемые управляю-
щие символы. Они имеют коды меньше 32
(причем не все коды используются). Приме-
нение их на уровне ZX-Бейсика ограничено,
так как те же самые эффекты можно получить
с помощью других инструкций. Однако, они
незаменимы для программирования в машинных
кодах. Ниже приведены те из них, ввод ко-
торых дает какой-либо эффект:
CHR$ 6 - Этот символ может использо-
ваться вместо запятой как разделитель
списков INPUT и PRINT.
CHR$ 8 - Вызывает сдвиг курсора на одно
поле влево. CHR$ 9 - Смотрите главу "Ошиб-
ки системы".
CHR$ 15- Это символ клавиши <ENTER>. В
списках INPUT и PRINT может применяться
вместо единичного апострофа. В программах
ZX-Бейсика он помещается в конце каждой
строки.
CHR$ 16- Ключевое слово INK.
CHR$ 17- Ключевое слово PAPER.
CHR$ 18- Ключевое слово FLASH.
CHR$ 19- Ключевое слово BRIGHT.
CHR$ 20- Ключевое слово INVERSE.
CHR$ 21- Ключевое слово OVER.
CHR$ 22- Ключевое слово AT.
CHR$ 23- Ключевое слово TAB.
Символы от CHR$ 16 до CHR$ 21 должны
набираться в форме CHR$ K + CHR$ M или
CHR$ K; CHR$ M, где M есть значение соот-
ветствующего данной инструкции параметра.
После символов CHR$ 22 и CHR$ 23 должны
следовать 2 параметра. Для AT это понятно,
а для TAB единственный аргумент представ-
ляется двумя байтами. На практике значение
второго байта (старшего) не имеет значе-
ния, так как это число берется по модулю
32.
Оставшиеся управляющие символы ис-
пользуются редактором в процессе считыва-
ния клавиатуры и не имеет практического
значения для программистов. Во время выво-
да последовательности знаков, символы не
описанные выше, с кодами меньше 32 заменя-
ются вопростительным знаком.
3.8 Системные сообщения.
Каждая ошибка, обнаруженная компьютером
в программе, вызывает останов и вызов со-
ответствующего сообщения в нижней части
экрана. Эти сообщения имеют одинаковую
стандартную форму:
НОМЕР ТЕКСТ СООБЩЕНИЯ K:M
Номер - это цифра от 0 до 9 или литера от
A до R. Текст сообщает по-английски причи-
ну передачи управления в редактор. Числа
K:M информируют в какой строке какой
инструкцией вызвано данное сообщение. K =
0 относится, обычно, к командам, задавае-
мым непосредственно с клавиатуры.
0 OK
Нормальное завершение команд, выданных
с клавиатуры, конец программы, либо пере-
ход с помощью GO TO на строку с наибольшим
номером. При обслуживании такой "ошибки"
не модифицируются системные переменные
OLDPPC и OSPPC, в результате чего команда
CONTINUE, выданная после такого сообщения
заново вызовет выполнение последней
инструкции в программе (это не относится к
директивам с клавиатуры).
1 NEXT without FOR
Интерпретатор встретил инструкцию NEXT
@. В области переменных нет управляющей
переменной с данном именем @, но есть
простая числовая переменная @. Если бы не
было и такой, то в аналогичной ситуации
было бы выведено сообщение 2. Наиболее
частой причиной ошибок является отсутствие
соответствующей инструкции FOR или переход
внутрь цикла.
2 Variable not found
Попытка использования переменной, не
существующей в области переменных, а сле-
довательно такой, которой еще не придано
никакого значения с помощью
LET,READ,INPUT,FOR или DIM.
3 Subscript wrong
Индексы массивов вышли за предельное
значение (но поместились в диапазон
0...65535), или задано их неправильное
число, а также попытка присвоения символов
простой алфавитно-числовой переменной, с
размерностью больше, чем длина переменной.
Если индексы превзойдут значения 65535, то
в аналогичной ситуации появится сообщение
B.
4 Out of memory
Не хватает места в памяти для выполне-
ния требуемой акции. Чаще всего бывает при
выполнении инструкций LET, READ, INPUT,
DIM, GOSUB, LOAD, MERGE, попытки рекурсив-
ного обращения к функции. Вообще, причиной
является слишком низкое положение RAMTOP.
Для вывода из аварийной ситуации может
оказаться необходимым удаление какой-либо
строки из программы, так, чтобы получить
место, необходимое для выполнения дирек-
тив, задаваемых с клавиатуры.
5 Out of screen
INPUT пытается занять более 22 строк
или параметры AT указывают поле за 22
верхними строками экрана.
6 Nomber too big
Во время проводимых вычислений была по-
пытка выйти за 1.7E38. Этим сообщением за-
вершаются попытки деления на ноль или вы-
числения TAN (PI/2).
7 RETURN without GOSUB
Попытка выполнить RETURN без пред-
шествующего GOSUB, а также, когда число
выполняемых GOSUB меньше числа, выполнен-
ных RETURN.
8 End of file
Это сообщение может появиться при нали-
чии ZX-ИНТЕФЕЙСА-1.
9 STOP statement
Выполнена инструкция STOP.
A Invalid argument
Задан неверный аргумент стандартной
функции, к примеру, попытка вычислить SQR
или LN для отрицательного числа, или алфа-
витно-цифровой аргумент функции USR не яв-
ляется одной верной литерой. Эта ошибка не
относится к аргументам функций, определен-
ных программистом.
B Integer out of range
Целочисленный параметр инструкции пре-
высил предельное значение.
C Nonsens in BASIC
Анализируемый текст некорректен с точки
зрения правил языка. Чаще всего появляет-
ся, когда аргументы функции VAL или VAL$
не представляют верной формы выражения.
Это сообщение появится также при попытке
выполнения команд нераспознанных системой,
например, считана и запущена программа,
работающая с MICRODRIVE, а ZX-ИНТЕФЕЙС-1
не подключен.
D BREAK-CONT repeats
Работа программы прервана во время вы-
полнения инструкций, связанных с внешними
устройствами (принтер, магнитофон или те-
левизор - после вопроса SCROLL ? нажата
<BREAK>, <STOP> или <N>). Введенная с кла-
виатуры директива CONTINUE повторит еще
раз прерванную команду.
E Out of DATA
Попытка читать данные из списка DATA,
если он исчерпан.
F Invalid file name
Попытка записать на кассету набор без
имени или с именем длинее 10 символов.
G No room for line
Нехватка места в памяти для очередной
сборки программы, если она слишком длинная
или слишком низко установлен RAMTOP.
H Stop in INPUT
Программа была остановлена во время вы-
полнения инструкции INPUT.
I FOR without NEXT
Инициализированный цикл не может быть
выполнен ни разу (например, FOR I=1 TO 0),
а в программе нет инструкции NEXT.
J Invalid I/O device
Ошибка возможна при подключении ZX-ИН-
ТЕРФЕЙСА-1.
K Invalid colour
Аргумент инструкции INK, PAPER, BORDER,
BRIGHT, FLASH, OVER или INVERSE вышел за
пределы, определенной для данной инструк-
ции. Это сообщение также может появиться
после ввода символа, управляющего цветом,
если следующий вводимый символ имеет несо-
ответствие с введенным управляющим симво-
лом.
L BREAK into program
Прерывание выполнения программы пользо-
вателем.
M RAMTOP no good
Попытка присвоения системной переменной
RAMTOP слишком малой или слишком большой
величины.
N Statement lost
Попытка выполнения с помощью RETURN,
NEXT или CONTINUE перехода к несуществую-
щей инструкции.
O Invalid stream
Попытка пересылки информации потоком до
подключения к какому-нибудь каналу или ка-
налу с номером больше 15.
P FN without DEF
Вызвана инструкция, которая не была оп-
ределена.
Q Parametr error
Рассогласованность количества или типов
аргументов при вызове функций, определен-
ных пользователем.
R Tape loading error
Требуемый набор был найден на кассете,
но по какой-то причине не может быть счи-
тан в компьютер.
Другие статьи номера:
Похожие статьи:
В этот день... 2 ноября