Tiny BASIC

редактировать
Языки программирования BASIC, рассчитанные на менее 4 Кбайт
Tiny BASIC
Разработано Деннисом Эллисоном
Впервые появилось1975
Язык реализацииIL (Interpretive Language)
Лицензия Общественное достояние
Диалекты
Denver Tiny BASIC, Enhanced 6800 Tiny BASIC, MINOL, Национальный промышленный базовый язык, Palo Alto Tiny BASIC, 6800 Tiny BASIC, TBI68K, Tiny BASIC Extended
Под влиянием
Dartmouth BASIC, 8008 BASIC
Под влиянием
Astro BASIC, Atari BASIC, Atom BASIC, BBC BASIC, BASIC уровня I
Monospaced font reads "Tiny basic for Intel 8080, version 2.0 by Li-Chen Wang, modified and translated to Intel mnemonics by Roger Rausklob, 10 October 1976. @ Copyleft, All Wrongs Reserved." Использование «авторского лева; все ошибки защищены» в 1976 году

Tiny BASIC - это семейство диалектов языка программирования BASIC, которые могут поместиться в 4 или менее КБ из памяти. Tiny BASIC был разработан в ответ на открытое письмо, опубликованное Биллом Гейтсом с жалобой на пользователей «пиратства » Altair BASIC, которое было продано за 150 долларов. Сначала был определен язык Tiny BASIC, а затем программисты были приглашены реализовать его для различных микропроцессоров и открыто поделиться своим исходным кодом. Доктор Ли-Чен Ван, автор книги Palo Alto Tiny BASIC, ввел термин «авторское лево », чтобы описать это. Tiny BASIC - это пример проекта бесплатного программного обеспечения, существовавшего до движения за бесплатное программное обеспечение. Реакция сообщества на Tiny BASIC была настолько ошеломляющей, что то, что было запланировано в виде трех информационных бюллетеней, было перезапущено как Dr. Dobb's Journal, первое регулярное периодическое издание, посвященное программному обеспечению для микрокомпьютеров, выходившее в печатной форме в течение 34 лет.

Небольшой размер и бесплатный исходный код сделали эти реализации бесценными на заре микрокомпьютеров в середине 1970-х, когда RAM была дорогостоящей, а типичный размер памяти был недостаточным. всего от 4 до 8 КБ. Хотя Altair BASIC также будет работать на машинах размером 4 КБ, для программ BASIC останется только 790 байт. Больше свободного места было значительным преимуществом Tiny BASIC.

Чтобы соответствовать этим строгим ограничениям размера, диалекты Tiny BASIC обычно отличались от других реализаций BASIC в ключевых аспектах:

  • Исходный код был доступен бесплатно в виде программ ввода
  • Math была чисто целочисленной на основе
  • Только 26 переменных, с именами от A до Z, были доступны; RUNне обязательно сбрасывал эти переменные в ноль
  • Аргументы IFи GOTOмогли быть числовыми выражениями:
    • IFвыполнял свои последующие оператор для любого ненулевого значения
    • GOTOи GOSUBможет принимать выражение, а не номер строки, предоставляя назначенный GOTO, а не оператор переключения структуры ON-GOTO / GOSUB, более типичной для BASIC.

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

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

Содержание
  • 1 История
  • 2 Описание
    • 2.1 Основные понятия
    • 2.2 Формальная грамматика
    • 2.3 Реализация на виртуальной машине
    • 2.4 Отклонения от дизайна
  • 3 диалекта
    • 3.1 Список известных диалектов
    • 3.2 Palo Alto Tiny BASIC
    • 3.3 MINOL
    • 3.4 Разные диалекты
    • 3.5 4K BASIC
    • 3.6 Диалекты микроконтроллера
    • 3.7 Более поздние реализации
    • 3.8 Сравнение диалектов
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки
История

Деннис Эллисон, сотрудник Computer Факультет естественных наук в Стэнфордском университете написал спецификацию для простой версии языка программирования BASIC. Его уговорил создать стандарт Боб Альбрехт из Homebrew Computer Club, который видел BASIC на миникомпьютерах и чувствовал, что он идеально подходит для новых Такие машины, как MITS Altair 8800, который был выпущен в январе 1975 года. Предложенная Эллисон конструкция использовала только целочисленную арифметику и не поддерживала массивы или манипуляции со строками. Задача заключалась в том, чтобы программа поместилась в памяти от 2 до 3 килобайт.

Общий дизайн Tiny BASIC был опубликован в выпуске информационного бюллетеня People's Computer Company (PCC) за сентябрь 1975 года вместе с исходным кодом на промежуточном языке. В бюллетене были ссылки на тексты компилятора и выделен UIUC BASIC. В июне 1974 года Альфред Уивер, Майкл Тиндалл и Рональд Дэниэлсон из Университета штата Иллинойс в Урбана-Шампейн в своей статье доказали возможность создания «БЕЙСИК-языкового интерпретатора для микропроцессора Intel 8008». с тем же названием, хотя их приложение было развернуто на симуляторе 8008 для IBM 360/75 и требовало 16 КБ.

