Basic Commodore 64

 

COMMODORE64 BASIC

На этой странице я представляю Вашему вниманию краткое описание языка BASIC. Данное описание включает полный синтаксис С64 BASIC с небольшими комментариями. Данное описание будет состоять из разделов в соответствии с различными типами операций в BASIC. К ним относятся:

 

1. Переменные и операторы:        описаны различные типы переменных, имена переменных,

                                                         а также арифметические и логические операторы.

2. Команды:                                    описаны команды, используемые для работы с программами.

3. Утверждения (инструкции):     описаны основные положения, используемые в строках программы.

4. Функции:                                     описаны строковые, числовые и печатные функции.

 

 

ПЕРЕМЕННЫЕ


В BASIC С64 используются три типа переменных. Это числовые,   целые числовые и строковые (буквенно-цифровые) переменные. Имена переменных могут состоять из одной буквы, буквы и числа или двух букв. Целые переменные задаются с помощью знака процента (%) после имени переменной. Строковые переменные имеют знак доллара ($) после имени.

ПРИМЕРЫ
Числовые имена переменных: A,A5, BZ
Целые имена переменных: A%, A5%, BZ%
Строковые имена переменных: A$, А5$, BZ$

 

Массивы - списки переменных с одинаковым именем, используют числа, называемые индексами и указывают элемент массива. Массивы определяются DIM утверждением, и могут быть с плавающей точкой, целым числом или строковой переменной.  После имени переменной массива следуют круглые скобки () с определяющим числом - числом переменных в списке.

A(7), BZ% (11), A$ (50), PT (20,20)

 

Примечание: Есть три переменных, которые зарезервированы для использования в С64 и не могут быть заданы вами в качестве имени. Эти переменные: ST, TI и TI$. ST определяет статус переменной, которая связана с операцией ввода / вывода. Значение ST изменится, если возникнут проблемы с загрузкой программ с диска или ленты.
TI и TI$ являются переменными, которые относятся к реальному времени - часы встроенные в С64.Переменная TI обновляется  1/60-ую долю секунды. Она начинается с 0, при включении компьютера и сбрасывается только путем изменения значения TI$.

TI$ представляет собой строку, которая постоянно обновляется в системе. Первые два символа показывают количество часов, 3 и 4 символы количество минут, а 5 и 6 символы количество секунд. Этой переменной можно дать любое числовое значение, после чего она будет обновляться с заданной точки.
TI$ = "101530" устанавливает часы на 10:15 и 30 секунд утра.
Эти часы обнуляются при выключении компьютера, соответственно при включении значение TI$="000000".

 

 

ОПЕРАТОРЫ



Арифметические операторы включают в себя следующие символы:
+   Сложение
  Вычитание
*   Умножение
 /   Деление
  Возведение в степень


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

Есть также операции равенства и неравенства:

=    Равно
<    Меньше чем
   Больше чем
  Меньше или равно
>=  Больше или равно
< > Не равно

 

Наконец, есть три логических оператора:

and         и
or          или
not         не

Они используются чаще всего, чтобы объединить несколько формул в условии, IF ... THEN. Например:

IF A  =  B AND C = D THEN  100  (Требуется выполнение двух частей, чтобы выполнилось условие)

IF A  =  B OR C = D THEN  100  (Требуется выполнение одной из частей, чтобы выполнилось условие)

 

 

КОМАНДЫ



CONT (Continue)
Эта команда используется для перезапуска программы, которая была остановлена при помощи клавиши STOP, STOP утверждения или END утверждения в рамках программы. Программа продолжится с того места, с которого  она была прервана.

CONT не будет работать, если вы изменили или добавили строки в программе, или
программа остановилась из-за ошибки, или у Вас возникла ошибка перед тем, как Вы попытались перезапустить программу. В этих случаях вы получите сообщение CAN'T CONTINUE ERROR.

LIST

LIST команда позволяет вам взглянуть на строки BASIC программы, находящейся  в памяти С64. Вы можете задать команду для просмотра всей программы, или только определенных строк.

 

LIST                                  Показывает всю программу
LIST 10-                            Показывает от строки 10 до конца
LIST 10                             Показывает только строку 10
LIST -10                            Показывает строки от начала и до 10
LIST 10-20                        Показывает строки от 10 до 20 включительно

LOAD

Эта команда используется для загрузки программы с ленты или диска в память С64, чтобы с ней можно было работать. Если вы просто наберёте LOAD  и нажмёте RETURN, то первая программа,   которая находится на кассете будет загружена в память. Команда может использоваться с именем программы, заключенным в кавычки. После должна стоять запятая и номер или числовая переменная, которая указывает на устройство с которого идёт загрузка.

