Машинные коды 1993 г.

Глава 2 - функции команды языка Бэйсик.


2. Функции команды языка бэйсик.

2Л ВВЕДЕНИЕ.

Ожидается, что читатели этой книги уже будут иметь некоторые знания
о бэйсике SPECTRUM.

Эта глава обсуждает команды и функции бейсика и постарается прояснить
моменты, не освещенные детально в двух пособиях, прилагающихся к
SPECTRUM.

Интерпретатор бэйсик для SPECTRUM распознает 50 различных команд
и 33 функции. Каждая из них здесь будет обсуждена подробно. Они будут
рассмотрены в алфавитном порядке, так, чтобы ссылки на них были проще.
Управляющие символы будут обсуждены в пункте 2.4.

2.2 КОМАНДЫ БЭЙСИКА.

И ВЕЕР X,Y

По этой команде подается сигнал в динамик. Х-длительность в секундах,
Y-высота звукового тона, от среднего "си", в диапазоне чисел от -60 до +69,8.
X или Y, или оба могут быть выражениями. Интересно отметить, что ВЕЕР
не может быть прерван, поскольку, команда ВЕЕР не прерывается по
клавише BREAK. BREAK возможен только после выполнения команды
ВЕЕР.

■ BORDER M

Имеется 8 возможных цветов, в которые может быть окрашена граничная
область (бордюр или рамка) TV-ЭКРАНА. Используются целые числа от О
до 7, однако допускается -0,5<=М<=7,5, как результат выражения, поскольку
М округляется до целого. По команде BORDER выходной сигнал поступает
на порт 254 и это может быть выражено оператором OUT 254,М (где М=2
дает красный бордюр). Но OUT и BORDER различны. Цвет получаемый
бордюром по команде OUT - "временный", в то время как BORDER дает
постоянный цвет, хранящийся в системной переменной BORDER (5C48h).
BORDER 2 и ENTER делают бордюр красным. OUT 254,1 и ENTER - бордюр
будет голубой временно, а потом опять вернется красный цвет.

■ BRIGHT М

Это первая из команд элемента цвета, все эти команды могут быть
использованы либо только как команды в операторе бэйсик (в этом случае
действие постоянно), либо включены в оператор печати, и тогда их действие
временно. М может бьггь выражением, но результат должен быть целым
числом 0,1 или 8. При м=0 экран имеет нормальную яркость, при м=1
любая последующая надпись будет сделана на подсветленной бумаге.
Использование BRIGHT 1 и CLS - простой путь сделать всю область экрана
яркой. Прим=8 "высветленным" будсттекст, подлежащий печати. Следующие
примеры показывают 4 различных пути, в которых команда цвета BRIGHT
может бьггь использована.

10 BRIGHT 1: PRINT "BRIGHT

20 BRIGHT 0: PRINT "NORMAL"

- где два изменения яркости имеют постоянный характер.

20 PRINT BRIGHT 1; "BRIGHT; BRIGHT 0;"NORMAL"

- изменения яркости временны в течении действия оператора.

30 PRINT CHR$19+CHR$l;"BRIGHr;CHR$19+CHR$0;"NORMALm

- строка с CHRS эквивалентна строке 20.

40 LET A$-CHR$ 19+CHR$ l;LET B$~CHR$ 19+CHR$0

50 PRINT A$rBRIGHr;B$;"NORMAL"

- помещает команду цвета в строковую переменную.

Также возможно использовать последовательность набора:

- режим курсора "е" и клавиша 9 для получения BRIGHT 1;

- режим курсора "е" и клавиша 8 для получения BRIGHT 0.

Этот набор может бьггь размещен внутри кавычек, то есть между
открывающей кавычкой и первым символом, или как единственный символ
строки. Например: LET A$="":REM Внутри кавычек набрана
вышеприведенная последовательность с клавишей "9й. Строка А$ будет
напечатана как при BRIGHT 1.

■ CIRCLE X,Y,Z

Эта команда рисует окружность с радиусом Z и с координатами центра
X, Y. Z берется как абсолютное целое значение, а X, Y могут использоваться
как величины с плавающей точкой. Самая большая окружность при радиусе
88 единиц получается оператором CIRCLE 127.5, 87.5, 88, а окружность с
нулевым радиусом представляет точку. Любая команда цвета может быть
включена в оператор CIRCLE, и ее влияние всегда будет временным.

Ж CLEAR, CLEAR N