Реализации Tiny BASIC, которые соответствовали и часто превышали критерии проектирования, были вскоре были перенаправлены в PCC, в первую очередь Tiny BASIC Extended от Дика Уиппла и Джона Арнольда, который работал в 3 КБ ОЗУ, добавлял циклы FOR... NXT и допускал один числовой массив. Дуэт написал Tiny BASIC Extended прямо в машинном коде, используя восьмеричное.

Вопросы и комментарии, и к концу года Альбрехт («дракон») пообещал собрать их в отдельный информационный бюллетень и опубликовать не менее трех изданий. Первое издание было опубликовано в январе 1976 года под названием «Крошечный БЕЙСИК-журнал доктора Добба: художественная гимнастика и ортодонтия, бегущий свет без избыточного байта». Он включал перепечатку оригинальной сентябрьской статьи Tiny BASIC Extended, а также множество примечаний и комментариев пользователей.

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

. К середине 1976 года интерпретаторы Tiny BASIC были доступны для Intel 8080, процессоры Motorola 6800 и MOS Technology 6502. Это было предшественником совместной разработки сообщества свободного программного обеспечения до того, как Интернет позволил легко передавать файлы, и был примером проекта свободного программного обеспечения до движения за свободное программное обеспечение. Компьютерные любители обменивались бумажными лентами, кассетами или даже перепечатывали файлы из распечатанных списков.

Джим Уоррен, редактор журнала Dr. Dobb's, писал в июльском бюллетене ACM Programming Language от 1976 г. мотивы и методы этого успешного проекта. Он начал с этого: «Есть жизнеспособная альтернатива проблемам, поднятым Биллом Гейтсом в его разгневанном письме компьютерным любителям по поводу« грабежа »программного обеспечения. Когда программное обеспечение бесплатное или настолько недорогое, что его проще заплатите за это, чем скопируйте его, тогда он не будет «украден». Письмо Билла Гейтса было написано для превращения программного обеспечения в продукты. Альтернативный метод заключался в том, чтобы опытный профессионал сделал общий дизайн, а затем наметил стратегию реализации. Знающие любители реализовали бы дизайн для множества компьютерных систем. Уоррен предсказал, что эта стратегия будет продолжена и расширена.

В майском номере 1976 года доктора Доббса был Palo Alto Tiny BASIC Ли-Чен Ван для микропроцессора Intel 8080. Список начинался с обычного названия, имени автора и даты, но в нем также было "@COPYLEFT, ВСЕ НЕПРАВИЛЬНЫЕ ЗАЩИТЫ ЗАЩИЩЕНЫ". Другой член Homebrew Computer Club, Роджер Раусколб, модифицировал и улучшил программу Ли-Чен Ванга, и она была опубликована в декабрьском выпуске журнала Interface Age за 1976 год. Роджер добавил свое имя и сохранил уведомление COPYLEFT.

Palo Alto Tiny BASIC был адаптирован для Sharp PC-1211 карманного компьютера. Другие реализации Tiny BASIC были позже разработаны для программируемых калькуляторов , но современные BASIC калькуляторов сильно отличаются от Tiny BASIC своим уникальным синтаксисом и множеством дополнительных функций. Последний остаток Tiny BASIC в этих реализациях - это ограничение имен переменных (AZ и один массив Z в Casio BASIC, аналогично TI-BASIC, который добавляет нумерованные строки и списки).

Описание

Основные понятия

См. интерпретаторы BASIC

Tiny BASIC был разработан для использования как можно меньшего объема памяти, и это отражается в нехватке особенности, а также детали его системы интерпретатора. Ранним микрокомпьютерам не хватало оперативной памяти и вторичной памяти для BASIC компилятора, что было более типично для систем с разделением времени.

Как и большинство BASIC того времени, Tiny Basic был интерактивным, когда пользователь вводил операторы в командную строку. Поскольку микрокомпьютеры той эпохи часто использовались с телетайпами или «глупыми» терминалами, прямое редактирование существующего текста было невозможно, и вместо этого редактор использовал выносные символы, часто обратную косую черту, чтобы указать, где пользователь делал резервную копию для редактирования существующего текста.

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

Если строка была введена с ведущим числом, число было преобразовано из десятичного формата, например "50", и преобразовано в 8-битное значение, в данном случае $ 32 шестнадцатеричный. Это число использовалось в качестве индекса в массиве -подобной области хранения, где остальная часть строки хранилась точно в том формате, в котором она была напечатана. Когда пользователь набирал LISTв командной строке, система перебирала массив, преобразовывала номер строки обратно в десятичный формат, а затем распечатывала остальной текст в строке.

Когда программа присутствует в памяти и пользователь вводит команду RUN, система переходит в «косвенный режим». В этом режиме устанавливается указатель на первую строку программы, например, 10 ($ 0A в шестнадцатеричной системе). Затем исходный текст для этой строки извлекается из хранилища и запускается, как если бы пользователь только что набрал его в прямом режиме. Затем указатель переместится на следующую строку, и процесс продолжится.

Формальная грамматика

