2. ФУНКЦИИ И КОМАНДЫ БЕЙСИКА 2.1. ВВЕДЕНИЕ
Ожидается, что читатели этой книги уже будут иметь некоторые знания о Бейсике "SP".
Эта глава обсуждает команды Бейсика и функции, и постарается прояснить моменты, не освященные детально в двух пособиях, прилагающихся к SP.
Интерпретатор Бейсик для SP распознает 50 различных команд и 33 функции. Каждая из них здесь будет обсуждена подробно. Они будут рассмотрены в алфавитном порядке, так чтобы ссылки на них были проще. Управляющие символы обсуждены в пункте 2.3.
2.2. КОМАНДЫ БЕЙСИКА
ВЕЕР X,Y
По этой команде подается сигнал в динамик. X-длительность в секундах (0...10), Y-высота звукового тона, от среднего "си", в десятичном диапазоне чисел от -60 до +69. X или Y, или оба могут быть выражениями.
Интересно отметить, что ВЕЕР не может быть прерван, поскольку программа, содержащая команду ВЕЕР, не прерывается по клавише BREAK. BREAK возможен только в конце оператора, содержащего команду ВЕЕР.
BORDER M
Имеется 8 возможных цветов, которые могут быть переданы на граничную область (бордюр) TV - экрана. Используются целые числа от 0 до 7, однако допускается -0.5<=М <=7.5, как результат выражения, поскольку М округляется до целого.
По команде BORDER выходной сигнал поступает на порт 254, и это может быть выражено оператором: OUT 254,M (где М=2 даёт красный бордюр). Но OUT и BORDER различны. Цвет, получаемый бордюром по команде OUT -"временный", в то время как BORDER даёт постоянный цвет, хранящийся в системной переменной BORDER (5C48 16-ное). BORDER 2 и ENTER делают бордюр красным. OUT 254,1 и ENTER - бордюр будет голубой временно, а потом опять вернётся красный цвет. Отметим, что BORDER хранит цвет бумаги нижней части TV - экрана.
BRIGHT M
Это первая из команд элемента цвета, все эти команды могут быть использованы либо только как команды в операторе Бейсика (в этом случае действие постоянно), либо включены в оператор печати, и тогда их действие временно. М - может быть выражением, но результат должен быть целым числом 0,1 или 8. При М=0 экран имеет нормальную яркость, при М=1 любая последующая надпись будет сделана на подсветлённой бумаге. Использование BRIGHT 1 и CLS - простой путь сделать всю область экрана яркой. При М=8 "высветленным" будет текст, подлежащий печати. Следующие примеры показывают 4 различных пути, в которых команда цвета, такая как BRIGHT, может быть использована.
10 BRIGHT 1: PRINT "BRIGHT-": BRIGHT 0: PRINT "NORMAL"
где два изменения яркости имеют постоянный характер.
20 PRINT BRIGHT 1;"BRIGHT-"; BRIGHT 0;"NORMAL" - изменения яркости временны в течение оператора. 30 PRINT CHR$ 19+CHR$ 1;"BRIGHT-"; CHR$ 19+CHR$ 0;"NORMAL" - команда в CHR$ эквивалентна. 40 LET A$=CHR$ 19+CHR$ 1: LET B$=CHR$ 19+CHR$ 0: PRINT A$;"BRIGHT-";B$;"NORMAL" -
помещает команду цвета в строку переменных.
Также возможно использовать последовательность набора: ■S режим курсора "Е и клавиша 9 для получения BRIGHT 1 S режим курсора "Е" и клавиша 8 для получения BRIGHT 0
Этот набор может быть размещен внутри скобок, т.е. между открывающей скобкой и первым символом, или как единственный символ строки.
Например: LET A$="": REM внутри кавычек набрана вышеприведенная последовательность с клавишей "$". Строка A$ будет напечатана как при BRIGHT 1.
CIRCLE X,Y,Z
Эта команда рисует окружность с радиусом Z и с координатами центра X, Y. Z - берётся как абсолютное целое значение, а X, Y используются как плавающие величины. Самая большая окружность при радиусе 88 единиц получается оператором CIRCLE 127.5,87.5,88, а окружность 0-вым радиусом представляет точку. Любая команда цвета может быть включена в оператор CIRCLE, и её влияние всегда будет временным. По некоторым параметрам команда медленна и неточна, но очень полезна.
CLEAR; CLEAR N
В системе SP имеется такое большое количество памяти RAM, что использование команды CLEAR само по себе вряд ли будет полезным. Однако расширение команды возможностью перемещать указатель RAMTOP делает её очень сильной. RAMTOP указывает на верхнюю границу системы Бейсик, и содержимое адресов ниже RAMTOP
_Функции и команды БЕЙСИКА_
может изменяться, в то время как любое содержимое выше RAMTOP остается неизменным, даже после выполнения команды NEW. Нижняя граница для N возможна не менее чем 23821. Иначе SP выдает звуковой сигнал. Это говорит о том, что разрешенного RAM не хватает на задачу. Верхней границей N является для системы 16K 32767, а для систем 48K 65535. Использование CLEAR N с соответствующим значением вызывает перемещение стека GO SUB в область, отведенную для графики пользователя. Поучительно выполнить следующее упражнение: ввести CLEAR 32767 или (65535), изменить курсор на G и вывести литералы с L по U. Нажать на клавишу SPACE и несколько секунд наблюдать изменение графики пользователя, поскольку каждое нажатие клавиши приводит к использованию машинного стека.
CLOSE
Используется с микродрайвом или дисководом. CLS
Это очень простая команда, которая меньше чем за 1/10 секунды выполняет много работы. Команда CLS очищает дисплейный файл. Она зануляет адреса с 16384 по 22527 (4000-57FF) и сбрасывает байты атрибутов по адресам 22528-23295 (5800-5AFF). Байты атрибутов не зануляются, а копируются из системной переменной ATTRP, которая содержит постоянные атрибуты. По команде POKE значение переменной ATTRP, которая помещается по адресу 23693 (5C8D), может быть изменено. В переменной ATTRP бит 7 отвечает за мигание, бит 6 за яркость, биты 35 за цвет бумаги, биты 0-2 за цвет чернил.
CONTINUE
В большинстве требуемых случаев эта команда работает хорошо, но когда пользователь выполнит несколько команд непосредственно, SP зациклится и сможет работать только по клавише BREAK.
Существует 2 основных аспекта команды. 1-й позволяет пользователю использовать в программе Бейсик оператор STOP и тогда не требуется использовать клавишу BREAK. Пользователь в этом случае может проверить переменные, установить переменные и изменить программу Бейсика. Использование операторов STOP и CONTINUE очень облегчает отладку программ.
Второй аспект позволяет повторять выполнение после исправления ошибок. Например, если программа остановилась по ошибке "VARIABLE NOT FOUND ", то переменная может быть определена в непосредственном режиме и оператор заново запущен по команде CONTINUE.
6 системных переменных NEWPPS, NSPPS, PPS, SUBPPS, OLDPPS и OSPPS включаются некоторым образом в выполнение команды CONTINUE.
COPY
Это очень простая команда. Поскольку принтер не управляется SP, верхние 22 строки TV - экрана посылаются на принтер. Команда COPY одна из немногих команд, которые останавливают часы реального времени на время выполнения команды. Это можно видеть по системной переменной FRAMES до, и после использования команды.
DATA E,E...
Эта команда, которая может использоваться только в программных строках, определяет список данных.
Хотя это и упоминается в руководстве, но становится очень ясно, что рассмотрение элементов в операторе DATA как выражений является особенностью, делающей эту команду очень полезной. Более детально см. READ, RESTORE.
DEF FN A(A...Z)=E, DEF FN A$(A...Z)=E
Команда DEF FN очень мощная. Пользователь может определять до 52-ти функций - 26 числовых и 26 строковых. Имена, используемые для функции, должны быть единичного характера (+$ для строк), и они могут быть именами, используемыми где-нибудь как простые переменные. Существует небольшое ограничение на имена аргументов, так как они тоже должны быть ординарными литерами, (+$ для строк). Поэтому может быть не более 52 аргументов.
Выражение, определяемое функцией, может быть любым дающим числовой или строковый результат. Однако рекурсивное использование приводит к неудаче.
DIM (E1...Ek), DIMS (E1...Ek)
Команда DIM удаляет существующий массив с тем же именем и затем устанавливает новый. Числовые массивы зануляются, а в строковые заносится литера пробел. В системе SP вся индексация начинается с 1. Достижение же индексом 0-го значения является ошибкой. Использование в системе SP в строковых массивах строк фиксированной длины, тогда как простая строковая переменная меняет длину, может привести к неудаче. Наиболее просто, используя в определении строкового массива последний индекс, всегда фиксировать длину строки. Эта особенность может быть полезна при установлении формата TV - экрана.
DRAW X,Y, DRAW X,Y,Z
Эта команда рисует линию от текущей позиции (но, не включая её) на расстояние X по горизонтали и Y по вертикали. Если аргумент Z определен, то рисуется дуга вместо прямой линии. Z должно быть определено в радианах, при Z=PI получается полуокружность. При положительных значениях дуги рисуются справа от того места, где была прямая линия, а при отрицательных слева. Любая из команд цвета может быть включена в оператор DRAW, где её влияние будет временным.
ERASE
Используется с микродрайвом или дисководом.
FLASH M
Это вторая команда управления цветом. Когда она используется одна в программе на Бейсике, её влияние постоянно. Но когда используется включением в оператор печати, её влияние временно.
М, как и в BRIGHT, может принимать значения 0,1,8. При М=0 область литер не мигает; при М=1 они мигают, при М=8 сохранится исходная ситуация.
FOR А=Х ТО Y STEP Z
Команда FOR наиболее интересная команда и обычно она плохо понимается, хотя и широко используется.
Задачи, стоящие перед интерпретатором, когда он имеет дело с командой FOR таковы:
1. Удалить любые переменные с тем же именем и любые управляющие переменные с тем же именем.
2. Добавить к существующим переменным новую управляющую переменную. Эта переменная требует 19 адресов памяти. Первый адрес содержит имя переменной. Следующие 5 содержат начальное значение цикла. Следующие 5 байтов конечное значение цикла. Следующие 5 байтов значение приращения. Последние 3 байта содержат информацию о цикле: первые 2 указывают номер строки, в которой записан оператор FOR, а последний -номер оператора в строке, увеличенный на 1. Т.о., после окончания цикла будет выполняться следующий оператор, вне зависимости, находится он в той же строке или нет. Если начальное значение, предельное значение и шаг - целые числа от -65535 до +65535, то операция выполняется на 20% быстрее. Следующая программа демонстрирует содержимое управляющей переменной команды FOR. Заметьте, что оператор FOR в строке 10 устанавливает пустую переменную под именем A, которая в дальнейшем в программе не используется.
10 FOR A=1.6 ТО 2.1 STEP 0.1
20 LET V=PEEK 23627+256*PEEK 23628 -1
30 FOR B=1 TO 19
40 PRINT В, PEEK (V+B)
50 NEXT В
RUN
Добавьте 25 LET V=V+25 и увидите контрольную переменную B. Третье действие, предпринимаемое оператором, является очень специфичным. В SP не существует ошибок, вызванных установлением шага в неправильном направлении. Это значит, что строка, подобная FOR A=2 ТО 0 STEP 1, допустима. Однако это действие приводит к полному игнорированию FOR NEXT-цикла. Это может быть показано изменением продемонстрированной выше программы следующим образом: 10 FOR A=1.6 ТО 2.1 STEP -0.1 50 NEXT A
и программа будет успешно работать, но не будет никакой печати. Это возможность перепрыгивать через целые циклы, может быть и преимуществом. Это позволяет снять ограничения на 0 и недостатком - ожидаемый результат не появляется вообще.
FORMAT
Используется с микродрайвом или дисководом.
GO SUB N
Эта команда приводит к выполнению подпрограммы, которая начинается с номера N или с первого номера этой строки. После выполнения подпрограммы управление возвращается к 1-му оператору в программе после оператора содержащего GO SUB. Следующая программа показывает, что в 16K SP GO SUB стек начинается с адресов 32595-32597. 10 GO SUB 20: STOP
20 FOR A=l TO 3: PRINT A, PEEK (32594+A): NEXT A RUN
Важным свойством Бейсика является то, что он позволяет командам GO SUB и GO ТО делать управляемые переходы. Эта черта недоступна на многих других машинах, хотя обычные команды ON X GO SUB и ON X GO TO действительно позволяют сделать некоторое количество управляемых переходов.
GO TO N
Это очень простая команда. Следующей строкой является строка N или первая строка после N. Переходы могут быть сделаны и к REM операторам, хотя делать это, вероятно, не корректно. Команда GO TO помещает адрес перехода (номер строки) в системные переменные NEWPPS и NSPPS, расположенные в 23618-23620 (5C42-5C44). Переход к операторам, не являющимися первыми в строке, в обычной практике недопустим.
ммы, которая ммы, которая
_Функции и команды БЕЙСИКА_
IF THEN S
В системе SP значение 0 соответствует логическому значению ложь, а любое значение, отличное от 0 -логическому значению истинности. Команда выполняет S и другие операторы в строках, если значение X - истинно. Эта команда работает хорошо, но следующая программа написана, чтобы показать, используя повторное деление, что происходит, когда значения никогда не становятся ложью. Проблема, появляющаяся в этом случае, связана с получением в SP величины 2 10 LET A=1
20 IF NOT A THEN PRINT A: STOP
30 PRINT A
40 LET A=A/2
50 GO TO 20
RUN
И она будет распечатываться больше 5-ти экранов, до тех пор пока она не достигнет значения 2"''™. Если строку 40 поменять на LET A-A*0.5, то значение ложь будет достигнуто.
INK N
Это 3-я из команд элементов цвета. Когда используется самостоятельно, то её действие постоянно, а когда добавляется в оператор печати - временное. Значение N может быть от 0 до 9. 8 основных цветов в SP закодированы от 0 до 7, и это ясно видно на клавиатуре. Использование INK 8 при печати дает цвет, хранившийся в атрибутах. Использование INK 9, однако, немного более сложно: чернила становятся только черными или белыми в зависимости от цвета бумаги. Когда цвет бумаги черный, красный, синий, фиолетовый - цвет чернил белый. Когда зеленый, голубой, желтый или белый - цвет чернил черный. Действие постоянной команды INK состоит: для N=0-7 устанавливаются биты 0-2 переменной ATTRP; для N=8 биты 0-2 переменной MASKP, для N=9 бит 5 PFLAG. Если команда INK имеет временное действие, то устанавливаются соответствующие биты временных системных переменных.
INPUT
Это очень мощная команда, она позволяет набором операторов INPUT совместно с элементами печати добиваться желаемых результатов. Пример:
10 INPUT "NAME PLEASE ",A$; CHR$ 13; "AGE PLEASE";B$ 20 PRINT AT 5,0;"NAME";TAB 7;A$; CHR$ 13;"AGE"; TAB 7;B$
Использование INPUT-LINE позволяет помещать в строковую переменную всю введенную строку.
INVERSE N
Команда управления цветом. Эффект может быть временным или постоянным. При INVERSE 1 цвета чернил и бумаги меняются местами, а при INVERSE 0 - нормальное значение цвета чернил. При постоянном режиме по команде устанавливается бит 5 PFLAG, а при временном бит 4.
LET V=E
Переменная выбрана пользователем, и затем интерпретатор должен определить, является ли переменная простой, должна быть найдена как управляющая переменная FOR.. .NEXT цикла или образует часть массива. Простая переменная может иметь любые существующие значения для определения и распределения нового места. Управляющая переменная и переменная массива будет размещена, но не определена. Далее определяется выражение, которое должно дать величину переменной, вычисляется и копируется в определенное место. Все численные переменные имеют 5 адресов, распределенные для величины. Эта величина затем сохраняется как число с плавающей запятой или целое число. Простые строки имеют динамическую длину, она представляет число адресов, отведенных на простую строку и зависит от количества символов в строке на текущий момент. Все массивы строк имеют фиксированную длину и строка, предназначенная для массива, будет уменьшаться, если она очень длинная и заполняться знаками пробела, если слишком коротка для фиксированной области, отведенной для нее. Пример показывает простой путь, как можно проследить за областью переменной. Пользователю надо ввести ряд переменных для наблюдения.
10 REM ENTER YOUR VARIABLE.
20 LET V=PEEK 23627+256*PEEK 23628
30 PRINT V; PEEK V: LET V=V+1: GO TO 30
следует сделать несколько предложений для строки 10
LET A=0
LET A=9E4
LET A$="AAA"
DIM A(2): LET A(1)=9E4
DIM A$(5): LET A$="1234567"
DIM A$(2,5): LET A$(1)="AAA"
LIST N
Допускает, что величина N=0 до тех пор, пока она не будет определена другим способом. Если строка
_Функции и команды БЕЙСИКА_
существует, то она становится текущей строкой и обозначается курсором. Особенность системы: LIST 49172, например, будет такой же, как LIST 20.
Посылает листинг программы на принтер. N становится текущей строкой.
LOAD
Имеет много различных оттенков и позволяет загружать в программу Бейсик массивы переменных и блоки кодов. Информация (код или программа) записаны на магнитной ленте, содержатся в 2-х частях. 1-я представляет 17-байтовый заголовок, 2-я блок кодов. Каждая из этих частей использует одинаковый формат единичных битов, сопровождаемых звуковым сигналом, который в 2 раза длиннее 0-вых битов.
В SP используется головной маркер (+00 для заголовка и +FF для блока кодов) и завершающий байт четности после заголовка и блока кодов. Блок заголовка разбит на 5 частей:
1. Одиночный байт информации, который равен 0 для программы Бейсик, 1 - для числового массива, 2 - для массивов символов, 3 - для блока кодов.
2. Следующие 10 байтов содержат название файла. Название больше 10 символов не применяется.
3. 2 байта, которые содержат общую длину блока кодов. В случае использования область программы и область переменной содержаться на МЛ.
4. 2 байта, которые для программы содержат начальный номер строки или начало для блока кодов.
5. 2 байта, которые для программы содержат длину области программы. Блок кодов загружается в требуемую область RAM как указано в заголовке.
LPRINT
Вызывает посылку элементов печати на принтер.
MERGE
Загружает программу и её переменные с МЛ. И соединяет с существующей программой и её переменными. Команды выполняют обработку новой программы как блока данных, который должен быть загружен в рабочую область. Далее области программы сравниваются строка за строкой, и новые строки копируются из рабочей области в основную область программы. Область программы переопределяется и расширяется, если необходимо. Поскольку строки соединены, подобная операция соединяет и область переменных.
NEW
Это команда повторного запуска системы без изменения системных переменных RAMTOP, PRAMT, RASP, PIP, UDG. Графика, определенная пользователем, при этом не сбрасывается.
NEXT A
Команда должна рассматриваться как команда, которая выполняет работу в цикле FOR-NEXT, в котором управляемая переменная установлена (см. FOR выше). Этапы, включающие в себя выполнения команды, следующие:
S управляемая переменная расположена в области переменных, и величина STEP добавляется к VALUE, вне зависимости от того, является STEP положительным или отрицательным.
S далее новая VALUE проверяется относительно LIMIT, но здесь следует обратить внимание на знак STEP. Если LIMIT не достигнут, тогда выполняется дальнейшее прохождение. В SP VALUE всегда увеличивается до того как выполняется проверка ограничения, следовательно, конечная VALUE после окончания цикла будет всегда больше, чем LIMIT для положительной STEP и меньше чем LIMIT для отрицательной.
OPEN#
Для использования с микродрайвом.
Однако возможно открывать и закрывать потоки данных следующим образом: используя строку PRINT #5;"WORKS" и она не будет работать до тех пор, пока поток данных не открыт, использованием строки OPEN #5,"S". Строка CLOSE #5 - закрывает поток. Следующие строки показывают ввод с клавиатуры и вывод на экран:
10 OPEN #5,"К" 20 INPUT #5;А$ 30 OPEN #5,"S" 40 PRINT #5;А$
OUT M,N
Команда позволяет посылать сигналы на выходной порт от Бейсика.
В пункте BORDER было показано, как порт 254 управляет цветом бордюра: разные цвета были даны для случаев от N=0 до N=7, в то же время порт 254 может использоваться для управления звуковым динамиком, и следующая программа показывает, как это сделать.
С помощью этой программы можно получить оценку времени, которое требуется для того, чтобы интерпретировать оператор, так как быстрый оператор даст высокий звук, а медленная интерпретация оператора даст ряд щелчков. (Оператор вставьте вместо черточек.)
10 OUT 254,23:--------------------: OUT 254,71: GO TO 10
_Функции и команды БЕЙСИКА_
В программе оператор может быть, например, таким: PRINT, RANDOMIZE, LET A=B или POKE 0,0 в программе OUT 254,23 не используется динамик, а в OUT 254,71 используется. Операция повторяется очень быстро, что даст звук.
OVER N
Команда цвета.
При OVER 1 последовательность печати будет выполняться объединением по команде XOR с уже существующим символом. При выполнении XOR бит перебрасывается - установленный бит сбрасывается и не будет печати, при установке бита будет печать.
При OVER 0 все биты в данной области символа будут напечатаны.
При OVER 1, если символ или строка напечатаны дважды, то они исчезнут, т. е. 10 OVER 1: PRINT "A"; CHR$8;"A" где CHR$8 - шаг назад.
Бит 1 в переменной PFLAG - управляющий флаг OVER.
PAPER N
Команда цвета. Может быть постоянной или временной. Команда может использоваться с N=0-9.
Использование N от 0 до 7 очень простое.
При N=8 устанавливается режим высвечивания, и цвет бумаги области передаваемого символа остается неизменным.
Использование PAPER 9 очень полезно при оформлении заголовков. Команда устанавливает, что цвет бумаги в области будет контрастным по отношению с используемым цветом чернил. Следовательно, при светлых чернилах -зелёный, голубой, желтый, белый - бумага будет чёрной, а при тёмных чернилах - чёрный, синий, красный, фиолетовый - бумага будет белой.
Фактическим действием PAPER является:
для N=8 устанавливается бит 3,4,5 переменной MASKP и для N=9 бит 7 переменной PFLAG, а для N=0-7 биты 3,4,5 переменной ATTRP.
PAUSE N
Эта команда HALT останавливает Z80 на N прерываний. Единственной работой, которая выполняется за время паузы, является опрос клавиатуры. Период паузы закончится после N прерываний или при нажатии клавиш.
PLOT X,Y
Экран представляет собой 256*176 элементов изображения, каждый из которых может управляться отдельно командой PLOT. В обычной работе команда PLOT установит бит RAM, соответствующий биту изображения. Команда делает также этот элемент изображения текущим в системной переменной COORDS, который записывает координаты последнего элемента изображения.
Любой из цветовых элементов может использоваться в команде PLOT, а использование OVER 1 может привести к UPLOT, INVERSE 1 - к NOPLOT.
POKE N,M
Команда позволяет вводить значения по адресам непосредственно в память. М может принимать значения от -255 до +255. Значения от 0 до 255 вводится непосредственно, а к значениям от -255 до -1 прибавляется +256.
PRINT
Команда позволяет выводить на TV - экран. Элементы отделяются друг от друга разделителями : ";" -элементы выводятся подряд, "," - выполняется табуляция к следующей половине строки. Позицию экрана можно также набирать с помощью TAB и AT.
Элементы могут быть элементами цвета, действие которых будет временно, числовыми выражениями или строковыми.
Все элементы управления цвета и управления табуляцией могут быть выполнены использованием соответствующих значений CHR$, и это может быть полезно.
RANDOMIZE N
Команда устанавливает значение системной переменной SEED, расположенной в адресах 23670 и 23671 (5С76-5С77). Если N не задано, то значение для SEED берётся из двух младших байтов FRAMES и может рассматриваться как случайное число. Если N задано, тогда это значение копируется в SEED. Для дальнейшего уточнения работы генератора псевдослучайных чисел см. ниже функцию RND.
READ V1,V2
Команда используется вместе со списком DATA и может рассматриваться как несколько команд LET. Элементы в DATA являются выражениями, а элементы в READ - переменными, которым эти выражения присваиваются.
Сообщения об ошибке появляются, если нет соответствия между переменными и выражениями.
_Функции и команды БЕЙСИКА_
Заметьте, что в оператор READ можно включать неописанные ранее переменные. Системная переменная DATADD, расположенная в адресах 23639 и 23640 (5С57, 5С58), используется для указания в списке DATA. Первоначально указатель устанавливается на адрес начала области программы и сбрасывается в это значение по RUN.
REM
Полезная команда, т.к. позволяет вносить комментарии. Вся строка Бейсика после REM рассматривается как комментарий и не интерпретируется.
RESTORE N
Эта команда используется вместе со списком DATA и относится к одному или нескольким DATA. Если N=0, то переменная DATADD указывает на адрес перед областью программы. Если N определено, то указывает на адрес строки Бейсик с номером N, если она существует или ближайшую после неё. Если N больше чем 9999 (самый большой разрешенный номер строки) или "ушел" за последний номер программы, то DATADD указывает на последний адрес в области программы.
RETURN
По команде извлекается верхнее значение из стека GO SUB. Если обращение корректно, тогда интерпретатор будет выполнять это утверждение следующим. Иначе будет выдано сообщение об ошибке. "RETURN без GO SUB".
RUN N
Позволяет выполнять программы Бейсик. Если N не задано, то будет принято начало с первой строки. Когда N определено, то интерпретатор находит область программы строки с этим номером или первую строку после неё, если строка N не существует. Команда инициирует требуемые указатели путём выполнения RESTORE и CLEAR до интерпретации какой-либо строки.
STOP
По этой команде появляется сообщение об ошибке "STOP". Использование CONTINUE как прямой команды позволит затем продолжать программу от следующего оператора. Как и в ошибочной ситуации, команда передаёт номер ошибки в системную переменную ERRNR, которая располагается по адресу 23610 (5C3A). Номер ошибки всегда меньше на 1, чем код ошибки, который появляется перед сообщением об ошибке.
Поскольку ошибка имеет место, интерпретатор останавливает выполнение программы и переходит на выполнение программы обработки ошибки. Затем номер ошибки передается в ERRNR, выбирается адрес возврата в командный режим (адрес расположен в 4867 (1303)). Этот адрес возврата всегда существует и расположен в 2-х адресах ниже стека GO SUB. Если отсутствуют текущие циклы GO SUB, тогда стек GO SUB будет пустым.
Но так как различные подпрограммы вызываются, адрес возврата опускается в стек и подымается опять, когда программа завершается.
Адрес возврата всегда указывается системной переменной ERRSP, которая расположена в адресах, 23613 и 23614 (5C3D-5C3E).
Заметьте, что команды RUN и GO TO не очищают стек GO SUB, и если программа останавливается без завершения выполнения подпрограммы, тогда ERRSP постепенно указывает все ниже в памяти (на 3 байта для каждой подпрограммы). Однако команда CLEAR восстанавливает ERRSP.
VERIFY
Команда позволяет сверить с оригиналом любую программу, выведенную на магнитную ленту с помощью SAVE. Процесс проверки осуществляется для обеих частей программы - заголовка и блока данных. Ошибка "R при загрузке с ленты" появляется, если запись на ленте не точно соответствует оригиналу.
ABS
Все отрицательные числа становятся положительными, в то время как положительные не меняются.
ACS
Аргумент "X" берётся как косинус и функция возвращает величину угла в радианах.
AND
Это двоичная операция и поэтому она требует 2 операнда. Если операнды логически истинны, то операция полностью истинная. Однако, если один или оба операнда ложны, то операция полностью ложна. Числовое выражение, которое является ложным, будет иметь 0 значение, т. е. 0. Когда результат полностью истинный, именно 1-ый операнд возвращается пользователю.
ASN
Аргумент X берётся как синус, и функция возвращает величину данного угла в радианах.
ATN
Аргумент X берётся как тангенс, и функция возвращает величину в радианах. ATN является первой из 4-х
_Функции и команды БЕЙСИКА_
функций, определенных в SP использованием многочленов Чебышева.
ATTR(X,Y)
Эта функция имеет форму ATTR (строка, колонка). Она возвращает пользователю значение атрибутного
байта.
Функция эквивалентна РЕЕК 22528+строка*32+колонка. Величина признака может рассматриваться следующим образом: INK+PAPER*8+BRIGHT*64+FLASH*128.
BIN
Позволяет число в диапазоне от 0 до 65535 вводить в двоичной форме. Разрешается использовать любое число двоичных цифр до 16.
Следующая строка, поэтому законна и даст числа от 0 до 10: 10 FOR A=BIN 1 ТО BIN-1010 STEP BIN 00000001: PRINT A: NEXT A
Хотя SP позволяет ввести числа в двоичной форме, они не могут печататься в этой форме без использования программ.
CHRS N
Эта функция возвращает пользователю символ, как строку для данного кода. Следующая строка показывает, как распечатать набор символов. Клавиши CONTINUE и ENTER должны будут использоваться 6 раз, чтобы установить коды управления цветом. 10 FOR A=0 ТО 255: PRINT CHR$ A: NEXT A
CODE
Функция возвращает пользователю код для первого символа в аргументе X$, код будет равен 0, если Х$ 0-ая
строка.
COS
Аргумент X рассматривается в радианах, и функция возвращает соответствующий косинус для этого угла.
ЕХР
Для этого аргумента X функция возвращает величину е в степени X, где е=2,7182818. Вычисления производятся по многочлену Чебышева.
FN
В SP около 26 числовых и 26 строчных функций. За знаком функции должна следовать 1 буква или 1 буква и знак $, а затем требуемые аргументы в скобках.
IN
Аргумент X используется как адрес порта, и считываемое значение будет в диапазоне 0-255. Если порт не используется, величина будет 255.
INKEYS
Функция опрашивает клавиатуру без обращения к INPUT. Если нажата 1 клавиша, то длина входной строки определяется этой клавишей. Команда распознает как символ на клавише CAPS LOCK или без неё. Другие комбинации дают пробел или ?. Если ни одна клавиша не нажата, или нажата более чем одна, то длина входной строки - (0).
INT X
Для данной величины X функция возвращает целую часть. У отрицательного числа сначала отбрасывается дробная часть, затем вычитается 1, чтобы округлить результат.
LEN AS
Функция определяет длину заданной строки. 0-ая строка даст 0-ой результат. Однако элементы цвета, полученные нажатием клавиши, могут включится в строку. Эти элементы будут иметь длину 2.
LN X
Для заданного X функция возвращает логарифм е для величины X. Представляет собой другую функцию вычисленную в SP использованием многочлена Чебышева.
NOT
Дает логическое состояние значений в SP. Однако результат инвертируется, и логический результат даётся просмотром "NOT NOT X".
Для X=2 NOT X даст ложь, a NOT NOT X истинно.
Для X=0 NOT X истинно, a NOT NOT X ложно.
_Функции и команды БЕЙСИКА_
OR
Она является двоичной операцией и требует два операнда. Если любой из операндов логически истинный, тогда операция истинна. Однако если ни один из операндов не является истинным, тогда операция ложна.
Истинный результат равен 1, если 2-ой операнд не равен 0 и величине 1 -го операнда, если второй операнд
равен 0.
PEEK X
Возвращает величину, находящуюся по адресу X. Результат всегда целое число в диапазоне от 0 до 255.
PI
Представление с плавающей точкой. PI/2 является константой в таблице постоянных в ROM памяти. Эта величина выбирается, удваивается и передается пользователю. Величина е=3.14...
POINT X,Y
Имеет форму /К-ТОЧКА^- ТОЧКА/ и возвращает величину 1, если элемент изображения в этом положении установлен, и величину 0 если сброшен.
RND
В SP случайные числа выдаются генератором псевдослучайных чисел. Значение системной переменной SEED, находящейся в адресах 23670 и 23671, выбирается, модифицируется и возвращается при каждом обращении к RND. Случайное число, возвращенное пользователю, является новой величиной SEED, деленной на 65535. SEED сбрасывается в 0 при инициализации SP. С этого времени она является последовательностью целых чисел 0-65535. Величина не будет повторяться до тех пор, пока все числа не использовались.
SCREENS
Формат функции SCREEN$(строка, столбец). Функция возвращает строку, содержащую символ для заданной позиции. Распознает символы с кодами в диапазоне 32-127, когда они нормальны или инвертированные.
Работа заключается в сравнении содержимого 8 байтов для области данного символа относительно 8-ми байтового представления, имеющего место в генераторе символов. Функция возвращает 0 строку, если символ не является ни одним из 96 символов генератора.
Нежелательно, чтобы функция исключала из сравнения символы, определенные пользователем, т. к. они могут появиться.
Однако весьма трудно проверить обычные графические символы, которые не хранятся в 8-ми байтовой форме, а создаются, когда требуются.
Пример:
10 PRINT "a"; SCREEN$(0,0)
SGN X
Положительные величины превращаются в +1, все отрицательные - в -1, 0 дает 0.
SIN X
Это обычная функция SIN в радианах.
SQR X
Вычисляется корень аргумента X.
STRS
Аргумент для этой функции рассматривается как числовое выражение.
Операция включает в себя числовое выражение, печатает его в рабочей области так, как оно будет выведено на TV - экране, если требуется, я затем возвращает пользователю параметры строки.
TAN X
Вычисление тангенса угла. Аргумент - в радианах.
USR-число
Аргумент X, который является числовым выражением, принимается как адрес программы машинного кода, написанной пользователем.
Когда команда вызывается, то Z80 останавливает выполнение программы монитора и вместо этого выполняет команды с адресом X и далее.
Команда машинного кода RET вызовет возврат к программе монитора. В программе, написанной в машинном коде, можно модифицировать регистр IY, но его необходимо восстановить перед возвратом в программу монитора (но маскируемое прерывание должно быть запрещено, пока пара регистров IY содержит любую величину, отличную от 5C3A). Однако значение в этой паре регистров должно быть сохранено или восстановлено если требуется успешный возврат к Бейсику.
_Функции и команды БЕЙСИКА
В SP числовые значения передаются через пару регистров BC.
USR-строка
Возвращает адрес требуемого символа из графики. Аргумент состоит из 1 -го символа, и он должен быть в диапазоне "A-U".
Графическая область будет начинаться с адреса 32600, но лучше рассматривать её по адресу UDG (по адресам 23675 и 23676). Если область графики задается в адресе 32600, тогда этот адрес задается с помощью USR "A" (SPECTRUM-16).
8 адресов 32600-32607 содержат представление символа A. USR "B" возвращает адрес 32608, USR "C" даёт 32616 и т.д., до 21 графического символа (для SPECTRUM-16). Пример определения символа:
10 DATA BIN 00000001
11 DATA BIN 00000010
12 DATA BIN 00000100
13 DATA BIN 00000100
14 DATA BIN 00001000
15 DATA BIN 01001000
16 DATA BIN 00101000
17 DATA BIN 00010000
18 FOR A=0 TO 7: READ B: POKE USR "A"+A,B: NEXT A
19 PRINT CHR$ 144: REM ="A"
VAL
Позволяет вычислять выражения, которые содержатся в строках. VALS
Требует строку в качестве аргумента, и эта строка должна быть заключена в кавычки. Функция затем возвращает пользователю результат в виде строки.
CHR$ 6 CHR$ 8 CHR$ 9 CHR$ 13
CHR$ 16 до CHR$ 21
2.3. УПРАВЛЯЮЩИЕ СИМВОЛЫ
- печать запятой
- перемещение обратно
- перемещение вправо
- следующая строка экрана
- эти управляющие знаки дают временные цвета.
Они соответствуют операторам INK, PAPER, FLASH, BRIGHT, INVERSE, OVER.
Пример - установить INK в RED.
10 PRINT "XXXX"; CHR$ 16; CHR$ 2;"YYYY"
CHR$ 22 - AT
Печатаемая позиция видоизменяется в позицию данными, следующими двумя символами. Первый символ даёт номер строки, второй номер столбца.
CHR$ 23 - TAB
Печатаемая позиция устанавливается в столбец, заданный следующими двумя символами. Если текущий номер столбца равен или превышает новое значение столбца, тогда печатаемая позиция будет на следующей строке