В системе SPECTRUM имеется такое большое количество памяти RAM,
что использование команды CLEAR само по себе вряд ли будет полезным.
Однако расширение команды возможностью перемещать указатель RAMTOP
делает ее очень сильной. RAMTOP указывает на верхнюю границу системы
бэйсик и содержимое адресов ниже RAMTOP может изменяться, в то время
как любое содержимое выше RAMTOP остается неизменным даже после
выполнения команды NEW. Нижняя граница для N возможна не менее чем
23821. Иначе SPECTRUM выдает звуковой сигнал. Это говорит о Юм, что
разрешенного RAM не хватает на задачу. Верхней границей N является для
системы 16к 32767, а для систем 48к 65535. Использование CLEAR N с
соответствующим значением вызывает перемещение стека COSUB в область,
отведенную для графики пользователя. Поучительно выполнить следующее
упражнение: ввести CLEAR 32767 или (65535) изменить курсор на G и
вывести литералы с L по U. Нажать на клавишу SRACE и несколько секунд
наблюдать изменение графики пользователя, поскольку каждое нажатие
клавиши приводит к использованию машинного стека.

■ CLOSE

Используется с микродрайвом и дисководом.

■ CLS

Это очень простая команда, которая меньше чем за 1/10 секунды
выполняет много работы. Команда CLS очищает дисплейный файл. Она
зануляет адреса с 16384 по 22527 (4000h-5800h) и сбрасывает байты атрибутов
по адресам 22528-23295 (5800h-5AFFh). Байты атрибутов не зануляются, а
копируются из системной переменной ATTR-P, которая содержит
постоянные атрибуты. По команде РОКЕ значение переменной ATTR-P,
которая помещается по адресу 23693 (5C8Dh), может быть изменено. В
переменной ATTR-P бит 7 отвечает за мигание, бит 6 - за яркость, биты 3-
5 - за цвет бумаги, биты 0-2 - за цвет чернил.

■ CONTINUE

Существует 2 основных аспекта команды. Первый позволяет пользователю
использовать в бейсик-программе оператор STOP, и тогда не требуется
использовать клавишу BREAK. Пользователь в этом случае может проверить
переменные, установить переменные и изменить программу. Использование
операторов STOP и CONTINUE очень облегчает отладку программ.

Второй аспект позволяет повторять выполнение после исправления
ошибок. Например: если программа остановилась по ошибке "VARIABLE
NOT FOUND", то переменная может быть определена в непосредственном
режиме, и программа заново запущена по команде,СОЭТШиЕ.

Шесть системных переменных NEWPPS, NSPECTRUMPS, PPS, SUBPPS,
OLDPPS и OSPPS включаются некоторым образом в выполнение команды

CONTINUE. Они описаны в разделе 2.5.

■ COPY

Это очень простая команда. Верхние 22 строки TV экрана посылаются
на принтер. Команда COPY одна из немногих команд, которые
останавливают часы реального времени на время выполнения команды.
Это можно видеть по системной переменной FRAMES до и после
использования команды.

■ DATA е,е...

Эта команда, которая может использоваться только в программных
строках, определяет список данных.

Хотя это и упоминается в руководстве, но становится очень ясно, что
рассмотрение элементов в операторе DATA как выражений является
особенностью, делающей эту команду очень полезной. Более детально см.
READ, RESTORE.

■ DEFFN A(A....Z)=E DEFFN A$(A....Z)=E

Команда DEFFN очень мощная. Пользователь может определять до 52-
х функций: 26 числовых и 26 строковых. Имена, используемые для функции,
должны состоять из одной литеры (+$ для строк), и они могут быть
именами, используемыми где-нибудь как простые переменные. Существует
небольшое ограничение на имена аргументов, так как они тоже должны
быть одинарными литерами (+S для строк). Поэтому может бьггь не более
52 аргументов.

Выражение, определяемое функцией, может бьггь любым дающим
числовой или строковый результат. Однако, рекурсивное использование
приводит к неудаче.

Я DIM А(Е1.....EK) DIM А$(Е1.....ЕК)

Команда DIM удаляет существующий массив с тем же именем и затем
устанавливает новый. Числовые массивы зануляются, авслроковые заносится
литера пробел. В системе SPECTRUM вся индексация начинается с 1.
Достижение же индексом 0-го значения является ошибкой. Использование
в системе SPECTRUM в строковых массивах строк фиксированной длины,
тогда как простая строковая переменная меняет длину, может привести к
неудаче. Наиболее просто, используя в определении строкового массива
последнего индекса, всегда фиксировать длину строки. Эта особенность
может бьггь полезна при установлении формата TV экрана.