Грамматика приведена ниже в форме Бэкуса-Наура, почти так же, как она была указана в примечаниях к проектированию. В списке звездочка («*») обозначает ноль или более объектов слева от него - за исключением первой звездочки в определении «термин», который является оператор умножения; круглые скобки группируют объекты; и эпсилон («ε») означает пустой набор. Как обычно в нотации грамматики компьютерного языка, вертикальная черта («|») выделяет альтернативы, так же как и их перечисление в отдельных строках. Символ «CR» обозначает возврат каретки (обычно генерируется клавишей «Enter» на клавиатуре). ПЕРЕРЫВ с консоли прервет выполнение программы.

строка :: = номер оператора CR | оператор CR оператор :: = PRINT expr-list IF выражение relop выражение THEN оператор GOTO выражение INPUT var-list LET var = выражение GOSUB выражение RETURN CLEAR LIST RUN END expr-list :: = (строка | выражение) (, (строка | выражение)) * var-list :: = var (, var) * выражение :: = (+ | - | ε) term ((+ | -) term) * term :: = factor ((* | /) factor) * фактор :: = var | номер | (выражение) var :: = A | B | C... | Y | Z номер :: = цифра цифра * цифра :: = 0 | 1 | 2 | 3 |... | 8 | 9 relop :: = < (>| = | ε) |>(<|=|ε) | = string ::= " ( |!|#|$... -|.|/|digit|:... @|A|B|C... |X|Y|Z)* "

Обратите внимание, что строка не была определена в примечании разработчика.

Этот синтаксис, настолько простой, насколько он был, добавил одно новшество: GOTOи GOSUBможет принимать выражение, а не просто номер строки, предоставляя назначенный GOTO, а не оператор переключения из GOTO / GOSUB... OF..., структура затем поддерживается в HP Time-Shared BASIC и предшествует ON... GOTO. Синтаксис, разрешающий оператор IF-THEN(в отличие от простого номер строки для перехода) еще не поддерживался в Dartmouth BASIC на этот раз, но был введен Digital и скопирован Microsoft.

Реализация на виртуальной машине

В примечаниях к проектированию указывается виртуальная машина, в которой интерпретатор Tiny BASIC сам запускается на интерпретаторе виртуальной машины. Идея разработчика использовать виртуальную машину приложения восходит к Валу Шорру (с META II, 1964) и Гленни (синтаксическая машина). Выбор виртуальной машины. При машинном подходе экономия места в памяти и усилий по реализации, хотя программы BASIC, запускаемые на ней, выполнялись несколько медленно.

Диалекты, которые использовали виртуальную машину, включали Tiny BASIC Extended, Tiny BASIC Тома Питтмана и NIBL. Другие диалекты, такие как Denver Tiny BASIC (DTB) и Palo Alto Tiny BASIC, были прямыми переводчиками. Некоторые программисты, такие как Фред Гриб с DTB, трактовали программу IL (Interpretive Language) как псевдокод для алгоритма, реализуемого на языке ассемблера; Denver Tiny BASIC не использовал виртуальную машину, но внимательно следил за программой IL.

Это типичный отрывок из 120-строчной программы IL:

S1: TST S3, 'GO'; GOTO OR GOSUB? TST S2, 'TO'; ДА... TO, OR... SUB CALL EXPR; GET LABEL DONE; ERROR IF CR NOT NEXT XFER; SET UP AND JUMP S3: TST S8, 'PRINT'; PRINT.

Обычный шаблон в программе - проверка ключевого слова или его части, а затем действие на эту информацию. Каждый тест - это утверждение, что будет следующим в строковом буфере. Если утверждение не выполняется, элемент управления переходит к следующей метке (обычно в поисках нового ключевого слова или токена). Здесь система перемещает свой буферный курсор на любые пробелы и проверяет наличие GO, и если не может найти его, то переходит к строке S3. Если он его находит, выполнение продолжается со следующей команды IL. В этом случае система затем проверяет TO, переходя к строке S2, если она терпит неудачу (проверка для SUB, чтобы увидеть, не является ли это командой GOSUB). Если он проходит, контроль продолжается; в этом случае вызов подпрограммы IL, которая начинается с метки EXPR, которая анализирует выражение. В Tiny BASIC GOTO X * 10 + 100(вычисленный GO TO) так же законен, как GOTO 100, и является альтернативой ON-GOTO более крупных реализаций BASIC. Подпрограмма EXPR помещает результат выражения в арифметический стек (в данном случае номер строки). DONE проверяет, что за выражением не следует другой текст, и выдает ошибку, если это так. XFER извлекает номер из стека и передает выполнение (GOES TO) на соответствующий номер строки, если он существует.

В следующей таблице дается частичный список из 32 команд виртуальной машины, в которой был написан первый интерпретатор Tiny BASIC.