Если номера устройства нет, Commodore 64 предполагает, что это устройство 1, т.е. кассетник. Другое устройство, обычно используемое с командой LOAD, это №8, т.е. дисковод.

 

LOAD                          Загружает программу с кассеты
LOAD"HELLO"             Ищет программу с названием HELLO на кассете и если найдёт, то загружает
LOAD A$                     Ищет программу с именем - переменной A$
LOAD"HELLO",8          Ищет программу под названием HELLO на диске
LOAD"*",8                  Ищет первую программу на диске

 

Вторая цифра после номера устройства - 1, должна быть указана, если вы хотите загрузить программу в место её реального нахождения в памяти С64.(для машинного кода)

LOAD "ASSEMBLER",1,1          загрузка программы с кассеты без перемещения

 

 

NEW

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

Будьте осторожны при использовании этой команды.

Команда NEW также может быть использована, как утверждение Basic программы. Когда программа достигнет строки с этим утверждением, она будет стерта. Это интересно в том случае, когда Вы хотите, чтобы после завершения программы всё было чисто и аккуратно.

RUN

Эта команда запускает программу, которая находится в памяти С64. Если не указан номер строки после команды RUN, компьютер начнет с начала программы. Если номер строки обозначен, программа будет выполняться с указанной строки.

RUN                  Запуск программы
RUN 100           Запуск программы со строки 100
RUN X               UNDEFINED STATEMENT ERROR. Вы должны всегда указывать число -  

                                                                               номер строки, а не имя переменной

SAVE

Эта команда сохраняет программу находящуюся в памяти  С64 на кассету или диск.Если вы наберете SAVE и нажмёте RETURN, программа будет сохранена на кассету.Компьютер не знает есть ли уже сохранённая программа на кассете, поэтому будьте осторожны с кассетами, дабы не стереть полезную программу.Если вы наберете SAVE и заключите имя в кавычки, компьютер даст программе это имя, в дальнейшем это поможет более лёгкому поиску программы. Название может также сопровождаться номером устройства.После номера устройства может стоять запятая и второй номер, 0 и выше. Если второй номер 2, Commodore 64 поставит END-OF-TAPE маркер после вашей программы. Это даст сигнал компьютеру дальше не заниматься поиском программы на кассете, если вы вдруг дадите повторную команду LOAD. Если вы попытаетесь набрать LOAD, после обнаружения данного маркера, вы получите сообщение FILE NOT FOUND ERROR. (файл не найден, ошибка). Что интересно, при проверке лично мной, компьютер выдавал DEVICE NOT PRESENT ERROR.

SAVE                            запись программы на кассету без имени
SAVE"HELLO"               запись на кассету с именем HELLO
SAVE A$                       запись на кассету с именем  A$
SAVE"HELLO",8            запись на диск с именем HELLO
SAVE"HELLO",1,1         запись на кассету с именем HELLO в тоже место памяти

SAVE"HELLO",1,2         запись на кассету с именем HELLO и маркером END-OF-TAPE
SAVE"HELLO",1,3         тоже что и выше, но с перезагрузкой в тоже место памяти

VERIFY

С помощью этой команды компьютер сверяет программу сохранённую на диске или кассете с той что находится в  его памяти. Это делается для того, чтобы убедиться что программа была сохранена правильно, без каких либо повреждений, в случае если диск или кассета вдруг повреждены. VERIFY без имени проверяет любую программу на кассете с той, что в памяти Commodore 64.
VERIFY с именем программы или строковой переменной, будет искать нужную программу, а затем проверять. VERIFY также используется с номерами устройств.

 

VERIFY                              проверить программу на кассете
VERIFY"HELLO"                найти программу HELLO и проверить
VERIFY"HELLO",8             найти программу HELLO на диске и проверить

Чтобы проверить есть ли программа на кассете, наберите VERIFY и компьютер покажет, какие программы он нашел (если таковые имеются).

 

 

УТВЕРЖДЕНИЯ


CLOSE

Эта команда завершает и закрывает все файлы, используемые при OPEN утверждении.
Номер следующий за CLOSE закрывает открытый под этим номером файл.

CLOSE 2                    закрыть файл №2 (только №2 закрывается)

CLR

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

Это утверждение выполняется автоматически, когда выполняется команда RUN.

CMD