В DRAW X,Y DRAW X,Y,Z

Эта команда рисует линию от текущей позиции (но не включая сс) на
растояние X по горизонтали и Y по вертикали. Если аргумент Z определен,
то рисуется дуга вместо прямой линии. Z должно бьггь определено »
радианах. При Z=PI(X) получается полуокружность. При положительных
значениях дуги рисуются справа от того места где бы была прямая линия,
а при отрицательных - слева. Любая из команд цвета может бьггь включена
в оператор DRAW, где ее влияние будет временным.

ВERASE

Используется с микродрайвом и дисководом.

В FLASH м

Это вторая команда управления цветом. Когда она используется одна в
программе на бэйсике, ее влияние постоянно. Но когда она используется
включением в оператор печати, ее влияние временно.

Как и 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 устанавливает пустую переменную под именем А, которая
в дальнейшем в программе не используется.

10 FOR А-1.6 ТО 2.1 STEP 6.1

20 LET V-PEEK 23627+256*РЕЕК 23628-1

30 FOR В-1 ТО 19

40 PRINT В, PEEK (V+B)

50 NEXT В

<RUN>

Добавте 25 LET V=V+25 и увидите управляющую переменную В. З.В
SPECTRUM-e не существует ошибок, вызванных установлением шага в
неправильном направлении. Это значит, что строка, подобная FOR А=2 ТО
0 STEP 1 допустима. Однако это действие приводит к полному игнорированию
FOR NEXT цикла. Это может быть показано изменением
продемонстрированной выше программы следующим образом:

10 FOR А-1.6 ТО 1.1 STEP 0.1
50 NEXT А

и программа будет успешно работать, но не будет никакой печати. Эта
возможность перепрыгивать через* целые циклы может быть и преимуществом
и недостатком - ожидаемый результат не появляется вообще.

Я FORMAT F

Используется с микродрайвом и дисководом.

■ GO SUB N

Эта команда приводит к выполнению подпрограммы, которая начинается
со строки с номером N. Если строка с номером N отсутствует, то
выполняться будет строка со следующим за N номером. После выполнения
подпрограммы управление возвращается к первому оператору в программе
после оператора, содержащего GO SUB. Следующая программа показывает,
что в 16к SPECTRUM GO SUB стек начинается с адресов 32595-32597.

10 GO SUB 20: STOP

20 FOR А-1 TO 3: PRINT A, PEEK (32594+A): NEXT A
RUN

Важным свойством бэйсика является то, что он позволяет командам GO
SUB и GO ТО делать условные переходы.

■ GO ТО N

Это очень простая команда. Следующей выполняется строка N или
первая строка после N. Переходы могут быть сделаны и RUN оператором,
хотя делать это, вероятно, некорректно. Команда GO ТО помещает адрес
перехода (номер строки) в системные переменные NEWPPS и NSPPS,
расположенные в 23618-23620 (5C42-5C44h). Переход к операторам, не
являющимся первыми в строке, в обычной практике невозможен.

■ IF X THEN S

В системе SPECTRUM значение 0 соответствует логическому значению
ложь, а любое значение отличное от 0 - логическому значению истинности.
Команда выполняет S и другие операторы в строках, если значение X-
истинно. В противном случае выполняется переход к следующей строке.
Эта команда работает хорошо, но следующая программа написана, чтобы
показать, используя повторное деление, что происходит, когда значения
никогда не становятся ложью. Проблема появляющаяся в этом случае
связана с получением в SPECTRUM величины 2 в степени -128.

10 LET А-1

20 IF NOT A THEN PRINT A: STOP

30 PRINT А

40 LET A-A/2

50 GO TO 20

RUN

А будет распечатываться больше 5-ти экранов до тех пор, пока она не
Достигнет значения 2 в степени -128. Если строку 40 поменять на LET
А=А*0.5, то значение ложь не будет достигнуто.

в ink n

Это третья из команд элементов цвета. Когда она используется
самостоятельно, ее действие постоянно, а когда добавляется в оператор
печати - действие временное. Значение N может быть от 0 до 9. 8 основных
цветов в SPECTRUM закодированы от 0 до 7, и это ясно видно на клавиатуре.
Использование INK 8 при печати дает цвет, хранившийся в атрибутах.
Использование INK 9, однако, немного более сложно: чернила становятся
только черными или белыми в зависимости от цвета бумаги. Когда цвет
бумаги черный, красный, синий, фиолетовый - цвет чернил белый, когда
зеленый, голубой, желтый или белый - цвет чернил черный. Действие
постоянной команды INK: дня N=0-7 устанавливаются биты 0-2 переменной
ATTR-P; для N=8 биты 0-2 переменной MASK-P, дня N=9 бит 5 P-FLAG.
Если команда INK имеет временное действие, то устанавливаются
соответствующие биты временных системных переменных.