TST lbl, строка
Если строка соответствует строке BASIC, переместите курсор на строку и выполните следующую инструкцию IL; если проверка завершилась неудачно, выполните инструкцию IL с меткой lbl
CALL lbl
Выполните подпрограмму IL, начиная с lbl; сохранить IL-адрес после CALL в стеке управления
DONE
Сообщить о синтаксической ошибке, если после удаления начальных пробелов курсор не позиционируется для достижения возврата каретки
XFER
Проверить, чтобы значение наверху стека AE было в пределах ranqe. Если нет, сообщите об ошибке. Если это так, попробуйте поместить курсор в эту строку. Если он существует, начните интерпретацию там; если нет, сообщите об ошибке.
JUMP lbl
Продолжить выполнение IL с указанной метки
RTN
Вернуться в расположение IL, указанное наверху стека управления
PRS
Печатать символы из текста BASIC до закрывающей кавычки, но не включая ее
PRN
Распечатать число, полученное выталкиванием верха стека выражений
SPC
Вставьте пробелы, чтобы переместить печатающую головку в следующую зону
NLINE
Выведите CRLF на принтер

Том Питтман, обсуждая IL, говорит: «Интерпретатор TINY BASIC был разработан Деннисом Эллисоном в качестве парсера с рекурсивным спуском. Часть элегантной простоты этого дизайна была потеряна из-за добавления синтаксического сахара в язык, но основная форма осталась. IL особенно подходит для синтаксического анализа с рекурсивным спуском TINY BASIC из-за общей рекурсивной природы его процедур и простоты токенов TINY BASIC. Язык IL эффективно оптимизирован для интерпретации TINY. E Опыт показал, что сложность добавления новых функций в язык совершенно не соответствует природе этих функций. Обычно для поддержки новых функций необходимо добавлять дополнительные подпрограммы на машинном языке. Часто сложность перевешивает преимущества ».

Отклонения от дизайна

Определяя Tiny BASIC для Homebrew Computer Club, Питтман писал:« Tiny BASIC - это подходящее подмножество Dartmouth BASIC, состоящее из только следующие типы операторов: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST, RUN. Арифметика в 16-битных целых числах только с операторами + - * / и вложенными круглыми скобками. Есть только 26 однобуквенных имен переменных A, B,... Z и никаких функций. Здесь нет строк или массивов... Tiny BASIC определяет номера строк меньше 256 ». Затем он описал свою реализацию:« Этот язык был расширен за счет включения функций RND, USR, PEEK и POKE, что дает пользователю доступ ко всем его системным компонентам в 6800 из программы BASIC ".

Многие разработчики привнесли свой собственный опыт работы с HP Time-Shared BASIC или DEC BASIC-PLUS к их проектам и смягчили формальную спецификацию языка Tiny BASIC. Из семи известных реализаций, опубликованных к 1977 году:

  • Все добавили какую-то функцию случайных чисел, обычно RND (). Хотя это и не включено в спецификацию, информационный бюллетень статья до заметок по дизайну для Tiny BASIC запрашивала только эту функцию.
  • Все включенные LET должны быть необязательными, и большинство выражений let в операторах присваивания содержат операторы отношения.
  • Все, кроме поддерживаемых 6800TB операторов разделители в строках, обычно : хотя ТВХ использовал $ и PATB использовал ;.
  • . В операторах IF все, кроме MINOL, устранили необходимость в выражениях, содержащих операторы отношения (например, IF X THEN LET Y = Xбыло допустимым). Реализации удалили ТОГДА полностью или сделали его необязательным или поддерживали только для подразумеваемого GOTO.
  • Многие модифицировали PRINT для поддержки зон печати, используя ,для перехода к следующая зона и ;, чтобы курсор не перемещался.
  • Все, кроме 6800TB и DTB добавлены NEW.
  • Все, кроме 6800TB и MINOL добавили функцию для возврата размер памяти: у TBX было SZE, у DTB и PATB было SIZE, у L1B было MEM, а у NIBL ​​было TOP.
  • Четыре реализации добавили массивы, будь то одиночный, безразмерный массив в PATB и L1B или DIMensionable массивы в TBX и DTB.
  • Четыре реализации добавили оператор REMark.
  • Четыре реализации добавили цикл FOR: PATB, NIBL и L1B предлагали FOR-TO-TO-STEP / NEXT, тогда как TBX не поддерживал STEPи использовал ключевое слово NXTдля завершения цикла.
  • Только NIBL ​​одобрял структурное программирование с DO / UNTIL, несмотря на причитания Эллисон в Выпуске 2 о проблемах с BASIC.

В качестве альтернативы токенизации для сохранения усеченных ключевых слов RAM, TBX, DTB и MINOL: PR для PRINT, IN для INPUT, RET для RETURN. Полные традиционные ключевые слова не принимаются. В отличие от этого, PATB разрешал общепринятые традиционные ключевые слова, но также позволял сокращать любое ключевое слово до его минимальной уникальной строки с завершающей точкой. Например, PRINT можно набрать P., хотя PR. и другие варианты тоже работали. Эта система была сохранена в уровне I BASIC для TRS-80, который использовал PATB, а также позже был обнаружен в Atari BASIC и BASIC различных Карманные компьютеры Sharp.

Диалекты

Самыми известными диалектами Tiny BASIC были оригинальная Design Note, Tiny BASIC Extended, Palo Alto Tiny BASIC и 6800 Tiny BASIC. Однако существовало много других версий Tiny BASIC.

Список известных диалектов

Tiny BASIC был впервые опубликован в информационном бюллетене People's Computer Company, информационный бюллетень которого стал Dr. Dobb's Journal, долгоживущий компьютерный журнал. В журнале было опубликовано около десяти версий.

