Разработано | Деннисом Эллисоном |
---|---|
Впервые появилось | 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 |
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 в ключевых аспектах:
RUN
не обязательно сбрасывал эти переменные в нольIF
и GOTO
могли быть числовыми выражениями: IF
выполнял свои последующие оператор для любого ненулевого значенияGOTO
и GOSUB
может принимать выражение, а не номер строки, предоставляя назначенный GOTO, а не оператор переключения структуры ON-GOTO / GOSUB
, более типичной для BASIC.Поскольку это был призыв сообщества к реализации BASIC, любой мог создать Tiny BASIC диалект, и диалекты широко варьировались в языках состав. Некоторые усеченные ключевые слова, некоторые разрешенные сокращения, некоторые предлагали нестандартные способы доступа к ОЗУ, чтобы обойти отсутствие массивов и обработки строк.
Крошечные реализации BASIC все еще используются для программирования микроконтроллеры, такие как Arduino.
Деннис Эллисон, сотрудник 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, который добавляет нумерованные строки и списки).
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.
Том Питтман, обсуждая 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 году:
IF X THEN LET Y = X
было допустимым). Реализации удалили ТОГДА полностью или сделали его необязательным или поддерживали только для подразумеваемого GOTO.,
для перехода к следующая зона и ;
, чтобы курсор не перемещался.STEP
и использовал ключевое слово NXT
для завершения цикла.В качестве альтернативы токенизации для сохранения усеченных ключевых слов 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, долгоживущий компьютерный журнал. В журнале было опубликовано около десяти версий.
Дата публикации | Выпуск | Диалект | Автор | Процессор | Размер |
---|---|---|---|---|---|
Декабрь 1975 г. | 1 | Примечание разработчика | Деннис Эллисон | Н / Д | Н / П |
Февраль 1976 г. | 2 | Tiny BASIC Extended (TBX) | Дик Уиппл и Джон Арнольд | 8080 | 2,9K |
март 1976 г. | 3 | Denver Tiny BASIC (DTB) | Фред Гриб | 8080 | 2,75K |
март 1976 г. | 3 | 6800 Tiny BASIC (6800TB) | Том Питтман | 6800 | 2K |
апрель 1976 г. | 4 | MINOL | Эрик Т. Мюллер | 8080 | 1,75K |
май 1976 г. | 5 | Palo Alto Tiny BASIC (PATB) | Li -Chen Wang | 8080 | 1,77K |
ноябрь 1976 г. | 10 | Национальный промышленный базовый язык (NIBL) | Марк Александр и Стив Лейнингер | SC / MP | 4K |
Октябрь 1980 г. | 49 | Enhanced 6800 Tiny BASIC | Роберт Хадсон | 6800 | Н / Д |
Февраль 1985 г. | 100 | TBI68K | Гордон Брэндли | 6800 0 | Н / Д |
Январь 2006 г. | 351 | Возвращение Tiny BASIC | Том Питтман | Н / Д (C ) | Н / Д |
TBX также был известен как Texas Tiny BASIC.
И SCELBAL, и 6800 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 был единственной реализацией, которая не поддерживала полную заметку по дизайну, в которой отсутствовал приоритет оператора, имеющий только три повторения (<, =, #), исключая 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, которая разработала систему под эгидой Управления энергетических исследований и разработок США.
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 :
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.
The following table compares the language feature of Tiny BASIC implementations against other prominent BASICs that preceded them.
Date. Published | Dialect | Programmer(s) | Processor | Type | INPUT | LET | GOTO | IF...THEN | GOSUB | RETURN | END | RUN | LIST | CLEAR | NEW | REM | FOR/NEXT | READ/DATA/RESTORE | Added BASIC commands | Customizations | Expressions | relop | Functions | RND | Memory Function | Line numbers | Statement delimiter | Errors | Precision | Arithmetic | Variables | Arrays | Strings | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
October,. 1964 | DTSS Dartmouth BASIC (version 2) | (Dartmouth students) | GE-225 | Compile-and-go | N/A [!] | LET var = expression | PRINT expr-list {, / ; / } | GO TO number | IF expression relop expression THEN line-number | GOSUB number | RETURN | END | RUN | LIST--start | — | NEW [prompts for program name] | REM | FOR/TO/STEP/NEXT | READ, DATA | STOP | N/A | precedence, ^ | < <= =>=><> | INT, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN | RND(0) 0..1 | — | 1 to 99999 | None | 22 defined | 9 digits | ±999,999,999; E notation base 2 -256 to +255 (E±76). | A-Z, A0-Z9 | DIM (one letter name, two dimensions); if omitted, assumed to go from 0 to 10; up to 1500 elements across all arrays | None |
February,. 1970 | DEC BASIC-8 | (DEC staff) | PDP-8 | Compile-and-go | INPUT var-list | LET var = expression | PRINT expr-list {, / ; / } | GO TO number | IF expression relop expression [THEN/GO TO] line-number | GOSUB number | RETURN | END | RUN | LIST (first (, last)) | — | NEW [prompts for program name] | REM | FOR/TO/STEP/NEXT | READ, DATA, RESTORE | STOP, OLD, SAVE, UNSAVE | DELETE (first (, last)), BYE | precedence, ^ | < <= =>=><> | INT, SGN, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN | RND(0) 0..1 | — | 1 to 2045 | None | 23 defined | ? | ±134,217,727; 14E-38A-Z, AA-Z9 | DIM (one letter name, two dimensions) | None | |
June,. 1974 | UIUC BASIC | Alfred Weaver, Michael Tindall, Ronald Danielson | 8008 | Interpreter | INPUT | LET var = formula | PRINT | GO TO number | IF expression THEN line-number | GOSUB number | RETURN | END | RUN | not documented | not documented | not documented | REM | FOR/TO/STEP/NEXT | — | DEF FN, STOP | N/A | precedence, ^ | < <= =>=># AND OR NOT | FNA..Z, SIN, COS, LOG, SQR, EXP, ATN | — | — | 0 to 999 | None | not documented | 4-byte mantissa and 1-byte exponent [Datapoint 2200 floating point arithmetic package] | not documented | A-Z, A0-Z9 | DIM (one letter name, three dimensions) | None |
1975 | Altair 4K BASIC | Bill Gates, Paul Allen, Monte Davidoff | 8080 | Inter preter | INPUT ("string",) var-list | (LET) var = expression | PRINT expr-list {, / ; } | GOTO number | IF expression THEN line-number/statement | GOSUB number | RETURN | END | RUN | LIST (start) | — | NEW | REM | FOR/TO/STEP/NEXT | READ, DATA, RESTORE | STOP | — | precedence | < <= =>=> <> | ABS, INT, SGN, SQR, TAB, USR | RND(X) <0, new using X as seed; =0, repeat;>0, next | — | 1 to 65535 | : | 12 defined | 40 bit operand floating | ? | ? | DIM (one dimension) | None |
December,. 1975 | Design Note | Dennis Allison | N/A | Interpreter | INPUT var-list | LET var = expression | PRINT expr-list | GOTO expression | IF expression relop expression THEN statement | GOSUB expression | RETURN | END | RUN | LIST | [eq. to NEW] | — | — | — | — | — | — | precedence | < <= =>=><>>< | None | None | — | 1 to 255 | None | 8 defined | 16 bit | ± 32767 | A-Z | None | None |
February,. 1976 | Tiny BASIC Extended | Dick Whipple John Arnold | 8080 | Interpreter | IN | (LET) var = expression | ;} | GO TO | IF expression [no THEN] statement | GO SUB | RET | END | RUN | LST (first (, last)) | — | NEW | — | FOR-NXT (no STEP) | DTA (array LET) | — | — | precedence | < <= =>=><>>< | TB() spaces in print | RN (random 0-10000) | SZE | 1 to 65535 | $ | 14 defined | 16 bit | ± 32767 | A-Z | DIM, 1- or 2-dimensions, 255x255 max | None |
March,. 1976 | Denver Tiny BASIC | Fred Greeb | 8080 | Interpreter | IN | (LET) var = expression | ;} | GOTO | IF expression [no THEN] statement | GOSUB | RET | END | RUN | LIST (first last) | [eq. to NEW] | — | — | — | — | TAPE [SAVE], LOAD | CLRS [CLS] | precedence | < <= =>=><>>< | RND(0), RND(1) | SIZE | 2 to 255 | : | 20 defined | 16 bit | ± 32767 | A-Z, A1 to A6 to Z6 | DIM, 1 dimension | None | |
March,. 1976 | 6800 Tiny BASIC | Tom Pittman | 6800 | Interpreter | INPUT (expression) var-list | LET var = expression | PRINT expr-list {, / ; } | GOTO expression | IF expression relop expression THEN statement | GOSUB expression | RETURN | END | RUN | LIST (first last) | [eq. to NEW] | — | REM | — | — | — | — | precedence | < <= =>=><>>< | USR() | RND() | — | 1 to 65535 | None | 53 defined | 16 bit | ± 32767 | A-Z | None | None |
April,. 1976 | MINOL | Eric T. Mueller | 8080 | Interpreter | IN | (LET) var = expression | PR expr-list {;} | [GOTO 0 jumps back to start of direct statement] | IF expression relop expression ; statement | N/A | N/A | END | RUN | LIST | CLEAR [only variables] | NEW | — | — | — | — | No spaces permitted except in strings | No operator precedence | < = # | $ [CHR$] | ! [RND] | — | 1 to 254 | : | 6 defined | 8 bit | 0 to 255 | A-Z | (H,L) memory location | single char |
May,. 1976 | Palo Alto Tiny BASIC | Li-Chen Wang | 8080 | Interpreter | INPUT [(expression) var]* | (LET) var = expression | PRINT expr-list | GOTO expression | IF expression [no THEN] statement | GOSUB expression | RETURN | STOP | RUN | LIST (start) | — | NEW | REM | FOR/TO/STEP/NEXT | — | STOP | — | precedence | < <= =>=># | ABS() | RND() | SIZE | 1 to 32767 | ; | 3 defined | 16 bit | ± 32767 | A-Z | @(1 array of 1 dimension) | None |
November,. 1976 | NIBL | Mark Alexander Steve Leininger | SC/MP | Interpreter | INPUT ($)var | (LET) var = expression | PR/PRINT expr-list | GOTO expression | IF expression (THEN) statement | GOSUB expression | RETURN | END | RUN | LIST (start) | CLEAR [variables stack] | NEW | REM | FOR/TO/STEP/NEXT | — | DO/UNTIL | Memory addressing (@ [PEEK/POKE], STAT, PAGE) | precedence | < <= =>=><> | MOD(), AND, OR, NOT, | RND(A,Z) | TOP | 0 to 32767 | : | 13 four-char defined | 16 bit | ± 32767 | A-Z | memory addressing | INPUT$, PRINT$, $exp=exp |
August,. 1977 | Level I BASIC | Steve Leininger | Z80 | Interpreter | INPUT (#digit) [(expression) var]* | (LET) var = expression | PRINT (#digit) expr-list | GOTO number | IF expression THEN statement | GOSUB number | RETURN | END | RUN (start) | LIST (start) | — | NEW | REM | FOR/TO/STEP/NEXT | READ, DATA, RESTORE | STOP, CONT, ON-GOTO/GOSUB | CLOAD, CSAVE, CLS, SET, RESET, | precedence | < <= =>=><>>< | ABS(), INT(), MEM, POINT(X,Y) | RND() | MEM | 1 to 32767 | : | 3 defined | 16 bit | ± 32767 | A-Z | A(1 array of 1 dimension) | A$, B$ |
June,. 1976 | MICRO BASIC 1.3 | Robert Uiterwyk | 6800 | Interpreter | INPUT var-list | (LET) var = expression | PRINT expr-list {, / ; } | GOTO expression | IF expression relop expression THEN statement | GOSUB expression | RETURN | END | RUN | LIST (first (, last)) | — | NEW | — | FOR/TO/NEXT (no STEP) | — | TAB() | — | precedence | < <= =>=><>>< | RND, SIZE | RND [returns 1-32762] | SIZE (statement that prints bytes used and bytes free) | 1 to 65535 | None | 17 defined | 16 bit [later BCD!] | ± 32767 | A-Z | DIM (two dimensions, max size of 255) | None |
June,. 1976 | SCientific ELementary BAsic Language (SCELBAL) | Mark Arnold Nat Wadsworth | 8008 | Interpreter | INPUT var-list | (LET) var = expression | PRINT expr-list {, / ; / } | GOTO number | THEN statement | GOSUB number | RETURN | END | RUN | LIST | — | SCR[atch] | REM | FOR/TO/STEP/NEXT | — | SAVE, LOAD | UDF [USR] | precedence, ^ | < <= =>=><> | INT, SGN, ABS, SQR, CHR [usable only in PRINT], TAB | RND(0) 0..1 | — | 1 to 999999 | None | 18 defined | 32 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,. 1976 | Apple I BASIC | Steve Wozniak | 6502 | Interpreter | INPUT ("string",) var-list | (LET) var = expression | PRINT expr-list {, / ; } | GOTO expression | IF expression relop expression THEN line-number/statement | GOSUB expression | RETURN | END | RUN (start) | LIST (first (, last)) | — | SCR | REM | FOR/TO/STEP/NEXT | — | AUTO, DEL, POKE | TAB (command), CALL | precedence | < <= =>=><># AND OR NOT MOD | SGN, ABS, PEEK(), LEN() | RND(X) 0..X (or X..0!) | HIMEM, LOMEM | 1 to 32767 | None [early version, then :] | 16 defined | 16 bit | ± 32767 | A-Z followed by any number of alphanumeric | DIM (one dimension) | dimensioned |
December,. 1976 | LLL BASIC | (University of Idaho staff) | 8080 | Interpreter | INPUT var-list | (LET) var = expression | PRINT expr-list {, / ;} | GO TO number | IF expression relop expression (THEN) statement | GO SUB number | RETURN | END | RUN | LIST | — | SCR | REM | FOR/TO/NEXT (no STEP) | — | STOP | CALL, GET(), PUT() | precedence | < <= =>=><>>< | No RND? | — | 0 to 32767 | : | 14 defined | 32 bit operand floating point | ? | A-Z, A0-Z9 | DIM (integers only, one letter name, one dimension, max size of 255) | None |