в input

Это очень мощная команда, она позволяет набором операторов INPUT
совместно с элементами печати добиваться желаемых результатов.

Пример:

10 INPUT "NAME PLEASE"^$;CHR$ 13;

"AGE PLEASE*;B$

20 PRINT AT 5.0; "NAME";TAB 7^$;CHR$ 13;"AGEM;TAB 7;B$

Использование INPUT LINE позволяет помещать в строковую
переменную всю введенную строку.

в inverse n

Команда управления цветом. Эффект может быть временным или
постоянным. При INVERSE 1 цвета чернил и бумаги меняются местами, а
при INVERSE 0 восстанавливается нормальный цвет. При постоянном
режиме по команде устанавливается бит 5 P-FIAG, а при временном - бит
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+l: GO TO 30

Следует сделать несколько вариантов для строки 10

LET А-0

LET А-9Е4

LET А$-ААА"

DIM A(2):LET А(1)-9Е4

DIM A$(5j:LET A$-"1234567m

DIM A$(2,5):LET A$(1)-"AAA"

■ LIST N

Выводит на экран листинг программы. Допускается, что величина N=0,
если она не определена иначе. Если строка существует, тогда она становится
текущей строкой и обозначается курсором. Особенностью системы является
то, что LIST 49172, например, будет такой же, как LIST 20.

■ LLIST N

Посылает листинг программы на принтер. N становится текущей
строкой.

■ LOAD

Имеет много различных оттенков и позволяет загружать в память
программу бэйсик, массивы переменных и блоки кодов. Информация (код
или профамма) записаны на магнитной ленте и содержатся в двух частях.
Первая представляет 17-байтовый заголовок, вторая - блок кодов. Каждая
из этих частей использует одинаковый формат записи битов. Единичный бит
записывается сигналом типа "меандр" с длительностью полупериода 1710
тактов (488,6 мке), а кулевой - с длительностью 855 тактов (244,3 мкс).

В SPECTRUM используется головной маркер (+00 для заголовка и +FF
для блока кодов) и завершающий байт четности после заголовка и блока
кодов. Блок заголовка разбит на 5 частей:

1. Одиночный байт информации, который равен:

0 для программы бэйсик;

1 для числового массива;

2 для массивов символов;

3 для блока кодов.

2. Следующие 10 байтов содержат название файла. Название длиной

больше 10 символов не применяется.

3. Два байта содержат общую длину блока кодов в байтах.

4. Два байта содержат номер строки программы, с которой начинается

выполнение программы на бейсике (для программы типа 0) или адрес

начала загрузки блока кодов.

5. Два байта содержат длину программы (только для программы типа 0).

■ LPRINT

Вызывает посыл* элементов печати на принтер.

■ MERGE F

Загружает программу и ее переменные с магнитной ленты и соединяет
с существующей в памяти программой и ее переменными. Команда
выполняет обработку новой программы как блока данных, который
загружается в рабочую область. Далее области программы сравниваются
строка за строкой, и новые строки копируются из рабочей области в
основную область программы. Область программы переопределяется и
расширяется, если необходимо. Поскольку строки соединены, подобная
операция соединяет и область переменных.

И NEW

Это команда повторного запуска системы без изменения системных
переменных RAMTOP, P-RAMT, RASP, PIP, UDG. Графика, определенная
пользователем, при этом не сбрасывается.

Ш NEXT А

Команда должна рассматриваться как команда, которая выполняет
работу в цикле FOR-NEXT, в котором управляющая переменная установлена
(см. FOR выше). Этапы, включающие в себя выполнения команды,
следующие: - управляющая переменная расположена в области переменных,
и величина STEP добавляется к VALUE вне зависимости от того, является
STEP положительным или отрицательным. Далее новая VALUE проверяется
относительно LIMIT, но здесь следует обратить внимание на знак STEP.
Если LIMIT не достигнут, тогда продолжается выполнение цикла, В
SPECTRUMe VALUE всегда увеличивается до того, как выполняется проверка
ограничения, следовательно, конечная VALUE после окончания цикла,
будет всегда больше чем LIMIT для положительной величины STEP, и
меньше чем LIMIT для отрицательной.

■ OPEN #

Обычно используется с микродрайвом и дисководом. Дает возможность
открывать потоки данных, используя строку OPEN # N,"S", где N - номер
потока данных, a S - название потока. После включения системы или
выполнения сброса устанавливаются следующие каналы: 0 - "К" клавиатура

1 - "Ки клавиатура

2 - "S" экран

3 - "Р" принтер

Наберите строку PRINT # 5;"WORKSH. Она не будет работать до тех
пор, пока поток данных не будет открыт использованием строки OPEN
#5,"S". Строка CLOSp # 5 закрывает поток. Следующие строки показывают
ввод с клавиатуры и вывод на экран:

10 OPEN # 5/К"
20 INPUT #5; А$
30 OPEN # 5/5"

40 PRINT # 5; A$

■ OUT M,N

Команда позволяет посылать сигналы на выходной порт из программы
на бэйсике. В описании BORDER было показано, как порт 254 управляет
цветом бордюра: разные цвета были даны для случаев от N=0 до N=7, в то
же время порт 254 может использоваться для управления звуковым
динамиком, и следующая программа показывает, как это сделать.

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

10 OUT 254,16
15

20 OUT 254,0
30 GO ТО 10

В строке 15 оператор может быть, например, таким: PRINT,RAND,LET
А=В.

■ OVER N

При OVER 1 вывод символа будет выполняться объединением по
команде XOR с уже существующим в данной позиции символом. При
выполнении XOR бит результирующего изображения устанавливается,
если он имеется в одном из двух символов. Если он есть в каждом из
символов, то в результирующем изображении он сбрасывается.

При OVER 0 все биты в данной области сивола будут объединены по
команде OR. При OVER 1, если символ или строка напечатаны дважды, то
они исчезнут, например: 10 OVER 1: PRINT"A";CHR$ 8;МАИ где CHRS 8 - шаг
назад.

В переменной P-FLAG: 0 бит - управляющий для локального OVER, 1
бит - для глобального OVER.

■ PAPER N.

Команда цвета. Может быть постоянной или временной. Команда
может использоваться с N=0-9. Использование N от 0 до 7 очень простое.
При N=8 устанавливается режим высвечивания, и цвет бумаги области
передаваемого символа остается неизменным.

Использование PAPER 9 очень полезно при оформлении заголовков.
Команда устанавливает, что цвет бумаги в области будет контрастным по
отношению с используемым цветом чернил. Следовательно, при светлых
чернилах (зеленый, голубой, желтый, белый) бумага будет черной, а при
темных чернилах (черный, синий, красный, фиолетовый) бумага будет
белой.

Фактическим действием PAPER является:

для N=8 устанавливается бит 3, 4, 5 переменной MASK-P

для N=9 бит 7 переменной P-FLAG
для N=0-7 биты 3,4,5 переменной ATTR-P.

■ PAUSE N.

Эта команда останавливает Z80 на N прерываний. Единственной работой,
которая выполняется за время паузы, является опрос клавиатуры. Период
паузы закончится после N прерываний или при нажатии клавиш.

■ PLOT X,Y.

Экран представляет собой 256 * 176 элементов изображения, каждый из
которых может управляться отдельно командой PLOT. В обычной работе
команда PLOT установит бит RAM соответствующий элементу изображения.
Команда делает также этот элемент изображения текущим в системной
переменной COORDS, который записывает координаты последнего элемента
изображения.

Любой из цветовых элементов может использоваться в команде PLOT,
в том числе OVER 1 и INVERSE 1.

ПРОКЕ N,M.

Команда позволяет вводить значения по адресам непосредственно в
память. М может принимать значения от 0 до 255.

■ PRINT

Команда позволяет выводить символы на экран TV. Элементы
отделяются друг от друга разделителями: м;и - элементы выводятся подряд,
Y - выполняется табуляция к следующей половине строки. Позицию
экрана можно также набирать с помощью TAB а.

Элементы могут быть элементами цвета, действие которых будет
временно; числовыми выражениями или строковыми.
• Все элементы упавления цвета и управления табуляцей могут бьггь
выполнены с использованием соответствующих значений CHR$, и это
может быть полезно.

П RANDOMIZE N

Команда устанавливает значение системной переменной SEED,
расположенной в адресах 23670 и 23671 (5C76-5C77h). Если N не задано, то
значение для SEED берется из двух младших байтов FRAMES и может
рассматриваться как случайное число. Если N задано, тогда это значение
копируется в SEED. Ддя дальнейшего уточнения работы генератора псевдо-
случайных чисел смотри ниже функцию RND.

■ READ VI, V2

Команда используется вместе со списком DATA и может рассматриваться
как несколько команд LET. Элементы в DATA являются выражениями, а
элементы в READ - переменными, которым эти выражения присваиваются.
Сообщения об ошибке появляются, если нет соответствия между
переменными и выражениями.

Заметьте, что в оператор READ можно включать неописанные ранее
переменные. Системная переменная DATADD, расположенная в адресах
23639 и 23640 (5C57-5£58h), используется для указания в списке DATA.
Первоначально указатель устанавливается на адрес начала области
программы и сбрасывается в это значение по RUN.

В REM

Полезная команда, так как позволяет вносить комментарии. Вся строка
бэйсика после REM рассматривается как комментарий и не
интерпретируется.

В RESTORE N

Эта команда используется вместе со списком DATA и относится к
одному или нескольким DATA. Если N=0, то переменная DATADD указывает
на адрес перед областью программы. Если N определено, то оно указывает
на адрес строки бэйсик с номером N, если она существует, или ближайшей
после нее. Если N больше чем 9999 (самый большой разрешенный номер
строки) или больше чем последний н омер программы, то DATADD указывает
на последний адрес в области программы.

В RETURN

По команде извлекается верхнее значение из стека COSUB. Если
обращение корректно, тогда интерпретатор будет выполнять это утверждение
следующим. Иначе будет выдано сообщение об ошибке. "RETURN без
GOSUB".

В RUN N

Позволяет выполнять программы бэйсик. Если N не задано, то будет
принято начало с первой строки. Когда N определено, то интерпретатор
находит область программы - строку с этим номером или первую строку
после нее, если строка N не существует. Команда инициирует требуемые
указатели путем выполнения RESTORE и CLEAR до интерпретации какой-
либо строки.

В STOP

По этой команде появляется сообщение об ошибке "STOP".
Использование CONTINUE как непосредгвснной команды позволит затем
продолжать программу от следующего оператора. Как и в ошибочной
ситуации команда передает номер ошибки в системную переменную ERR-
NR, которая располагается по адресу 23610 (5C3Ah) Номер ошибки всегда
меньше на 1, чем код ошибки, который появляется перед сообщением об
ошибке.

Поскольку ошибка имеет место, интерпретатор останавливает
выполнение программы и переходит на выполнение подпрограммы
обработки ошибки. Затем номер ошибки передается в ERR-NR, и выбирается
адрес возврата в командный режим. Этот адрес возврата всегда существует
и расположен в двух адресах ниже стека GOSUB. Если отсутствуют текущие
циклы GOSUB, тогда стек GOSUB. будет пустым.

Когда различные подщхираммы вызываются, адрес возврата опускается
в стек и поднимается опять, когда программа завершается.

Адрес возврата всегда указывается системной переменной ERR-SP,
которая расположена в адресах 23613 и 23614 (5C3D-5C3Eh).

Заметьте, что команды RUN и GOTO не очищают стек GOSUB, и если
программа останавливается без завершения выполнения подпрограммы,
тогда ERR-SP постепенно указывает все ниже в памяти (на 3 байта для
каждой подпрограммы). Однако команда CLEAR восстанавливает ERR-SP.

И VERIFY

Команда позволяет сверить с оригиналом любую программу, выведенную
на магнитную ленту с помощью SAVE. Процесс проверки осуществляется
дляЪбеих частей программы - заголовка и блока данных. Ошибка "ERR при
загрузки с ленты" появляется, если запись на ленте не точно соответствует
оригиналу.

2.3. ФУНКЦИИ БЭЙСИКА

И ABS

Все отрицательные числа становятся положительными, в то время как
положительные не меняются.

■ ACS

Аргумент "Xм берется как косинус, и функция возвращает величину угла
в радианах.

■ AND

Это двоичная операция, и поэтому она требует два операнда. Если
операнды логически истинны, то операция полностью истинная. Однако,
если один или оба операнда ложны, то операция полностью ложна.
Числовое выражение, которое является ложным, равно 0. Когда результат
полностью истинный, именно первый операнд возвращается пользователю.

■ ASN

Аргумент "Xм берется как сшгус и функция возвращает величину данного
угла в радианах.

■ ATN

Аргумент "X" берется как тангенс, и функция возвращает величину в
радианах. ATN является первой из 4-х функций, вычисляемых в SPECTRUM
с использованием многочленов Чебышева.

И ATTR

Эта функция имеет форму ATTR (строка , колонка). Она возвращает
пользователю значение атрибутного байта.

Функция эквивалентна РЕЕК 22528+строка*32+колонка. Величина
признака может рассматриваться следующим образом:

INK+PAPER*8+BRIGHT*64 +FLASH* 128.

■ BIN

Позволяет число в диапазоне от 0 до 65535 вводить в двоичной форме.
Разрешается использовать любое число двоичных цифр до 16. Следующая
строка поэтому законна и даст числа от 0 до 10

10 FOR A-B1N 1 ТО BIN 1010 STEP 00000001:
PRINT A: NEXT А

Хотя SPECTRUM позволяет ввести числа в двоичной форме, они не
могут печататься в этой форме без использования специальных программ
печати.

■ chrs

Эта функция возвращает пользователю символ, как строку для данного
кода. Следующая строка показывает, как распечатать набор символов.
Клавиши CONTINUE и ENTER должны будут использоваться 6 раз, чтобы
установить коды управления цветом.

10 FOR А-0 ТО 255 : PRINT CHR$ A: NEXT А

■ CODE

Функция возвращает пользователю код для первого символа в аргументе
Х$, код будет равен 0, если Х$ - нулевая строка.

Н COS

Аргумент "X" рассматривается в радианах, и функция возвращает
соответствующий косинус для этого угла.

■ ЕХР

Для этого аргумента "Xм функция возвращает величину Е в степени Е, где
Е=2,7182818. Вычисления производятся по многочлену Чебышсва.

■ fn

В SPECTRUMe может бьггь определено 26 числовых и 26 строчных
функций. За знаком функции должна следовать 1 буква или 1 буква и знак
$, а затем требуемые аргументы в скобках.

■ in

Аргумент "Xй используется как адрес порта и считываемое значение
будет в диапазоне 0-255. Если порт не используется, то величина будет 255.

■ INKEYS

Функция опрашивает клавиатуру без обращения к INPUT. Если нажата
одна клавиша, то входная строка определяется этой клавишей. Команда
распознает символ на клавише в режиме нажатия CAPS LOCK или без него.
Другие комбинации дают пробел. Если ни одна клавиша не нажата или
нажата более чем одна, то входная строка тсулевая.

■ 1NT

Для данной величины X эта функция возвращает только целую часть. У
отрицательного числа прежде всего отбрасывается дробная часть, затем
вычитается единица.

■ LEN

Функция определяет длину заданной строки. Пустая строка даст нулевой
результат. Однако элементы цвета, полученные нажатием клавиши,
включаются в строку. Эти элементы будут иметь длтгу 2.

■ ln

Для заданного X функция возвращает натуральный логарифм.
Представляет собой еще одну функцию вычисленную в SPECTRUMe с
использованием многочлена Чсбышева.

■ not

Дает логическую инверсию значений в SPECTRUMe.

Для Х=2 NOT X даст ложь, a NOT NOT X истинно.

Для Х=0 NOT X истинно, а для X NOT NOT ложно.

■ or

Она является бинарной операцией и требует два операнда. Если любой
из операндов логически истинный, тогда операция истинна. Если ни один
из операндов не является истинным, тогда операция ложна. Истинный
результат равен 1.

■ РЕЕК

Возвращает величину, хранящуюся в ячейке памяти по адресу X.
Результат всегда целое число в диапазоне от 0 до 255.

■ PI

PI/2 является константой в таблице постоянных в ROM памяти. Эта
величина выбирается, удваивается и передается пользователю. Величина
ес=3.14....

■ point

Возвращает величину 1, если элемент изображения в точке с
координатами X,Y установлен, и величину 0, если сброшен.

■ rnd

В SPECTRUMe случайные числа выдаются генератором псевдослучайных
чисел. Значение системной переменной SEED находящейся в адресах 23670
и 23671, выбирается, модифицируется и возвращается при каждом обращении
к RND. Случайное число, возвращенное пользователю, является новой
величиной SEED, деленной на 65535. SEED, сбрасывается в 0 при
инициализации SPECTRUM. С этого времени она является
последовательностью целых чисел ог 0 до 65535. Величина RND не будет
повторятся до тех пор, пока все числа не использовались.

■ screens

Формат функции SCREENS (строка, столбец) и функция возвращает
строку, содержащую символ заданной позиции экрана. Распознает символы
с кодами в диапазоне 032-127, когда они нормальные или инвертированные.
Работа заключается в сравнении содержимого 8 байтов для области данного
символа относительно 8-ми байтового представления, записанного в ПЗУ
в генераторе символов. Функция возвращает 0 строку, если символ не
является ни одним из символов генератора. Неудобно, что функция
исключает из сравнения символы, определенные пользователем, так как
они могут появиться. Однако весьма трудно проверить графические символы,
которые не хранятся в 8-ми байтовой форме в ПЗУ, а создаются, когда
требуются.

Пример.

10 PRINT я&":SCREEN$ (ОД

■ SGN

Положительные величины превращаются в +1, все отрицательные в -1,
О дает 0.

■ SIN

Это обычная функция SIN в радианах.

■ SQR

Вычисляется корень аргумента "X".

■ STRS

Возвращает пользователю параметры строки.

■ TAN

Вычисление тангенса угла. Результат в радианах.

■ USR

Аргумент "X", который является числовым выражением, принимается
как адрес начала программы машинного кода, написанного пользователем.

Когда команда вызывается, то Z80 останавливает выполнение программы
монитора и вместо этого начинает выполняет команды с адресом "*ХМ й
далее.

Команда машинного кода RET вызовет возврат к программе монитора.
В программе, написанной в машинных кодах, можно модифицировать
регистр ГУ,.но его необходимо восстановить перед возвратом в программу
монитора (немаскируемое прерывание должно быть запрещено, пока пара
регистров IY содержит любую величину отличную от 5C3Ah). Однако
значение в этой паре регистров должно быть сохранено или восстановлено,
если требуется успешный возврат к бэйсику.

■ USR-CTPOKA

Возвращает адрес требуемого символа из графики. Аргумент состоит из
одного символа, и он должен быть в диапазоне "А-1Г. Графическая область
обычно будет начинаться с адреса 32600, но лучше рассматривать ее по
адресу в системной переменной UDG (адреса 23675 и 23676). Если область
графики начинается с адреса 32600, тогда USR "А" возвращает этот адрес.

8 адресов 32600-32607 содержат представление символа A. USR "В"
возвращает адрес 32608, USR ИС" дает 32616 и т.д., до 21 графического
символа.

Пример определения символа:

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 тАя+А,В: NEXT A

19 PRINT CHR$ 144: REM-"A"

■ VAL

Функция VAL преобразует строку в число. Так,
VAL "3.5я - 3.5

или

VAL "2*3" - 6
или даже так

VAL (я2т + Я03") ~ 6

В последнем случае происходит вычисление двух выражений: сначала
строкового с получением строки и2*3", затем числового с получением
строки "6й.

Можно попасть в затруднительное положение, например:

PRINT VAL WAL" "VAL" я я я2.......

помня, что внутри строки кавычки удваиваются, мы видим, что в нашем
случае может понадобиться учствсрсние или даже увосьмирение.

■ VALS

Имеется еще одна функция, подобная VALB - это VALS. И аргументом,
и результатом этой функции является строка символов. Она работает как
VAL, примененная дважды, раскрывая все кавычки в строках:

VAL$"" "FRUIT PUNCH""" - "FRUIT PUNCH"

ZA. УПРАВЛЯЮЩИЕ СИМВОЛЫ.

CHRS 6 - печать запятой.
CHRS 8 - перемещение обратно.
CHR$ 9 - перемещение вправо.
CHRS 13- следующая строка экрана,

CHRS 16 до CHRS 21-эти управляющие знаки дают временные цвет
Они соответствуют операторам INK, PAPER, FLASH, BRIGHT,
INVERSE, OVER.
Пример:

установить INK в RED.

10 PRINT mXXXX";CHR$ 16;CHR$ 2;"YYYT
CHRS 22- соответствует AT.

Печатаемая позиция определяется следующими двумя числами. Первое
число дает номер строки, второе - номер столбца.
CHRS 23- табуляция.

Печатаемая позиция устанавливается в столбец, заданный следующим
числом. Если текущий номер столбца равен или превышает новое значение
столбца, тогда печатаемая позиция будет на следующей строке экрана.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Маразм - я понял одну важную вещь - пить грешно!!
Interface или междумордие? - что достает в оболочках к электронной прессе.
От редакции - О новшествах в журнале.
Part 8 - Desert island disks.
Новинки - новые поступления журналов и игр для ZX Spectrum: Deja Vu 7, ZX Format 8, Черный Ворон, ,Сталкер, Зеркало, Monster Land.

В этот день...   21 ноября