Известные диалекты Tiny BASIC (в журнале доктора Добба)
Дата публикацииВыпускДиалектАвторПроцессорРазмер
Декабрь 1975 г.1Примечание разработчикаДеннис ЭллисонН / ДН / П
Февраль 1976 г.2Tiny BASIC Extended (TBX)Дик Уиппл и Джон Арнольд8080 2,9K
март 1976 г.3Denver Tiny BASIC (DTB)Фред Гриб80802,75K
март 1976 г.36800 Tiny BASIC (6800TB)Том Питтман6800 2K
апрель 1976 г.4MINOLЭрик Т. Мюллер80801,75K
май 1976 г.5Palo Alto Tiny BASIC (PATB)Li -Chen Wang80801,77K
ноябрь 1976 г.10Национальный промышленный базовый язык (NIBL)Марк Александр и Стив ЛейнингерSC / MP 4K
Октябрь 1980 г.49Enhanced 6800 Tiny BASICРоберт Хадсон6800Н / Д
Февраль 1985 г.100TBI68KГордон Брэндли6800 0 Н / Д
Январь 2006 г.351Возвращение Tiny BASICТом ПиттманН / Д (C )Н / Д

TBX также был известен как Texas Tiny BASIC.

И SCELBAL, и 6800 Tiny BASIC были объявлены в журнале, но не опубликовали их исходный код.

Palo Alto Tiny BASIC

Palo Alto Tiny BASIC
Разработчик Ли Чен Ван
Впервые появился1976
Лицензия Public domain
Диалекты
3K Control Basic
Под влиянием
Tiny BASIC Design Note, Tiny BASIC Extended
Под влиянием
Astro BASIC, Уровень I BASIC, Sharp PC-1211 BASIC

Одной из самых популярных из многих версий Tiny BASIC была Palo Alto Tiny BASIC, или сокращенно PATB, автор Ли-Чен Ван. PATB впервые появился в выпуске Dr. Dobbs в мае 1976 года, написанном на специальном языке ассемблера с нестандартной мнемоникой. Это привело к появлению дополнительных портов, которые работали с обычными ассемблерами на 8080. Первая версия интерпретатора занимала 1,77 килобайт памяти и предполагала использование Teletype Machine (TTY) для пользователя. ввод / вывод. Ошибка в исходной статье появилась в июньском / июльском номере журнала Dr. Dobb's (Том 1, № 6). Эта статья также включала информацию о добавлении дополнительных устройств ввода-вывода на примере кода для видеодисплея VDM от Processor Technology.

Ван был одним из первых, кто использовал слово «авторское лево». В уведомлении о распространении Palo Alto Tiny BASIC он написал: «@COPYLEFT, ВСЕ ОШИБКИ ЗАЩИЩЕНЫ». Tiny BASIC не распространялся ни в какой формальной форме с условиями распространения авторского лева, но был представлен в контексте, когда исходный код распространялся и изменялся. Фактически, Ван ранее вносил правки в Tiny BASIC Extended, прежде чем написать свой собственный интерпретатор. Он призвал других адаптировать его исходный код и публиковать свои адаптации, как в случае с версией PATB Роджера Раусколба, опубликованной в Interface Age. Он сам опубликовал третью версию в Справочнике PCC по персональным и домашним вычислениям.

Одним из наиболее заметных изменений в PATB является добавление цикла FOR... NEXT. В исходном TB циклы могли быть реализованы только с использованием IFи GOTO. Как и в Microsoft BASIC, верхняя и нижняя границы цикла были установлены при входе в цикл и не изменились во время цикла, поэтому, если одна из границ была основана на выражении переменной, изменение переменной происходило не менять границы. Модификатор STEPбыл необязательным, как в MS.

Еще одним значительным изменением стала возможность размещать несколько операторов в одной строке. По не объясненным причинам PATB использовал точку с запятой ;для разделения операторов, а не уже распространенное двоеточие :.

. Другие изменения включают добавление одного числового массива с именем переменной @, STOPв дополнение к ENDи использованию #для не равных в сравнениях, в отличие от <>.

, в PATB для сообщений об ошибках использовались слова вместо чисел. Чтобы уменьшить объем требуемой памяти, было всего три сообщения, и они состояли из отдельных слов. Система ответит WHAT?для синтаксических ошибок, HOW?для ошибок времени выполнения, таких как GOTOs на несуществующую строку или числовое переполнение, и SORRYдля проблем с нехваткой памяти.

Ван также написал программу STARTREK в своем Tiny BASIC, который появился в июльском выпуске People's Computer Company Newsletter <473 за июль 1976 года.>Позже он адаптировал язык в 3K Control Basic для Cromemco, добавив имена переменных в виде буквенно-цифровой формы (например, A0в Z9), логические функции (AND (), OR (), XOR ()), команда CALLдля выполнения подпрограмм на машинном языке, другие PRINT- параметры форматирования и другие (GET ()и PUT ()вместо PEEKи POKE; I / O port functions).

Palo Alto Tiny BASIC был адаптирован для многих других реализаций, включая Level I BASIC (1977), BASIC для Sharp PC-1211 карманный компьютер (1980) и Astr o BASIC (1982, автор Джейми Фентон ).

