[an error occurred while processing this directive]

─SRP 5
─PL70
─TM0
─HM2
─DH//-|P-//
─LM5
│..................................................................<

|||/ Нестандартные ключевые слова языка Бейсик BBC/|||

   Эта  глава  содержит  детальное описание  нестандартных  слов,
которые Бейсик "понимает". Такие  слова  называются  "ключевыми".
Из-за  ограниченного  объема  руководства,  некоторые  операторы,
описанные в других главах, здесь опущены.

   Каждое описание состоит из нескольких частей:

|||/КЛЮЧЕВОЕ СЛОВО/|||

/Назначение/
   Описание   действия  слова.  Этот  раздел   предназначен   для
изучающих Бейсик.

/Примеры/
   Этот  раздел содержит несколько примеров  использования  слова
(но не законченные программы). 

|||/Описание/|||
   В этом разделе слово описывается  на  нормальном  компьютерном
жаргоне.

|||/Синтаксис/|||
   Следующие   символы   используются   для  описания  синтаксиса
ключевых слов:

   {} обозначает возможность повторения содержимого  скобок  ноль
или больше раз.

   [] обозначает возможность использования содержимого скобок.

   |  обозначает  альтернативы,  одна  из   которых  должна  быть
использована.

   <num-const>  обозначает численную константу, такую  как  "4.5"
или "127"

   <num-var> обозначает численную переменную, такую  как  "X" или
"length"

   <numeric>  обозначает  или  <num-const>  или   <num-var>,  или
комбинацию их в выражении, например: "4*X+6"

   <string-const>  обозначает  символьную  строку  заключенную  в
кавычки, например "GAVINMOUNT"

   <string-var>  обозначает символьную переменную, такую  как  A¤
или NAME¤

   <string> обозначает или <string-const> или  <string-var>,  или
выражение, такое как A¤+"WOMBAT"

   <testable   condition>   обозначает   что-нибудь,  принимающее
значение TRUE (истинно) или FASLE (ложно)

   <statement> обознчает любой оператор Бейсика,  например, PRINT 
или GOSUB или PROC.

   <variable name> обозначает последовательность букв  или  цифр,
которая соответствует правилам составления имен переменных.

─PE

|||/ ABS/||| абслоютное значение

/Назначение/
   Эта функция преобразовывет отрицательные числа в эквивалентные
положительные,   остабляя   положительные  числа  без  изменений.
Например  абсолютное  значение  -9.75  есть  9.75,  а  абсолютное
значение 4.56 ест 4.56.

   Функция ABS часто используется при  вычеслении  разницы  между
двумя значениями если Вы не знаете, которе из них больше другого.
Так  (K-L)  будте  положительным,  если  K  больше чем L, и будет
отрицательным, если L больше K.

   Например, если K=9 и L=12,  то  (K-L)  будет  равно -3. Однако
значение  ABS(K-L)  будет  всегда  положительным. В нашем примере
ABS(K-L) будет равно 3.

/Примеры/
  205 error=ABS(DIFFERENCE)

  100 DIFF=ABS(X20-X1)

PRINT ABS(temp%-50)

|||/Описание/|||
   Функция возвращает абсолютное значение своего аргумента.

|||/Синтаксис/|||
   <num-var>=ABS (<numeric>)

   ----------------------------------------------------------

|||/ ACS/||| арккосинус

/Назначение/
   Для вычисления угла по значеню  его  косинуса.  Значение  угла
возвращается  в  радианах.  Для  преобразования  радиан в градусы
используйте функцию DEG.

/Примеры/
   10 X=ACS(Y)

 1205 angle=DEG (ACS(0.5678))

  330 OUT=ACS(.234)

PRINT ACS (0.5)

|||/Описание/|||
   Функция   возвращает   арккосинус   от   аргумента.  Результат
представляется в радианах.

|||/Синтаксис/|||
   <num-var>=ACS(<numeric>)

   -----------------------------------------------------------

|||/ ADVAL/||| преобразование аналогового значения в цифровое