CMD направляет выходной поток, который обычно идёт на экран ( PRINT, LIST, но не POKE)

на другое устройство.
Это может быть принтер или файл с данными на диске. Это устройство или файл должны быть

открыты(OPEN). Утверждение CMD должно сопровождаться числом или

числовой переменной со ссылкой на файл.

OPEN  1,4                          Открыто устройства №4, это принтер

CMD 1                                Все результаты в настоящее время выходят на принтер

LIST                                   Листинг программы в настоящее время выходит на принтер,

                                          а не на экран

Чтобы послать выходной поток обратно на экран надо закрыть файл CLOSE 1.

 

DATA

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

DATA  12,  14.5, "HELLO, MOM", 3.14, PART1

DEF FN

Эта команда позволяет вам задать функцию для вычислений. В случае длинной формулы, которая будет неоднократно использоваться в течение программы, это может сэкономить время и пространство.Имя переменной в функции FN может быть любым именем переменной из одного или двух символов. Сначала вы должны задать функцию с помощью утверждения DEF. После ставите FN и в круглых скобках имя переменной. Затем следует фактическая формула с переменной. После этого можно "вызвать" формулу, подставив любое значение переменной.

10 DEF FNA(X)  =  25*(28 - X/3)

20 PRINT FNA(9)                          значение 9 подставляется вместо Х

DIM

Утверждение DIM задаёт массив. При использовании более 11 (0-10) элементов для переменной, вы должны задать утверждение DIM для массива. Имейте в виду, что весь массив занимает место в памяти, поэтому не создавайте массив больше, чем нужно. Чтобы понять кол-во переменных, созданных с DIM, перемножьте числа элементов плюс по одному в каждой размерности массива.

 

10 DIM A$(40), 87(15), CC%(4,4,4)

                  41         16                125 элементов

 

END

Когда программа обнаруживает END утверждение, она останавливается  как, если бы, закончились строки программы. Вы можете использовать CONT, чтобы продолжить программу.

 

FOR  .. .  TO  ...  STEP

Это утверждение работает с утверждением NEXT и предназначено для повтора раздела программы определенное количество раз. Имеет следующий формат:

FOR (имя переменной)  =  (начало отсчёта) TO  (конец отсчёта) STEP (с шагом)

Переменная цикла увеличивается или уменьшается в ходе программы.
Без указания STEP (шага), STEP считается равным 1. Начало отсчёта и конец отсчёта лимитируется значением переменной цикла.

10 FOR X  =  1  TO  10  STEP  .1

20 PRINT X

30 NEXT X

В цикле после слова  STEP может ставиться число или имя переменной. В этом случае значение переменной цикла увеличивается каждый раз на значение этой цифры или переменной, а не на 1. Это позволяет считать и в обратном направлении.

 

GET

GET утверждение позволяет считывать данные с клавиатуры - один символ за один раз. Когда GET выполняется, символ, который набран (нажат), присваивается переменной. Если набран не тот символ, то переменной присваивается нулевое значение.

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

10 GET A$:  IF A$  =  ""THEN  10

 

GET#

GET# утверждение используется с ранее открытым устройством или файлом, для ввода по одному символу за раз с этого устройства или файла.

GET#1 ,A$

 

GOSUB

Это утверждение похоже на GOTO, только компьютер запоминает место (строку) в которой стоит утверждение GOSUB. Когда программа встречает утверждение RETURN, то возвращается к месту, где использовалось GOSUB  и продолжает выполняться дальше, сразу же после GOSUB. Это полезно, если в вашей программе выполняется одно и то же действие несколько раз. Вместо ввода «повторов» программы можно обращаться, так сказать, к подпрограмме с помощью GOSUB утверждения.

20 GOSUB 1000

 

GOTO или GO TO

Это утверждение отсылает программу на строку, указанную сразу после GOTO. Программа будет продолжать работать с указанной строки.

20 GOTO 100

 

IF ...THEN

IF ... THEN позволяет компьютеру проанализировать ситуацию и принять один из двух возможных вариантов действий в зависимости от результата. Если выражение истинно, то выполняется действие следующее за THEN. Оно может быть любым BASIC утверждением. Если выражение ложно, программа переходит непосредственно к следующей строке. Выражение может быть переменной или формулой. В большинстве случаев, это выражение с участием операторов отношения (=, <,>, ,> =, <>, AND, OR, NOT).

10 IF X  >  10 THEN END

 

INPUT