MINOL

Написанный учеником средней школы, MINOL был единственной реализацией, которая не поддерживала полную заметку по дизайну, в которой отсутствовал приоритет оператора, имеющий только три повторения (<, =, #), исключая GOSUBи RETURN. Поддерживалась только 8-битная точность без знака (в отличие от 16-битной точности со знаком для любой другой реализации) и номера строк от 0 до 254.

Никакие пробелы не допускались, кроме строк; !возвращает случайное число $перед тем, как выражение загрузит строку по этому адресу; ОСвозвращается в операционную систему. Память была адресуемой, как если бы она была двумерным массивом старших и младших байтов (например, от «(0,0)» до «(255,255)»); CALLвыполняет подпрограмму машинного языка.

Разные диалекты

Многие диалекты появлялись в различных других публикациях.

В майском выпуске 1977 года была представлена ​​дискета, содержащая MICRO-BASIC.

Вдохновленный призывом PCC к Tiny BASIC, Роберт Уитервик написал MICRO BASIC 1.3 для SWTPC (6800 system), который SWTPC опубликовал в выпуске бюллетеня SWTPC за июнь 1976 года. Уитервик написал язык от руки на планшете. Позже он расширил язык до 4K, добавив поддержку плавающей запятой; эта реализация была уникальной среди интерпретаторов BASIC тем, что использовала двоично-десятичную кодировку с точностью до 9 цифр, с диапазоном до 10E99, и была опубликована бесплатно в виде вкладыша журнала "Floppy ROM". Версия 8K добавила строковые переменные и функции тригонометрии. Обе версии 4K и 8K продавались SWTPC. В январе 1978 года Uiterwyk продал права на исходный код Motorola.

Томас Ф. Вайтман написал Tiny BASIC в 1976 году для терминалов Hewlett-Packard HP-2640 и HP-2645 (которые использовали Intel 8008 и 8080 процессоров), который был опубликован в Hewlett-Packard Journal.

В декабрьском выпуске 1976 года журнала Interface Age был опубликован LLL (Ливерморская лаборатория ) BASIC, первый проект которого был разработан Стивом Лейнингером из спецификации Эллисон до Лейнингер оставил National Semiconductor для Tandy Corporation. Окончательный интерпретатор был разработан Джоном Дикенсоном, Джерри Барбером и Джоном Титером в Университете Айдахо по контракту с LLL. Принимая 5K, он включал пакет с плавающей запятой, разработанный Дэвидом Мидом, Халом Брэндом и Фрэнком Олкеном. Программа была размещена в открытом доступе компанией LLL, которая разработала систему под эгидой Управления энергетических исследований и разработок США.

4K BASIC

Altair BASIC, 4K BASIC, могла работать в машина с 4 КБ ОЗУ, оставляя только около 790 байт для программного кода. Инициатива Tiny BASIC началась в ответ на плату в 150 долларов за Altair 4K BASIC.

В 1975 году Стив Возняк присоединился к недавно сформированному Домашнему компьютерному клубу, в который входили Ли-Чен Ван (Palo Alto Tiny BASIC) и Том Питтман (6800 Tiny BASIC). Возняк пришел к выводу, что его машина должна иметь собственный BASIC, который, будем надеяться, станет первым для процессора MOS Technology 6502. Поскольку языку требовалось 4 КБ ОЗУ, он сделал это минимальным объемом памяти для проекта. Integer BASIC был первоначально опубликован на Compact Cassette в 1976 году.

В 1977 году, Radio Shack (как тогда его называли) выпустили свой первый компьютер, TRS-80, систему Z80 с уровнем I BASIC в ПЗУ объемом 4 КБ. Сотрудник Тэнди Стив Лейнингер написал первый проект интерпретатора NIBL ​​(National Industrial Basic Language) для SC / MP, работая в National Semiconductor. Не имея возможности взять с собой этот исходный код, он адаптировал Palo Alto Tiny BASIC Li-Chen Wang для первоначального прототипа TRS-80 Model I. Он значительно переработал интерпретатор, добавив поддержку операций с плавающей запятой., простая черно-белая графика и утверждения READ/DATA/RESTORE.

Первоначально разработанный в 1979 году, Sinclair 4K BASIC, написанный Джоном Грантом, использовал в качестве определения языка был использован минимальный стандарт BASIC Американского национального института стандартов (ANSI) 1978 года, но сам был неполной реализацией 4Kb только с целочисленной арифметикой.

Диалекты микроконтроллера

Tiny Реализации BASIC были адаптированы для управления процессором и для микроконтроллеров, таких как Arduino :

  • Стивен А. Несс написал XYBASIC для компании Mark Williams в 1977 году, целочисленную реализацию 4K. Этот язык часто использовался для приложений управления процессами.
  • Arduino BASIC - адаптировано из 68000 Tiny BASIC Гордона Брэндли, портировано на C Майком Филдом.
  • Tiny Basic Plus - адаптировано из Arduino BASIC, Скотт Лоуренс.
  • Half-Byte Tiny Basic - адаптировано из Arduino BASIC.
  • Tiny Basic на Micro: Bit - адаптировано из Palo Alto Tiny BASIC.

Более поздние реализации

In 2002, Emmanuel Chailloux, Pascal Manoury and Bruno Pagano published a Tiny BASIC (lacking GOSUB/RETURN) in Developing Applications with Objective Caml as an example Objective Caml application.

In 2013, Alex Yang published an implementation in Python.

In 2019, Sergey Kuznetsov published a version in Ruby.

Dialects compared

The following table compares the language feature of Tiny BASIC implementations against other prominent BASICs that preceded them.

Comparison of BASIC Implementations - Tiny BASICs and Other BASICs
Date. PublishedDialectProgrammer(s)ProcessorTypeINPUTLETPRINTGOTOIF...THENGOSUBRETURNENDRUNLISTCLEARNEWREMFOR/NEXTREAD/DATA/RESTOREAdded BASIC commandsCustomizationsExpressionsrelopFunctionsRNDMemory FunctionLine numbersStatement delimiterErrorsPrecisionArithmeticVariablesArraysStrings
October,. 1964DTSS Dartmouth BASIC (version 2)(Dartmouth students)GE-225Compile-and-goN/A [!]LET var = expressionPRINT expr-list {, / ; / }GO TO numberIF expression relop expression THEN line-numberGOSUB numberRETURNENDRUNLIST--startNEW [prompts for program name]REMFOR/TO/STEP/NEXTREAD, DATASTOPN/Aprecedence, ^< <= =>=><>INT, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FNRND(0) 0..11 to 99999None22 defined9 digits±999,999,999; E notation base 2 -256 to +255 (E±76).A-Z, A0-Z9DIM (one letter name, two dimensions); if omitted, assumed to go from 0 to 10; up to 1500 elements across all arraysNone
February,. 1970DEC BASIC-8(DEC staff)PDP-8Compile-and-goINPUT var-listLET var = expressionPRINT expr-list {, / ; / }GO TO numberIF expression relop expression [THEN/GO TO] line-numberGOSUB numberRETURNENDRUNLIST (first (, last))NEW [prompts for program name]REMFOR/TO/STEP/NEXTREAD, DATA, RESTORESTOP, OLD, SAVE, UNSAVEDELETE (first (, last)), BYEprecedence, ^< <= =>=><>INT, SGN, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FNRND(0) 0..11 to 2045None23 defined?±134,217,727; 14E-38A-Z, AA-Z9DIM (one letter name, two dimensions)None
June,. 1974UIUC BASICAlfred Weaver, Michael Tindall, Ronald Danielson8008InterpreterINPUT {, }*LET var = formulaPRINT / {, / }*GO TO numberIF expression THEN line-numberGOSUB numberRETURNENDRUNnot documentednot documentednot documentedREMFOR/TO/STEP/NEXTDEF FN, STOPN/Aprecedence, ^< <= =>=># AND OR NOTFNA..Z, SIN, COS, LOG, SQR, EXP, ATN0 to 999Nonenot documented4-byte mantissa and 1-byte exponent [Datapoint 2200 floating point arithmetic package]not documentedA-Z, A0-Z9DIM (one letter name, three dimensions)None
1975Altair 4K BASICBill Gates, Paul Allen, Monte Davidoff8080Inter preterINPUT ("string",) var-list(LET) var = expressionPRINT expr-list {, / ; }GOTO numberIF expression THEN line-number/statementGOSUB numberRETURNENDRUNLIST (start)NEWREMFOR/TO/STEP/NEXTREAD, DATA, RESTORESTOPprecedence< <= =>=> <>ABS, INT, SGN, SQR, TAB, USRRND(X) <0, new using X as seed; =0, repeat;>0, next1 to 65535:12 defined40 bit operand floating??DIM (one dimension)None
December,. 1975Design NoteDennis AllisonN/AInterpreterINPUT var-listLET var = expressionPRINT expr-listGOTO expressionIF expression relop expression THEN statementGOSUB expressionRETURNENDRUNLIST[eq. to NEW]precedence< <= =>=><>><NoneNone1 to 255None8 defined16 bit± 32767A-ZNoneNone
February,. 1976Tiny BASIC ExtendedDick Whipple John Arnold8080InterpreterIN(LET) var = expression;}GO TOIF expression [no THEN] statementGO SUBRETENDRUNLST (first (, last))NEWFOR-NXT (no STEP)DTA (array LET)precedence< <= =>=><>><TB() spaces in printRN (random 0-10000)SZE1 to 65535$14 defined16 bit± 32767A-ZDIM, 1- or 2-dimensions, 255x255 maxNone
March,. 1976Denver Tiny BASICFred Greeb8080InterpreterIN(LET) var = expression;}GOTOIF expression [no THEN] statementGOSUBRETENDRUNLIST (first last)[eq. to NEW]TAPE [SAVE], LOADCLRS [CLS]precedence< <= =>=><>><RND(0), RND(1)SIZE2 to 255:20 defined16 bit± 32767A-Z, A1 to A6 to Z6DIM, 1 dimensionNone
March,. 19766800 Tiny BASICTom Pittman6800InterpreterINPUT (expression) var-listLET var = expressionPRINT expr-list {, / ; }GOTO expressionIF expression relop expression THEN statementGOSUB expressionRETURNENDRUNLIST (first last)[eq. to NEW]REMprecedence< <= =>=><>><USR()RND()1 to 65535None53 defined16 bit± 32767A-ZNoneNone
April,. 1976MINOLEric T. Mueller8080InterpreterIN(LET) var = expressionPR expr-list {;}[GOTO 0 jumps back to start of direct statement]IF expression relop expression ; statementN/AN/AENDRUNLISTCLEAR [only variables]NEWNo spaces permitted except in stringsNo operator precedence< = #$ [CHR$]! [RND]1 to 254:6 defined8 bit0 to 255A-Z(H,L) memory locationsingle char
May,. 1976Palo Alto Tiny BASICLi-Chen Wang8080InterpreterINPUT [(expression) var]*(LET) var = expressionPRINT expr-listGOTO expressionIF expression [no THEN] statementGOSUB expressionRETURNSTOPRUNLIST (start)NEWREMFOR/TO/STEP/NEXTSTOPprecedence< <= =>=>#ABS()RND()SIZE1 to 32767;3 defined16 bit± 32767A-Z@(1 array of 1 dimension)None
November,. 1976NIBLMark Alexander Steve LeiningerSC/MPInterpreterINPUT ($)var(LET) var = expressionPR/PRINT expr-listGOTO expressionIF expression (THEN) statementGOSUB expressionRETURNENDRUNLIST (start)CLEAR [variables stack]NEWREMFOR/TO/STEP/NEXTDO/UNTILMemory addressing (@ [PEEK/POKE], STAT, PAGE)precedence< <= =>=><>MOD(), AND, OR, NOT,RND(A,Z)TOP0 to 32767:13 four-char defined16 bit± 32767A-Zmemory addressingINPUT$, PRINT$, $exp=exp
August,. 1977Level I BASICSteve LeiningerZ80InterpreterINPUT (#digit) [(expression) var]*(LET) var = expressionPRINT (#digit) expr-listGOTO numberIF expression THEN statementGOSUB numberRETURNENDRUN (start)LIST (start)NEWREMFOR/TO/STEP/NEXTREAD, DATA, RESTORESTOP, CONT, ON-GOTO/GOSUBCLOAD, CSAVE, CLS, SET, RESET,precedence< <= =>=><>><ABS(), INT(), MEM, POINT(X,Y)RND()MEM1 to 32767:3 defined16 bit± 32767A-ZA(1 array of 1 dimension)A$, B$
June,. 1976MICRO BASIC 1.3Robert Uiterwyk6800InterpreterINPUT var-list(LET) var = expressionPRINT expr-list {, / ; }GOTO expressionIF expression relop expression THEN statementGOSUB expressionRETURNENDRUNLIST (first (, last))NEWFOR/TO/NEXT (no STEP)TAB()precedence< <= =>=><>><RND, SIZERND [returns 1-32762]SIZE (statement that prints bytes used and bytes free)1 to 65535None17 defined16 bit [later BCD!]± 32767A-ZDIM (two dimensions, max size of 255)None
June,. 1976SCientific ELementary BAsic Language (SCELBAL)Mark Arnold Nat Wadsworth8008InterpreterINPUT var-list(LET) var = expressionPRINT expr-list {, / ; / }GOTO numberTHEN statementGOSUB numberRETURNENDRUNLISTSCR[atch]REMFOR/TO/STEP/NEXTSAVE, LOADUDF [USR]precedence, ^< <= =>=><>INT, SGN, ABS, SQR, CHR [usable only in PRINT], TABRND(0) 0..11 to 999999None18 defined32 bit operand floating or fixed point±134,217,727; 14E-38?DIM (one letter name, one dimension; up to 4 arrays of up to 64 entries in total)None
October,. 1976Apple I BASICSteve Wozniak6502InterpreterINPUT ("string",) var-list(LET) var = expressionPRINT expr-list {, / ; }GOTO expressionIF expression relop expression THEN line-number/statementGOSUB expressionRETURNENDRUN (start)LIST (first (, last))SCRREMFOR/TO/STEP/NEXTAUTO, DEL, POKETAB (command), CALLprecedence< <= =>=><># AND OR NOT MODSGN, ABS, PEEK(), LEN()RND(X) 0..X (or X..0!)HIMEM, LOMEM1 to 32767None [early version, then :]16 defined16 bit± 32767A-Z followed by any number of alphanumericDIM (one dimension)dimensioned
December,. 1976LLL BASIC(University of Idaho staff)8080InterpreterINPUT var-list(LET) var = expressionPRINT expr-list {, / ;}GO TO numberIF expression relop expression (THEN) statementGO SUB numberRETURNENDRUNLISTSCRREMFOR/TO/NEXT (no STEP)STOPCALL, GET(), PUT()precedence< <= =>=><>><No RND?0 to 32767:14 defined32 bit operand floating point?A-Z, A0-Z9DIM (integers only, one letter name, one dimension, max size of 255)None
See also
Notes
References
External links
Последняя правка сделана 2021-06-11 04:12:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте