Sinclair BASIC - Sinclair BASIC
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Парадигма | Императив |
---|---|
Разработано | Джон Грант, Стив Викерс |
Разработчик | Девять Тайлов Сети, Sinclair Research |
Впервые появился | 1979 |
Платформа | ZX80, ZX81, ZX Spectrum |
Лицензия | Проприетарный |
Sinclair BASIC это диалект языка программирования БАЗОВЫЙ используется в 8 бит домашние компьютеры из Sinclair Research и Timex Sinclair. Бейсик Синклера переводчик был сделан Nine Tiles Networks Ltd.[1]
История
Sinclair BASIC был первоначально разработан в 1979 году для ZX80 пользователя Nine Tiles. Программистами были Джон Грант, владелец Nine Tiles, и Стив Викерс.
Первоначально это была неполная реализация модели 1978 года. Американский национальный институт стандартов (ANSI) минимальный стандарт BASIC только с целочисленной арифметикой, названный 4K BASIC (для размера ПЗУ) для ZX80. Он развился через 8K BASIC с плавающей запятой для ZX81 и TS1000 (который также был доступен в качестве обновления для ZX80[2]), и стала почти полной версией в ПЗУ 16 КБ. ZX Spectrum. Он присутствует во всех совместимых устройствах ZX Spectrum.
По состоянию на 2015 год существуют интерпретаторы для современных операционных систем и более старых систем, которые позволяют легко использовать Sinclair Basic.
Синтаксис
Программисты-новички на BASIC могут начать с простой программы, возможно, используя оператор PRINT языка для отображения сообщения на экране; хорошо известный и часто повторяющийся пример Керниган и Ричи с Привет, мир программа:
10РАСПЕЧАТАТЬ"Привет, мир!"
Ключевые слова
На ZX Spectrum 16K / 48K в Sinclair BASIC имеется 88 ключевых слов, обозначающих команды (из которых 50), функции и логические операторы (31), а также другие ключевые слова (16, включая 9, которые также являются командами или функциями):
Ключевое слово | Параметры[примечание 1] | Вступил с использованием[заметка 2] | Тип | Резюме |
---|---|---|---|---|
АБС | количество | РАСШИРЕННЫЙ РЕЖИМ тогда г | Функция | Возвращает абсолютная величина из количество [3] |
ACS | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+W | Функция | Возвращает арккозин из количество [4] |
И | СМЕНА СИМВОЛА+Y | Логический оператор | Возвращает истину, если оба условия по обе стороны от И ключевое слово истинно, иначе возвращает ложь[заметка 3][5] | |
ASN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Q | Функция | Возвращает арксинус из количество [6] |
В | строка, столбец; | СМЕНА СИМВОЛА+я | Другой | Используется в РАСПЕЧАТАТЬ оператор для печати в указанной строке и столбце;[7] Например, ПЕЧАТЬ НА 5,10; "*" помещает звездочку в столбец 10 строки 5. |
ATN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+E | Функция | Возвращает арктангенс из количество [4] |
ATTR | (строка, столбец) | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+L | Функция | Возвращает байт содержащую информацию о цветах текстовой ячейки на экране, соответствующие заданному линия и столбец ; обратите внимание, что, в отличие от большинства ключевых слов Sinclair BASIC, круглые скобки обязательны; первые три бита указывают цвет чернил (переднего плана), четвертый, пятый и шестой биты - цвет бумаги (фона), седьмой бит - яркость цветов или нет, а восемь - мигают ли они[8] |
BEEP | продолжительность, шаг | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Z | Команда | Воспроизводит звук из динамика компьютера; продолжительность в секундах, шаг в полутоны выше (положительное значение) или ниже (отрицательное значение) средний C[9] |
BIN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда B | Другой | Указывает количество в двоичная запись[10] |
ГРАНИЦА | количество | B | Команда | Задает цвет внешней границы экрана, заданный параметром количество [примечание 4][11] |
ЯРКИЙ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+B | Команда / другое | Делает все следующие цвета ярче, если количество равно 1, или его нормальный оттенок, если 0[примечание 5][12] |
КОТ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+9 | Команда | Отображает содержимое ZX Microdrive указано количество [примечание 6][13] |
CHR $ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда W | Функция | Возвращает символ, соответствующий десятичной дроби. количество в компьютере набор символов[14] |
КРУГ | х, у, г | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+ЧАС | Команда | Рисует круг с центром в координатах (Икс ,у ) и радиус р [15] |
ЧИСТО | адрес | Икс | Команда | Очищает экран,[16] все переменные и ПЕРЕЙТИ куча,[17] и дополнительно устанавливает максимальный адрес RAM, который будет использоваться BASIC[18] |
ЗАКРЫТЬ # | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+5 | Команда | Закрывает указанный номер потока для доступа[примечание 6] |
CLS | V | Команда | Удаляет весь текст и графику с экрана[16] | |
КОД | нить | РАСШИРЕННЫЙ РЕЖИМ тогда я | Функция / другое | Возвращает число, соответствующее первому символу в нить в компьютере набор символов;[14] также используется для сохранения произвольных фрагментов памяти на ленту, диск и т. д. и загрузки их обратно - см. ЗАГРУЗИТЬ , СПАСТИ и ПРОВЕРИТЬ для подробностей |
ПРОДОЛЖИТЬ | C | Команда | Перезапускает программу после ее остановки из-за ошибки или нажатия пользователем кнопки CAPS SHIFT+КОСМОС или ПЕРЕРЫВ ключи[19] | |
КОПИРОВАТЬ | Z | Команда | Отправляет текущий отображаемый экран на принтер[20] | |
COS | количество | РАСШИРЕННЫЙ РЕЖИМ тогда W | Функция | Возвращает косинус из количество [21] |
ДАННЫЕ | значения, разделенные запятыми | РАСШИРЕННЫЙ РЕЖИМ тогда D | Команда / другое | Предоставляет числа и / или строки для использования с ЧИТАТЬ команда[22] и позволяет сохранять содержимое массива на ленту при использовании с СПАСТИ команда[23] (так как СОХРАНИТЬ имя файла DATA имя массива () |
DEF FN | имя (переменная) = операция | РАСШИРЕННЫЙ РЕЖИМ тогда 1 | Команда | Определяет настраиваемую функцию, которую можно использовать с FN команда; определения функций должны иметь форму f (x) = операции , Например е (х) = х * 2 и имя функции не может состоять более чем из одной буквы плюс $ -символ, если функция возвращает строку[24] |
Тусклый | переменная (размеры) | D | Команда | Объявляет массив с указанным Габаритные размеры , который может быть многомерным (например, РАЗМЕР А (10,10) ; если используется со строками, последнее измерение указывает длину каждой из строк (таким образом, РАЗМЕР А $ (2,5) представляет собой массив из двух строк по пять символов каждая, и DIM b $ (5) это одна строка из пяти символов)[25] |
РИСОВАТЬ | х, у [, г] | W | Команда | Рисует линию в текущем Чернила цвет в координаты (Икс ,у ) от координат, использованных предыдущим УЧАСТОК или РИСОВАТЬ команда; если необязательный р поставляется, он указывает радиус рисуемого сегмента круга в радианы[26] |
СТЕРЕТЬ | диск; "имя файла" | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+7 | Команда | Удаляет указанный файл из ZX Microdrive[примечание 6][27] |
EXP | количество | РАСШИРЕННЫЙ РЕЖИМ тогда Икс | Функция | Возврат е к власти количество [28] |
ВСПЫШКА | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+V | Команда / другое | Делает весь следующий текст чередующим его передний план (Чернила ) и фон (БУМАГА ) цвета[примечание 5] |
FN | функция (значение) | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+2 | Функция | Вызывает функция определено ранее в программе с помощью DEF FN [24] |
ФОРМАТ | диск; "имя" | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+0 | Команда | Форматирует картридж в указанном Microdrive и присваивает ему идентификатор имя [примечание 6][29] |
ДЛЯ | переменная = начало ДО конец | F | Команда | Начинает ДЛЯ -СЛЕДУЮЩИЙ петля;[30] имя переменной может состоять только из одного символа[31] |
ПЕРЕЙТИ | количество | ЧАС | Команда | Заставляет программу перейти к строке BASIC, указанной количество ; когда программа встречает команду ВЕРНУТЬ , он вернется к оператору после ПЕРЕЙТИ [32] |
ИДТИ К | количество | г | Команда | Заставляет программу перейти к строке BASIC, указанной количество |
ЕСЛИ | состояние ТО | U | Команда | Оценивает состояние , а если истина, выполняет оператор, следующий за ключевым словом ТОГДА это должно произойти после состояния,[33] Например ЕСЛИ a = 1, ТО ПОЗВОЛЯЕМ b = 2 [примечание 7] |
В | адрес | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+я | Функция | Возвращает байт читать с оборудования порт ввода / вывода соответствующий адрес [34] |
Чернила | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Икс | Команда / другое | Устанавливает цвет переднего плана для текста и графики[примечание 4][примечание 5][35] |
INKEY $ |
| РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Z | Функция | Возвращает строку, представляющую клавишу, нажатую на клавиатуре в момент вызова функции, или пустую строку, если ее нет,[36] но не ждет нажатия клавиши |
ВХОД | [подсказка,] переменная | я | Команда | Останавливает выполнение программы до тех пор, пока пользователь не наберет что-нибудь на клавиатуре и не нажмет Войти ключ, затем сохраняет введенное значение в указанном переменная ; если необязательный незамедлительный поставляется, это будет показано на экране[37] |
INT | количество | РАСШИРЕННЫЙ РЕЖИМ тогда р | Функция | Возвращает целое число ценность количество с округлением до ближайшего целого числа[3] (таким образом, ИНТ -1,1 возвращает −2, а не −1) |
ОБРАТНЫЙ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+M | Команда / другое | Меняет местами цвета всего последующего текста, если количество равно 1, поэтому он использует текущий цвет чернил для фона и текущий цвет бумаги для текста или устанавливает их обратно в нормальное состояние, если количество 0[примечание 5][38] |
LEN | нить | РАСШИРЕННЫЙ РЕЖИМ тогда K | Функция | Возвращает количество символов (байтов) в нить [39] |
ПОЗВОЛЯТЬ | переменная = значение | L | Команда | Назначает ценность к названной переменной[40] |
ЛИНИЯ |
| РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+3 | Другой |
|
СПИСОК | [номер] | K | Команда | Выводит текущую программу BASIC на экран; если необязательный количество предоставляется, он пропускает все строки с меньшим номером[42] |
СПИСОК | [номер] | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+V | Команда | Так как СПИСОК кроме того, что распечатка выводится на принтер[20] |
LN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Z | Функция | Возвращает натуральный логарифм из количество [43] |
ЗАГРУЗИТЬ | "[имя файла]" [КОД [адрес [, длина]] | Переменная DATA ()] | J | Команда | Загружает программу или данные в RAM с ленты, ZX Microdrive, disk и т. д., удалив любую существующую программу и переменные BASIC;[37] если пустая строка ("" ), загружает первую найденную программу, иначе она будет искать на ленте программу, указанную в строке; если необязательный КОД предоставлен, загрузит программу в память по тому адресу, который был у нее при сохранении, или по указанному адрес (длина предназначен для обеспечения безопасности, чтобы попытаться загрузить правильную программу в случае, если на ленте их несколько с правильным именем, но разной длины);[44] если необязательный Переменная DATA () предоставлен, загрузит данные с ленты в массив с именем Переменная() [23] |
LPRINT | текст | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+C | Команда | Так как РАСПЕЧАТАТЬ кроме вывода на принтер[20] |
ОБЪЕДИНЕНИЕ | "[имя файла]" | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+Т | Команда | Так как ЗАГРУЗИТЬ , за исключением того, что не удаляет текущую программу и переменные; если номер строки существует в обоих, то новая загруженная программа перезаписывает существующую[45] |
ШАГ | поток1 ДО поток2 | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+6 | Команда | Перемещает данные из одного потока (клавиатура, экран, файл, принтер, сеть и т. Д.) В другой[примечание 6][46] |
НОВЫЙ | А | Команда | Удаляет текущую программу BASIC и все переменные[37] | |
СЛЕДУЮЩИЙ | переменная | N | Команда | Закрывает ДЛЯ -СЛЕДУЮЩИЙ петля; переменная должна соответствовать переменной соответствующей ДЛЯ команда[47] - "пустой" СЛЕДУЮЩИЙ s для ссылки на непосредственно предшествующий ДЛЯ в программе не допускаются |
НЕ | состояние | СМЕНА СИМВОЛА+S | Логический оператор | Возвращает истину, если состояние ложно, иначе возвращает ложь[заметка 3][5] |
ОТКРЫТО # | транслировать | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+4 | Команда | Открывает поток для чтения и / или записи в[примечание 6][48] |
ИЛИ ЖЕ | СМЕНА СИМВОЛА+Y | Логический оператор | Возвращает истину, если любое из условий по обе стороны от ИЛИ ЖЕ ключевое слово истинно, иначе возвращает ложь[заметка 3][5] | |
ВНЕ | адрес, значение | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+О | Команда | Отправляет ценность (а байт ) к оборудованию [ввод-вывод с отображением памяти | порт ввода-вывода], соответствующий адрес [34] |
НАД | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+N | Команда / другое | Сделает следующий текст поверх того, что уже отображается на экране, с помощью операции XOR, если количество равно 1, вместо его стирания, или стереть, если количество 0[примечание 5][38] |
БУМАГА | количество | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+C | Команда / другое | Устанавливает цвет фона для текста и графики[примечание 4][примечание 5][35] |
ПАУЗА | задержка | M | Команда | Останавливает выполнение программы на указанную задержку в секунды в Европе или в Северной Америке[49] (таким образом, ПАУЗА 50 останавливается на одну секунду в Европе) |
PEEK | адрес | РАСШИРЕННЫЙ РЕЖИМ тогда О | Функция | Возвращает байт, представляющий содержимое ячейки памяти, на которую указывает адрес [50] |
ПИ |
| РАСШИРЕННЫЙ РЕЖИМ тогда M | Функция | Возвращает значение Пи[43] |
УЧАСТОК | х, у | Q | Команда | Рисует пиксель в текущем Чернила цвет на экране в координатах (Икс ,у )[51] |
ТОЧКА | (х, у) | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+8 | Функция | Возвращает 1, если пиксель указывает на графические координаты (Икс ,у ) в настоящее время имеет цвет чернил (переднего плана), иначе возвращает 0[15] |
POKE | адрес, значение | О | Команда | Устанавливает содержимое адрес в ОЗУ в ценность [52] |
РАСПЕЧАТАТЬ | [AT x, y;] текст | п | Команда | Печать текст (которое должно быть строкой или числом) на экран;[40] если используется с В , будет печататься с указанными текстовыми координатами, иначе в первом столбце строки после того, который использовался последним РАСПЕЧАТАТЬ заявление[7] |
Рандомизировать | [номер] | Т | Команда | Инициализирует генератор случайных чисел; при использовании без количество (или с 0), он делает это на основе внутренних часов компьютера, иначе он использует количество поставлено, которое должно быть в диапазоне [1,65535][53] |
ЧИТАТЬ | переменная | РАСШИРЕННЫЙ РЕЖИМ тогда А | Команда | Принимает значение из ДАННЫЕ оператор и сохраняет его в названном переменная : первый раз ЧИТАТЬ используется, получает первое значение после первого ДАННЫЕ , второй раз будет следующий и так далее[22] |
REM | текст | E | Команда | Начинает комментарий в исходном коде, что означает, что все после REM оператор игнорируется до конца строки[37] - обратите внимание, это включает все, что находится после двоеточия, которое обычно начинается с нового сегмента: 10 REM Здесь нечего смотреть: ПЕЧАТЬ "Непечатаемые" не будет производить никакого вывода, например |
ВОССТАНОВИТЬ | [номер] | РАСШИРЕННЫЙ РЕЖИМ тогда S | Команда | Сбрасывает где ЧИТАТЬ команды ищут значения в ДАННЫЕ операторы: если используется без номера, следующий ЧИТАТЬ будет использовать первый ДАННЫЕ в программе с номером будет использоваться первый ДАННЫЕ на или после строки, номер которой указан[54] |
ВЕРНУТЬ | Y | Команда | Возвращает выполнение к первому оператору, следующему за последним ПЕРЕЙТИ команда, которая была выполнена[32] | |
RND |
| РАСШИРЕННЫЙ РЕЖИМ тогда Т | Функция | Возвращает псевдослучайное число с восемью значимые фигуры в диапазоне [0,1)[55] |
БЕГАТЬ | [номер] | р | Команда | Запускает текущую программу BASIC с ее первой строки, если нет количество указан, иначе из строки с этим номером (или первой после, если он не существует)[56] |
СПАСТИ | Номер строчки] | S | Команда | Сохраняет текущую программу BASIC на ленту или другое запоминающее устройство с имя файла указано; если необязательный ЛИНИЯ за которым следует номер строки, тогда программа запустится автоматически с указанного номера строки, когда ЗАГРУЗИТЬ Эд вернулся; с необязательным ДАННЫЕ , команда сохраняет содержимое массива, названного переменной, вместо текущей программы BASIC[23] |
ЭКРАН $ | [(строка, столбец)] | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+ | Функция / другое | В качестве функции определяет символ в указанной строке и столбце на экране.[7] Используется после имени файла в ЗАГРУЗИТЬ или СПАСТИ команда, указывает, что содержимое дисплей памяти следует загрузить или сохранить; это, по сути, делает его ярлыком для КОД 16384,6912 [примечание 8] но не работает с ПРОВЕРИТЬ поскольку содержимое памяти дисплея будет другим к тому времени, когда эта команда считывает сохраненные данные;[57] |
SGN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда F | Функция | Возвращает 1, если количество положительно, 0, если оно равно 0, и -1, если оно отрицательно[3] |
ГРЕХ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда Q | Функция | Возвращает синус из количество [21] |
ШАГ | количество | СМЕНА СИМВОЛА+D | Другой | Указывает интервал, используемый ДЛЯ заявление,[31] Например ДЛЯ n = 2 ДО 6 ШАГ 2 пропущу п = 3 и п = 5 в петле |
СТОП | СМЕНА СИМВОЛА+А | Команда | Завершает выполнение текущей программы, выходя в редактор BASIC; также можно указать, когда компьютер ожидает ввода, используя ВХОД команда;[56] после остановки программы ее можно возобновить, нажав ПРОДОЛЖИТЬ | |
SQR | количество | РАСШИРЕННЫЙ РЕЖИМ тогда ЧАС | Функция | Возвращает квадратный корень из количество [24] |
STR $ | количество | РАСШИРЕННЫЙ РЕЖИМ тогда Y | Функция | Возвращает символ из набор символов компьютера соответствующий количество [58] |
TAB | столбец | РАСШИРЕННЫЙ РЕЖИМ тогда п | Другой | В РАСПЕЧАТАТЬ оператор, гарантирует, что текст для вывода начинается в указанном столбце, при необходимости переносится на следующую строку, но не более одной строки[16] |
TAN | количество | РАСШИРЕННЫЙ РЕЖИМ тогда E | Функция | Возвращает касательная из количество [59] |
ТОГДА | заявление | СМЕНА СИМВОЛА+г | Другой | Соответствует условию в ЕСЛИ заявление, чтобы указать, что должно произойти, когда условие оценивается как истинное[примечание 7][33] |
К |
| СМЕНА СИМВОЛА+F | Другой | Указывает диапазон от числа слева от К до числа правого включительно;[60] при использовании с ДЛЯ должны быть предоставлены оба числа, в то время как, если они используются для нарезки строк, любой может быть оставлен, чтобы указать начало или конец строки |
USR | строка или адрес | РАСШИРЕННЫЙ РЕЖИМ тогда L | Функция | При вызове с односимвольной строкой возвращает адрес памяти, по которому глиф для определяемого пользователем графического символа, соответствующего этому символу.[10] При вызове с адреса начинается Машинный код выполнение по этому адресу (что делает его одной из немногих функций Sinclair BASIC, которая имеет Побочный эффект ) и возвращает содержимое Z80 BC регистр пара.[61] |
ВАЛ | нить | РАСШИРЕННЫЙ РЕЖИМ тогда J | Функция | Оценивает нить как число и возвращает результат;[62] это может выполнять вычисления: ВАЛ "1 + 2" возвращает 3, например, а также оценивает переменные и даже другие ВАЛ заявления: Пусть a = 1: VAL "a + VAL" "2" "" [примечание 9] также возвращает 3 |
VAL $ | нить | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+J | Функция | Похожий на ВАЛ но оценивает строку как строку[3] |
ПРОВЕРИТЬ | "[имя файла]" | РАСШИРЕННЫЙ РЕЖИМ тогда СМЕНА СИМВОЛА+р | Команда | Читает программу с магнитной ленты или другого хранилища, как и ЗАГРУЗИТЬ , но вместо загрузки в память сравнивает его с программой, которая в данный момент находится в памяти; это предназначено для того, чтобы убедиться, что программа была СПАСТИ d правильно[63] |
Ввод ключевого слова
В моделях 48K и старше ключевые слова вводятся через уникальную систему ввода ключевых слов Sinclair, как указано в таблице. Для наиболее распространенных команд достаточно одного нажатия клавиши; например, нажатие только п в начале строки на Спектруме производит полную команду РАСПЕЧАТАТЬ
. Менее частые команды требуют более сложных комбинаций клавиш: BEEP
(например) вводится нажатием CAPS SHIFT плюс СМЕНА СИМВОЛА для доступа к расширенному режиму (более поздние модели включают РАСШИРЕННЫЙ РЕЖИМ ключ), сохраняя СМЕНА СИМВОЛА удерживается и нажимает Z. Ключевые слова имеют цветовую кодировку на оригинальной клавиатуре Spectrum, чтобы указать, какой режим требуется:[64]
- Белый: только ключ
- Красный на самом ключе: СМЕНА СИМВОЛА плюс ключ
- Зеленый над ключом: РАСШИРЕННЫЙ РЕЖИМ за которым следует ключ
- Красный под ключом: РАСШИРЕННЫЙ РЕЖИМ с последующим СМЕНА СИМВОЛА плюс ключ
ZX81 8K BASIC использовал более короткие формы ПЕРЕЙТИ К
, GOSUB
, ПРОДОЛЖЕНИЕ
и RAND
, тогда как Spectrum использовал более длинные формы ИДТИ К
, ПЕРЕЙТИ
, ПРОДОЛЖИТЬ
и Рандомизировать
. ZX80 4K BASIC также использовал эти более длинные формы, но отличался написанием СЛУЧАЙНО
. ZX81 8K BASIC была единственной версией, которую использовали БЫСТРЫЙ
, ПРОКРУТКА
, МЕДЛЕННЫЙ
и UNPLOT
. ZX80 4K BASIC имел эксклюзивную функцию TL $ ()
; это было эквивалентно строковому оператору (2 ТО)
в более поздних версиях.
Уникальные кодовые точки назначаются в Набор символов ZX80, Набор символов ZX81 и Набор символов ZX Spectrum для каждого ключевого слова или многосимвольного оператора, т.е. <=
, >=
, <>
, ""
(токенизировано только на ZX81), **
(заменено на ↑
на Спектруме). Они расширяются путем ссылки на таблицу токенов в ПЗУ. Таким образом, ключевое слово использует только один байт памяти, что является значительной экономией по сравнению с традиционным побуквенным хранением. Это также означало, что БЕЙСИК-интерпретатор может быстро определить любую команду или функцию, оценив один байт, и что ключевые слова не должны быть зарезервированные слова как и в других диалектах BASIC или других языках программирования, например, разрешено определять переменную с именем РАСПЕЧАТАТЬ
и вывести его значение с помощью ПЕЧАТЬ ПЕЧАТЬ
. Это также связано с синтаксическим требованием, чтобы каждая строка начиналась с ключевого слова команды, и нажатие одной клавиши для этой команды в начале строки переводит редактор из командного режима в буквенный. Таким образом, присвоение переменной требует ПОЗВОЛЯТЬ
(т.е. ПОЗВОЛЯТЬа=1
не только а=1
). Эта практика также отличается от других диалектов BASIC. Кроме того, это означало, что в отличие от других диалектов BASIC, интерпретатору не нужны были скобки для обозначения функций; SIN x
было достаточно, нет ГРЕХ (х)
необходимо (хотя последнее было разрешено). У 4K BASIC ROM ZX80 был небольшой список исключений: функции CHR $ ()
, STR $ ()
, TL $ ()
, PEEK ()
, КОД()
, RND ()
, USR ()
и АБС ()
не имели однобайтовых токенов, но набирались буква за буквой и требовали скобок. Они были указаны как ИНТЕГРАЛЬНЫЕ ФУНКЦИИ на этикетке выше и справа от клавиатуры.[65]
Модели 128K Spectrum, ZX Spectrum 128, +2, +3, + 2A и + 2B, также сохраняли ключевые слова внутри в однобайтовых кодовых точках, но использовали обычную систему ввода букв за буквой BASIC. Они также представили две новые команды:
ИГРАТЬ В
, на котором работали модели 128k » Общий прибор AY-3-8910 музыкальный чипСПЕКТР
, который переключил 128k Spectrum в режим совместимости 48k Spectrum
Оригинальный испанский ZX Spectrum 128 включал четыре дополнительных команды на испанском языке,[66] один из которых не был зарегистрирован. Их можно перевести как:
РЕДАКТИРОВАТЬ
(для редактирования номера строки или вызова полноэкранного редактора строк)RENUM
(изменить нумерацию программных строк)УДАЛИТЬ
(для удаления программных строк)ШИРИНА
(для установки ширины столбца устройства RS232, но недокументировано, поскольку код был нарушен)
в отличие от ЛЕВЫЙ $ ()
, MID $ ()
и ПРАВЫЙ $ ()
функции, используемые в повсеместных Microsoft BASIC диалекты для домашних компьютеров, части строк в Sinclair BASIC доступны по числовому диапазону. Например, (от 5 до 10)
дает подстроку, начинающуюся с 5-го и заканчивающуюся 10-м символом переменной $
. Таким образом, можно заменить ЛЕВЫЙ $ ()
и ПРАВЫЙ $ ()
команды, просто опуская левую или правую позицию массива соответственно; Например $ (ДО 5)
эквивалентно LEFT $ (a $, 5)
. В дальнейшем, а $ (5)
одного достаточно, чтобы заменить MID $ (a $, 5,1)
.
Имена переменных
Строка Имена переменных массива должны состоять только из одного алфавитного символа. Таким образом, ПОЗВОЛЯТЬа=5
, ПОЗВОЛЯТЬЯблоки=5
, ПОЗВОЛЯТЬ$="Здравствуйте"
, Тусклыйа(10)
и Тусклый$(10)
все хорошо, а ПОЗВОЛЯТЬЯблоки $="Фрукты"
, ТусклыйЯблоки(10)
и ТусклыйЯблоки $(10)
не.
Длинные имена переменных, разрешенные для числовых переменных, могут включать буквенно-цифровые символы после первого символа, поэтому ПОЗВОЛЯТЬа0=5
разрешено, но не ПОЗВОЛЯТЬ0a=5
. Длинные имена переменных могут также включать пробелы, которые игнорируются, поэтому ПОЗВОЛЯТЬколичествоизяблоки=5
такой же как ПОЗВОЛЯТЬколичество яблок=5
Официальные версии
- 4K BASIC это оригинальный ZX80 BASIC с арифметикой только для целых чисел, разработанный Джоном Грантом из Nine Tiles для ZX80, названный так из-за проживания в 4KiB только для чтения памяти (ПЗУ).
- 8K БАЗОВЫЙ ZX81 BASIC (также доступен в качестве обновления для ZX80[2]), обновленный арифметикой с плавающей запятой Стив Викерс, названный так для проживания в 8 КиБ ROM.
- 48 ОСНОВНОЙ является ОСНОВНЫМ для оригинальных 16/48 кБ оперативная память (RAM) ZX Spectrum (и клоны) с цветом и дополнительными периферийными устройствами, добавленными Стивом Викерсом и Джоном Грантом. Он находится в ПЗУ 16 КБ и стал называться 48 BASIC с появлением ZX Spectrum 128, когда Spectrum 16 КБ больше не продавался, а большинство существующих в использовании было обновлено до 48 КБ.[67]
- 128 ОСНОВНОЙ является ОСНОВНЫМ для ZX Spectrum 128.[68] Он предлагает дополнительные команды и использует буквенный ввод.
- +3 ОСНОВНОЙ это БЕЙСИК с поддержкой дисков для ZX Spectrum +3.[67]
- T / S 2000 BASIC использовался на Spectrum-совместимом Timex Sinclair 2068 (TS2068) и имеет следующие шесть ключевых слов и обычные ключевые слова Sinclair BASIC:
УДАЛИТЬ
удаляет диапазоны строк программы BASIC. CAPS SHIFT+0 сK
курсор производит командуУДАЛИТЬ
.СВОБОДНЫЙ
это функция, которая показывает количество свободной оперативной памяти.БЕСПЛАТНАЯ ПЕЧАТЬ
покажет, сколько оперативной памяти свободно.ON ERR
это функция обработки ошибок, которая в основном используется какПО ERR ПЕРЕЙДИТЕ К
илиВКЛ ERR CONT
.СБРОС НАСТРОЕК
может использоваться для сброса поведенияON ERR
. Он также был предназначен для сброса периферийных устройств.ЗВУК
управляет звуковой микросхемой AY-3-8192.ПАЛКА
- это функция, которая определяет положение внутреннего джойстика (Timex Sinclair 2090).
- BASIC64 к Timex Португалии, это расширение программного обеспечения[69] чтобы обеспечить лучшее базовое программирование с графическим режимом 512 × 192, доступным только на Серия Timex 2000 компьютеры. Это расширение добавляет команды и выполняет полное переназначение памяти, чтобы система не перезаписывала расширенную область памяти экрана. Две версии существуют из-за разных карт памяти - версия для TC2048 и версия для TS /TC2068.
Другие версии, расширения, производные и преемники
Переводчики для семейства ZX Spectrum
Существует несколько интерпретаторов ZX Spectrum.[70]
- Бета BASIC доктора Энди Райта, изначально BASIC расширение, но стал полноценным переводчиком.
- YS MegaBasic к Майк Лиман.[70]
- ZebraOS к Zebra Systems в Нью-Йорке - картриджная версия T / S 2000 BASIC, в которой использовался режим экрана 512 × 192.
- ПЗУ Sea Change Стива Виккерса и Яна Логана, модифицированного Джеффом Вермаутом, заменяющее ПЗУ с улучшенным Sinclair BASIC.[71]
- Гоша замечательно к Джефф Уэрмаут, заменяющее ПЗУ, которое исправляет ошибки и добавляет команды токенизатора, списка потоков, удаления и перенумерации.[70][72]
- OpenSE BASIC (ранее SE BASIC) от Эндрю Оуэн, заменяющее ПЗУ с исправлениями ошибок и множеством улучшений, включая ULAplus[73] поддержка, опубликованная как открытый исходный код в 2011 г.[74][75]
Компиляторы для семейства ZX Spectrum
Существует несколько компиляторов ZX Spectrum.[70]
- HiSoft COLT компилятор (также известный как HiSoft COLT Integer Compiler)[76]
- HiSoft БАЗОВЫЙ (он же HiSoft BASIC Compiler), компилятор с поддержкой целых чисел и чисел с плавающей запятой.[77]
- Лазерный компилятор[78]
- Целочисленный компилятор Softek 'IS'[79] (преемник Softek Integer Compiler[80])
- Полный компилятор Softek 'FP'[81]
- ZIP компилятор[82]
Производные и преемники для других компьютеров
- SuperBASIC, гораздо более продвинутый БЕЙСИК диалект, представленный Sinclair QL персональный компьютер, с некоторым сходством с более ранними Sinclair BASIC
- SAM Базовый, ОСНОВНОЙ на SAM купе, обычно считается клоном ZX Spectrum
- ROMU6 Сезар и Хуан Эрнандес - MSX[70]
- Спектр 48 компании Whitby Computers - Коммодор 64[70]
- Sparky eSinclair BASIC Ричард Келш, операционная система, основанная на ZX Spectrum BASIC - Zilog eZ80[83]
- Синбас Павел Направник - ДОС[70]
- Базовый[84] (и CheckBasic[85]) Филип Кендалл - Unix
- БИНСИК[86] Адриан МакМенамин, повторная реализация в Groovy тщательно смоделирован на ZX81 BASIC - Java
- BASin[87] Пол Данн, полный Sinclair BASIC интегрированная среда развития (IDE) на основе эмулятора ZX Spectrum[70] - Окна
- SpecBAS[88] (он же SpecOS) Пол Данн, интегрированная среда развития (IDE), обеспечивающая расширенный набор Sinclair BASIC - Windows, Linux, Пандора, и Raspberry Pi
- ZX-Basicus[89] Хуан-Антонио Фернандес-Мадригал, синтезатор, анализатор, оптимизатор, интерпретатор и отладчик Sinclair BASIC 48K для ПК, свободно загружаемый для Linux и Windows.
Смотрите также
- Список эмуляторов компьютерных систем § Sinclair ZX80
- Список эмуляторов компьютерных систем § Sinclair ZX81
- Список эмуляторов компьютерных систем § Sinclair ZX Spectrum и клоны
Примечания
- ^ Необязательные параметры заключены в [квадратные скобки]
- ^ Предполагается, что компьютер находится в K (ключевое слово) режим, который обычно находится в начале строки при входе в BASIC. На Spectrum 16K и 48K в расширенный режим можно войти, нажав CAPS SHIFT и СМЕНА СИМВОЛА одновременно, а не РАСШИРЕННЫЙ РЕЖИМ ключ, который присутствует на Spectrum + и более поздних моделях.
- ^ а б c «Ложь» в Sinclair BASIC равняется 0 (нулю), все остальное - «истина». Таким образом, функции, возвращающие истинные или ложные значения, фактически возвращают 0 для ложных и 1 для истинных значений, в то время как
И
обычно возвращает первое из предоставленных условий для истины или 1, если числовые значения не указаны. Например,6 И 7
возвращает 6, аНЕ 6 = 7
возвращает 1. - ^ а б c Доступные числа для цветов:
1 2 3 4 5 6 7 0 синий красный пурпурный зеленый голубой желтый белый черный Во всех командах, связанных с цветом, цифра 8 может использоваться для обозначения «прозрачности» в
Чернила
иБУМАГА
также может быть установлено значение 9 для «контраста», то есть для автоматического добавления темного цвета на светлый фон или наоборот. - ^ а б c d е ж
Чернила
,БУМАГА
,ВСПЫШКА
,ЯРКИЙ
,НАД
иОБРАТНЫЙ
установить атрибуты для вывода текста и графики на экран. Их можно использовать либо как команды для применения ко всем последующим выводам, пока они не будут установлены снова, либо вРАСПЕЧАТАТЬ
заявление, чтобы применяться только с этого момента до конца утверждения. - ^ а б c d е ж
КОТ
,СТЕРЕТЬ
,ФОРМАТ
иШАГ
изначально были разработаны для использования с периферийными устройствами, но при запуске ZX Spectrum они не были полностью реализованы, так что при их использовании возникало сообщение об ошибке (Invalid Stream). Позже с помощью теневого ПЗУ ZX Interface 1 они использовались для ZX Microdrive. (Теневое ПЗУ было выгружено, когда интерпретатор BASIC обнаружил синтаксическую ошибку, поэтому большинство команд ZX Microdrive используют"*"
). - ^ а б В отличие от многих других BASIC диалектов, Sinclair Basic не включал
ELSE
оператор вЕСЛИ
–ТОГДА
[–ELSE
] пункт. Обходной путь - использоватьЕСЛИ
–ТОГДА
–ИДТИ К
вместо этого построить, минуя строки, которые были бы вELSE
пункт сИДТИ К
- ^ Память дисплея Spectrum начинается с адреса 16384 и имеет длину 6912 байт.
- ^ Строка внутри строки должна иметь двойные кавычки в Sinclair BASIC
использованная литература
- ^ Гарфилд, Саймон (28 февраля 2010 г.). "Сэр Клайв Синклер:" Я вообще не использую компьютер"". Хранитель. Guardian Media Group. Получено 2011-05-23.
Он хочет отдать должное [...], не в последнюю очередь Nine Tiles, компании, создавшей операционное программное обеспечение Basic.
- ^ а б "ZX80 - ОБНОВЛЕНИЕ БАЗОВОГО ПЗУ 8K".
- ^ а б c d Викерс 1983, п. 59.
- ^ а б Викерс 1983, п. 70.
- ^ а б c Викерс 1983, п. 85.
- ^ Викерс 1983, п. 69–70.
- ^ а б c d Викерс 1983, п. 101.
- ^ Викерс 1983, п. 116.
- ^ Викерс 1983, п. 135.
- ^ а б Викерс 1983, п. 93.
- ^ Викерс 1983, п. 113.
- ^ Викерс 1983, п. 110–111.
- ^ Кембриджское сообщение 1983, п. 15.
- ^ а б Викерс 1983, п. 91.
- ^ а б Викерс 1983, п. 123.
- ^ а б c Викерс 1983, п. 103.
- ^ http://www.worldofspectrum.org/ZXBasicManual/zxmanchap24.html
- ^ Викерс 1983, п. 168.
- ^ Викерс 1983, п. 19.
- ^ а б c Викерс 1983, п. 151.
- ^ а б Викерс 1983, п. 68.
- ^ а б Викерс 1983, п. 41.
- ^ а б c Викерс 1983, п. 142.
- ^ а б c Викерс 1983, п. 60.
- ^ Викерс 1983, п. 79–81.
- ^ Викерс 1983, п. 11–123.
- ^ Кембриджское сообщение 1983, п. 18.
- ^ Викерс 1983, п. 66.
- ^ Кембриджское сообщение 1983, п. 19.
- ^ Викерс 1983, п. 31.
- ^ а б Викерс 1983, п. 32.
- ^ а б Викерс 1983, п. 37.
- ^ а б Викерс 1983, п. 25.
- ^ а б Викерс 1983, п. 159.
- ^ а б Викерс 1983, п. 110.
- ^ Викерс 1983, п. 131.
- ^ а б c d Викерс 1983, п. 16.
- ^ а б Викерс 1983, п. 112.
- ^ Викерс 1983, п. 57.
- ^ а б Викерс 1983, п. 13.
- ^ Викерс 1983, п. 144.
- ^ Викерс 1983, п. 15.
- ^ а б Викерс 1983, п. 67.
- ^ Викерс 1983, п. 142–143.
- ^ Викерс 1983, п. 147.
- ^ Кембриджское сообщение 1983, п. 39.
- ^ Викерс 1983, п. 31–32.
- ^ Кембриджское сообщение 1983, п. 22.
- ^ Викерс 1983, п. 129.
- ^ Викерс 1983, п. 130.
- ^ Викерс 1983, п. 121.
- ^ Викерс 1983, п. 163.
- ^ Викерс 1983, п. 74.
- ^ Викерс 1983, п. 42.
- ^ Викерс 1983, п. 73.
- ^ а б Викерс 1983, п. 14.
- ^ Викерс 1983, п. 143.
- ^ Викерс 1983, п. 58.
- ^ Викерс 1983, п. 69.
- ^ Викерс 1983, п. 32, 51.
- ^ Викерс 1983, п. 180.
- ^ Викерс 1983.
- ^ Викерс 1983, п. 141.
- ^ Викерс 1983, п. 7–8.
- ^ "Картинка ZX80".
- ^ Разборка ПЗУ Spectrum 128 - Испанский Spectrum 128
- ^ а б http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter7.html
- ^ http://www.worldofspectrum.org/ZXSpectrum128Manual/sp128p06.html
- ^ http://timex.comboios.info/tmxtechb64-2048.html
- ^ а б c d е ж г час http://www.worldofspectrum.org/sinclairbasic/
- ^ "История Sinclair BASIC".
- ^ «Неполная сборка ПЗУ Спектра». Архивировано из оригинал на 2015-09-01.
- ^ https://sites.google.com/site/ulaplus/
- ^ http://www.fruitcake.plus.com/Sinclair/Interface2/Cartridges/Interface2_RC_New_3rdParty_SEBASIC.htm
- ^ https://sourceforge.net/projects/sebasic/
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008254
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008249
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008329
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008696
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008282
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0008693
- ^ http://www.worldofspectrum.org/infoseekid.cgi?id=0009452
- ^ http://rk-internet.com/eZXSparky/
- ^ http://www.shadowmagic.org.uk/spectrum/basic.html
- ^ http://www.shadowmagic.org.uk/spectrum/checkbasic.html
- ^ http://cartesianproduct.wordpress.com/binsic-is-not-sinclair-instruction-code/
- ^ https://sites.google.com/site/ulaplus/home/zx-spin-and-basin
- ^ https://sites.google.com/site/pauldunn/
- ^ http://jafma.net/software/zxbasicus/
Список используемой литературы
- Ардли, Нил (1984). Sinclair ZX Spectrum + Руководство пользователя. Дорлинг Киндерсли в сотрудничестве с Sinclair Research. ISBN 0-86318-080-9.
- Викерс, Стивен (1982). Sinclair ZX Spectrum BASIC Программирование. Sinclair Research.
- Викерс, Стивен (1983). Sinclair ZX Spectrum BASIC Программирование (2-е изд.). Sinclair Research.
- Кембриджское сообщение (1983). Sinclair ZX Spectrum Microdrive и интерфейс 1 руководство. Sinclair Research.
внешняя ссылка
- Sinclair ZX Spectrum BASIC Программирование: Оригинальное руководство от 1982 года Стивена Виккерса (ссылка выше).
- Sinclair ZX81 Базовое программирование: также Виккерс
- История Sinclair BASIC: Эндрю Оуэн
- Компьютерный мир Timex: Руководство пользователя Basic 64 для Timex Computer 2048
- БАЗОВАЯ грамматика Sinclair: Спецификация грамматики LL (1) для анализа Sinclair BASIC 16 / 48K