/Назначение/
   Аналоговый  сигнал  может  принимать любые  значения,  включая
дробные.  В  это  заключается   его   принципиальное  отличие  от
цифрового  сигнала,  который может  принимать  только  дискретные
(фиксированные) значения. Вес  воды  в  емкости  - это аналоговое
значение, а количество судов в порту - дискретное.

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

   Цифра   в   скобках   после  слова   ADVAL   указывает   номер
опрашиваемого входа (1 или 2).

   ADVAL(0) позволяет определять состояние кнопок на пультах. Для
этого надо выделить два младших бита возвращаемого значения

X=ADVAL(0) AND 3

после   чего   полученные   значения   будут    иметь    следющую
интерпретацию:

Х=0 ни одна из кнопок  не нажата Х=1 нажата 1-я кнопка Х=2 нажата
2-я кнопка Х=3 нажаты обе кнопки

/Примеры/
  980 X=ADVAL(2)

  125 TEMP=ADVAL(X)

INTENSITY=ADVAL(1)

|||/Синтаксис/|||
   <num-var>=ADVAL(<numeric>)

|||/Описание/|||
   Функция, возвращающая значение аналогового входа.  Имеется два
аналоговых   входа   дискретизируемых   на  256  уровней.  Однако
возвращаемое  значение  принимает  значения  от  0 до 65535 (т.е.
умноженное на 16).

   -----------------------------------------------------------

|||/ AND/|||

/Назначение/
   AND может быть использована как  логический  оператор, или как
"по-битный" оператор.

   Как  логический  оператор  AND  используется  для  определения
выполнени нескольких событий. Например

IF X=9 AND Y=0 THEN PRINT "HELLO"

   Логический  AND  часто  используется  как   часть  конструкции
IF...AND...THEN...

   Побитный AND сравнивает первый бит одного числа с первым битом
другого  числа.  Есле  оба  бита   равны   единице,   первый  бит
возвращаемого  значения  так же устанавливается  в  еденицу.  Эта
операция повторяется для  всех  32-х битов. Например результат 14
AND  7  равен 6, это  хорошо  видно  из  бинарного  представления
операции

14  0000 0000 0000 0000 0000 0000 0000 1110
 7  0000 0000 0000 0000 0000 0000 0000 0111
 6  0000 0000 0000 0000 0000 0000 0000 0110

/Примеры/
   300 IF length>9 AND wt>9 THEN PRINT "YES"

   100 IF X=2 AND cost>5 AND J=12 THEN PRINT "NO!!"

   В  последнем примере NO!! напечтается  только  при  выполнении
всех трех условий.

|||/Описание/|||
   Операция логического "И".

|||/Синтаксис/|||
   <num-var>=<numeric> AND <numeric>

   <testable   condition>=<testable   condition>   AND  <testable
condition>

   ----------------------------------------------------------

|||/ ASC/||| Американский Стандартный Код (ASCII)

/Назначение/
   Имеется два широко используемых метода  представления символов
(элементов типа А, Б, 5, ?,  и  т.д.). Для большинства это просто
символы!  Так  мы  можем  сказать, что D¤="H" означает "поместить
букву H в область памяти,  помеченную  D¤".  Компьютер  не  может
поместить  в  память просто символ, так как он оперирует только с
байтами (т.е. с  числами от 0 до 255). Вместо символа он помещает
число   соответстующее   сохраняемому   символу   (   символу   H
соответствует   число  72).  Каждый   символ   имеет   уникальное
соответствующее только иму значение, называемое ASCII кодом.

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

   PRINT ASC("H")

   Функция ASC возвращает код первого символа в строке аргумента.
Так

   PRINT (ASC("Good")

   возвращает 71, ASCII код символа "G".

   Обратный  процесс  преобразования  кода в  символ  выполняется
функцией CHR¤.

/Примеры/
 25 X=ASC ("Today")

650 value5=ASC(A¤)

|||/Описание/|||
   Функция возвращает ASCII код первого  сивола строки аргумента.
Если строка пустая, возвращается значение -1.

|||/Синтаксис/|||
   <num-var>=ASC(<string>)

   ----------------------------------------------------------

|||/ ASN/||| арксинус

/Назначение/
   Вычисление угла по синусу. Значение  возвращается  в радианах,
однако его можно перевести в градусы с  помощью  функции  DEG.  1
радиан   приблизительно  равен  57  7градусам.  Математики  часто
предпочитают работать с радианами.

/Примеры/
  340 J=ASN(0.3456)
   
   30 angle=DEG(ASN(.7654))

   PRINT ASN(.5)

|||/Описание/|||
   Функция    возвращает    арксинус   от   аргумента.   Резльтат
представляется в радианах.

|||/Синтаксис/|||
   <num-var>=ASN(<numeric>)

   ----------------------------------------------------------

|||/ ATN/||| арктангенс

/Назначение/
   Вычисление угла по тангенсу. Значение возвращается в радианах,
однако его можно перевести в градусы с помощью функции DEG.

/Примеры/
   1250 X=ATN(Y)
 
    240 value=DEG(ATN(2.31))

|||/Описание/|||
   Функция   возвращает   арктангенс   от   аргумента.  Результат
представляется в радианах

   ----------------------------------------------------------

|||/ AUTO/||| автоматический

/Назначение/
   При  вводе программы на Бейсике  в  память  компьютера  первая
строка как правило имеет номер 10, вторая - номер 20 и т.д. Чтобы
не вводить  номера  строк  в  ручную  используется  команда AUTO,
которая   нумерует   строки   автоматически.  По  умолчанию  AUTO
присваивает  первой  строке номер 10, следующим 20, 30, 40 и т.д.
Команда AUTO 455  присвоит  первой  строке  номер 455, затем 465,
475, 485 и т.д.

   Другой параметр позволяет пользователю задавть  шаг нумерации,
который по умолчанию равен 10. Таким  образом  команда AUTO 465,2
будет  нумеровать строки 465, 467, 469, 471 и  т.д.  Максимальный
размер шага равен 255.

   Для  прекравщения  автоматического  ввода  пользователь должен
нажать клавишу РЕД. Режим автоматического ввода прерывается, если
компьютер пытается сгенерировать строку с номером больше 32767.

/Примеры/

AUTO

AUTO 220

AUTO 105,5

|||/Синтаксис/|||
   AUTO[<num-const>[,<num-const>]]

|||/Описание/|||
   AUTO - это команда, позволяющая  пользователю  вводить  строки
программы  не  нумеруя  их.  Так как AUTO - команда, она не может
использоваться  в составной строке. Режим  AUTO  прерывается  при
нажатии клавиши РЕД или при достижении строки превышающей 32767.

   AUTO  может  иметь два параметра.  Первый  параметр  указывает
номер первой строки,  а  второй  параметр указывает шаг нумерации
строк.

   ----------------------------------------------------------

|||/ BGET#/||| взять байт из файла

/Назначение/
   Числа и слова могут быть  записаны  на дискетте. Функция BGET#
позволяет   считывать   одиночные  символы  или  числа  в  память
компьютера с дискетты или по локальной сети. Перед использованием
этого  оператора  необходимо  открыть  файл  с  помощью оператора
OPENIN,  в  противном  случае будет выдано сообщение  об  ошибке.
Когда  файл  открыт  оператором  OPENIN  для  обращения  к  файлу
выделяется  уникальный номер. Этот  номер  используется  во  всех
последующих операциях с открытым файлом, например прич чтении или
при записи в новый файл.

/Примеры/

6000 character=BGET# (channel)

 340 next_letter%=BGET#C

|||/Описание/|||
   Функция,  берущая  байт  из открытого  ранее  файла.  Аргумент
функции является номером открытого файла.

|||/Синтаксис/|||
   <num-var>=BGET#<num-var>

   -----------------------------------------------------------

|||/ BPUT#/||| поместить байт в файл

/Назначение/
   Для сохранения байта на дискетте.  Число,  помещаемое  в  файл
должно  иметь значение от 0 до 255. Если вы попытаетесь поместить
в файл  число, превышающее 255, из него будет вычитаться значение
256 до тех  пор,  пока  разность не станет меньше 256. Полученный
результат будет помещен в файл. (Этот оператор предназначен толко
бля  сохранения  байтов  -  небольших  чисел.   Для   больших   и
отрицательных чисел используйте оператор PRINT#.) Также, как и дл
BGET#  файл  должен  быть  педварительно  открыт,  но  оператором
OPENOUT.

/Примеры/

  30 BPUT# channel,number

 700 BPUT#N,32

 450 BPUT# STAFF_FILE,A/256

|||/Описание/|||
   Оператор,  который  помещает  байт в  файл.  Аргумет  является
номером файл. Файл необходимо предварительно открыть.

|||/Синтаксис/|||
   BPUT#<num-var>, <numeric>

   ----------------------------------------------------------

|||/ CALL/||| передача управления машинной подпрограмме

/Назначение/
   Этот   оператор   приказывает  компьютеру  выполнить  фрагмент
машинного  кода,  который  пользователь предварительно поместил в
память.  Прежде чем воспользоваться  этим  мощным  средством,  Вы
должны  хорошо   разобраться  в  принципах  работы  компьютера  и
программировании на ассемблере, так как некорректное использоваие
этого оператора  может  не только уничтожить Вашу программу, но и
"завесить" компьютер. К сожалению,  из-за  ограниченного  размера
данного  руководства  здесь  не  приводится подробное описание на
ассемблере.  Однако  в  14-й  главе   приведена   информация   по
программированию  на  ассемблере  специфичная  для   этой  версии
Бейсика.    Для   изучения   ассемблера   рекомендуется   изучить
соответствующую  документацию  ПЭВМ  АГАТ;  описание  "Диалоговый
Отладочный  Комплекс  (ДОК)  программной  системы "Школьница" для
ПЭВМ  "АГАТ""  (автор  В.А.Цикоза); книгу  "Язык  Ассемблера  для
персонального компьютера ЭПЛ" (автор  У.Морер),  а  также  другую
литературу по программированию процессора 6502. 

/Примеры/
  
  50 rotate=&0270
  60 CALL rotate,J,K,L
  
 200 CALL 1234,A¤,M,J¤

|||/Описание/|||
   Оператор обращения к машинной подпрограмме.  Число  параметров
переменно,   и    может  быть  равно  нулю.  Прараметры  являются
переменными,   и   могут  быть  изменены  в  процессе  выполнения
подпрограммы.  Адреса  параметров  передаются  в Блоке Параметров
начинающегося с &600.

   При  входе  в  подпрограмму  регистрам  процессора  A,  X,  Y,
присваиваются значения младших значащих байт  переменных A%, X% и
Y%.  Флаг  переноса устанавливается в ссответствии  с  состоянием
младшего значащего бита переменной C%.

   Перед вызовом подпрограммы компьютер создает  Блок Параметров,
содержащий следующие данные:

   Количество параметров - 1 байт
   адрес 1-го параметра  - 2 байта
   тип 1-го параметра    - 1 байт
   адрес 2-го параметра  - 2 байта
   тип 2-го параметра    - 1 байт
   ....................  - .......
   адрес N-го параметра  - 2 байта
   тип N-го параметра    - 1 байт

|||/Типы параметров/|||
     0-  8 бит байт (например ?X)
     4- 32 бит целая переменная (например !X или X%)
     5- 40 бит число с плавающей запятой (например V)
   128-  Строка  с заданным адресом  (например  ¤X-оканчивающаяся
&0D) 
   129- Символьная переменная (например A¤)

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

|||/Синтаксис/|||

   CALL <numeric>,{,<num-var>|<string-var>}

   -----------------------------------------------------------
[an error occurred while processing this directive]