INPUT утверждение позволяет программе получить данные от пользователя и присвоить их переменной. Программа остановится, после знака вопроса (?) Вы увидите курсор на экране, и будет ждать, пока пользователь введёт ответ и нажмёт RETURN. После INPUT должно быть имя переменной, или список имен переменных, разделенных запятыми. Сообщение с утверждением INPUT должно быть помещено в кавычки.

10 INPUT "PLEASE ENTER YOUR FIRST NAME";A$

20 PRINT "ENTER YOUR CODE NUMBER";:INPUT B

 

INPUT#

INPUT# утверждение похоже на INPUT, но берет данные из ранее открытых файлов.

10 INPUT#1, A

 

LET

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

10  LET A = 5

20  LET D$  =  "HELLO"

 

 

NEXT

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

10 FOR X  =  1  TO 100: NEXT

 

ON

Эта команда работает с GOTO и GOSUB командами в неком подобии оператора IF. ON сопровождается формулой, которая вычисляется. Если результат расчета равен одному, то первая строка в списке выполняется, если результат равен 2, вторая строка будет выполнена, и так далее. Если результат равен 0, отрицателен или больше, чем список номеров, выполняться будет следующая строка за утверждением ON.

10 INPUT X

20 ON X GOTO  10,20,30,40,50

 

OPEN

OPEN утверждение даёт доступ к устройствам, таким как диск, принтер или даже экран. OPEN сопровождается номером (0-255), к которому будут относиться все последующие утверждения. Как правило, ставится второй номер, следующий после первого, которым и является устройство.

Номера устройств:

0  Экран

Принтер

8  Диск

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

 

10 OPEN  1,0                       Открывает экран в качестве устройства

20 OPEN  2,8,8,"D"             Открывает диск для чтения, файл для поиска «D»

30 OPEN  3,4                       Открывает принтер

40 OPEN 4,8,15                   Открывает канал передачи данных на диске

 

POKE

POKE всегда сопровождается двумя цифрами, или формулой. Первое значение - место в памяти, второе - десятичное число от 0 до 255, которое будет помещено в ячейку памяти, заменяя все ранее сохраненные значения.

10 POKE 53281 ,0

20 S = 4096*13

30  POKE S + 29,8

 

PRINT

PRINT утверждение - это первое с чем знакомится большинство людей при программировании. Есть несколько вариантов использования PRINT утверждения.

PRINT может сопровождаться:

-текстовой строкой с кавычками
-именами переменных
-функциями
-знаками препинания

Знаки препинания используются, чтобы помочь размещать данные на экране.
Запятыми экран делится на четыре колонки, в то время как точка с запятой убирает все пробелы. Любой знак может быть последним символом в строке. Это будет означать, что напечатанные символы будут продолжением утверждения PRINT.
10  PRINT "HELLO"

20  PRINT "HELLO",A$

30  PRINT A+ B

40  PRINT J;

50  PRINT A,B,C,D

 

PRINT#

Есть несколько отличий между этим утверждением и PRINT. PRINT# сопровождается номером, который относится к устройству или файлу данных открытому ранее. За числом следует запятая, а за ней информация для печати (текстовые строки, переменные, функции). Запятая и точка с запятой имеют такой же эффект, как с утверждением PRINT.

10  PRINT#1 ,"DATA  VALUES"; A%,  B1 , C$

 

 

READ

READ используется для присвоения переменным информации из DATA утверждения, для дальнейшего использования. Необходимо соблюдать осторожность при присвоении значений переменным, в противном случае получите ошибку «TYPE MISMATCH ERROR.» (несоответствие типов).

 

REM

REM - Замечание (ремарка) для тех, кто смотрит листинг программы. Это может быть простой раздел программы, или дополнительные инструкции. REM утверждение никоим образом не влияет на работу программы, за исключением увеличения её длины. За REM может следовать любой текст.

 

RESTORE

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

 

RETURN

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

«RETURN WITHOUT GOSUB ERROR.» (RETURN без GOSUB).

 

STOP

Это утверждение останавливает выполнение программы. Сообщение «BREAK IN ххх» появится на экране после выполнения этого утверждения, где ххх номер строки содержащей STOP. Программа может быть перезапущена с помощью CONT команды. STOP, как правило, используется при отладке программы.

 

SYS

За SYS следует десятичное число или числовое значение в диапазоне 0-65535. С указанного адреса начнётся выполнение программы машинного языка. Это утверждение похоже на функцию USR, но не разрешает передачу параметров.

 

WAIT

WAIT используется для остановки программы и ожидания, пока содержимое ячейки памяти изменится определенным образом. За WAIT стоит ячейка памяти (X) и возможно применение до двух переменных. Имеет утверждение следующий формат:

WAIT X,Y,Z

Содержимое ячейки памяти сверяется при помощи OR оператора с третьей переменной, если она присутствует, а затем с помощью  AND со второй переменной.

Если результат нулевой, программа ждёт и проверяет снова. Если результат не равен нулю, программа продолжает выполняться дальше.

 

 

ЧИСЛОВЫЕ ФУНКЦИИ


ABS(X)

ABS возвращает абсолютное значение числа без знака (+ или -),ответ всегда положительный.

ATN(X) (арктангенс)

Возвращает угол в радианах, тангенс которого равен X.

COS(X) (косинус)

Возвращает значение косинуса X, где Х угол, измеряемый в радианах.

EXP(X)

Возвращает значение математической электронной константы (2.71828183) возведённую в степень Х.

FN xx(X)

Возвращает значение пользовательской функции хх созданой в DEF FNxx (X) утверждении.

INT(X)

Возвращает значение X без значения после запятой, то есть все числа после запятой будут удалены. Например INT(5.325) будет равно 5, при этом INT(-5.325) будет равно -6.

LOG(X) (логарифм)

Возвращает натуральный логарифм X.

PEEK(X)

Используется, чтобы узнать содержимое памяти в X ячейке, в диапазоне 0-65535, давая результат в диапазоне 0-255. PEEK часто используется в сочетании с POKE утверждением.

RND (X) (случайное число)
RND (X) возвращает случайное число в диапазоне 0-1.

Формула для генерации числа между X и Y выглядит так:

N  =  RND(1)*(Y-X)+X ,где

У – верхний диапазон числа
X - является нижним диапазоном числа.

SGN(X) (знак)
Эта функция возвращает знак (положительный, отрицательный или нуль) X. В результате получится +1, если положительный, 0, если нуль и -1, если отрицательный результат.

SIN(X) (синус)
SIN(X) тригонометрическая функция синуса. В результате получите синус X, где X угол в радианах.

SQR (X) (квадратный корень)
Эта функция возвращает квадратный корень из Х, где Х является положительным числом или 0. Если X имеет отрицательное значение, компьютер выдаст ошибку  ILLEGAL QUANTITY ERROR (недопустимое значение).

TAN (X) (тангенс)
В результате получите тангенс X, где Х угол в радианах.

USR (X)
Когда эта функция используется, программа переходит на машинный язык программирования, начальная точка которого содержится в памяти.

Параметр X передается в программу на машинном языке, который вернет другое значение основной программе (требуется изучения машинного языка).

 

ФУНКЦИИ ОБРАБОТКИ СТРОК


 

ASC(X$)
Эта функция возвращает ASCII код первого символа X$.

CHR$(X)
Эта функция противоположна ASC(X$) и возвращает строчный символ ASCII код которого X.

LEFT$(X$,X)
Возвращает X символов с левой стороны строки X$.

LEN(X$)
Будет возвращено количество символов (включая пробелы и другие символы) строки X$.

MID$(X$,Y,X)

Возвращает  X символов строки, начиная с Y символа строки.

RIGHT$(X$,X)

Возвращает X символов с правой стороны строки X$.

STR$(X)

Возвращает значение идентичное печатной версии для X.

VAL(X$)
Эта функция преобразует X$ в числа, и, по сути, является обратной операцией STR$. Строка рассматривается с первого символа слева на право, выводит столько символов, сколько находится в узнаваемом формате.

10 X = VAL("123.456")                       X  =  123.456

10 X = VAL("12A13B")                        X  =  12

10 X = VAL("RIU017")                        X  =  0

10 X = VAL(" -1.23.45.67")                X  =  -1 .23

 

ДРУГИЕ ФУНКЦИИ


 

FRE(X)

Эта функция возвращает количество неиспользованных в памяти байт, независимо от значения X. Заметим, что результат FRE(X) будет в отрицательных числах, если количество неиспользованных байт больше 32Kb.

POS(X)
Эта функция возвращает номер столбца (0-39), при котором следующее PRINT утверждение будет выводиться на экран. X может иметь любое значение.

SPC(X)

Используется с PRINT утверждением, чтобы пропустить X пробелов (символов)  вперед.

TAB (X)
TAB также используется с PRINT утверждением, символ для печати будет находиться в колонке X.

 

 

 

 

 

 

 

 

 

Яндекс.Метрика