Tiny BASIC — это семейство диалектов языка программирования BASIC , которые могут уместиться в 4 или менее КБ памяти . Tiny BASIC был разработан Деннисом Эллисоном и People's Computer Company (PCC) в ответ на открытое письмо , опубликованное Биллом Гейтсом с жалобой на пользователей, незаконно использующих Altair BASIC , который продавался за 150 долларов. Tiny BASIC задумывался как полностью бесплатная версия BASIC, которая могла бы работать на тех же ранних микрокомпьютерах .
Tiny BASIC был выпущен как спецификация, а не реализация, опубликованная в сентябрьском выпуске информационного бюллетеня PPC за 1975 год. В статье программистам предлагалось реализовать его на своих машинах и отправить полученную реализацию на языке ассемблера обратно для включения в серию из трех запланированных информационных бюллетеней. Ли-Чен Ван , автор Palo Alto Tiny BASIC, ввёл термин « авторское лево » для описания этой концепции. Реакция сообщества была настолько ошеломляющей, что информационный бюллетень был перезапущен под названием « Журнал доктора Добба» , первое регулярное периодическое издание, посвященное программному обеспечению для микрокомпьютеров. «Доббс» просуществовал в печатном виде 34 года, а затем в сети до 2014 года, когда его веб-сайт превратился в статический архив.
Небольшой размер и бесплатный исходный код сделали эти реализации неоценимыми на заре появления микрокомпьютеров в середине 1970-х годов, когда оперативная память была дорогой, а типичный размер памяти составлял всего от 4 до 8 КБ. Хотя минимальная версия Altair BASIC от Microsoft также могла работать на машинах с размером памяти 4 КБ, она оставляла свободными только 790 байт для программ BASIC. Больше свободного места было существенным преимуществом Tiny BASIC. Чтобы соответствовать этим строгим ограничениям размера, в диалектах Tiny BASIC обычно отсутствовали различные функции, обычно встречающиеся в других диалектах, например, в большинстве версий отсутствовали строковые переменные , отсутствовали математические операции с плавающей запятой и допускались только однобуквенные имена переменных.
Крошечные реализации BASIC до сих пор используются для программирования микроконтроллеров , таких как Arduino .
Самые ранние микрокомпьютеры , такие как MITS Altair 8800 , обычно не имели встроенных входов/выходов (I/O), за исключением переключателей на передней панели и светодиодных ламп. Полезная работа обычно требовала добавления карты расширения ввода-вывода и использования терминала той или иной формы . В то время видеотерминалы были очень дорогими и стоили намного дороже, чем компьютер, поэтому многие пользователи обратились к механическим устройствам, таким как Teletype Model 33 . Модель 33, как и большинство телетайпов того времени, включала систему перфоленты , позволяющую операторам предварительно записывать свои сообщения, а затем воспроизводить их на «высокой скорости», быстрее, чем большинство людей могли бы напечатать сообщение вживую. Для первых микрокомпьютеров это обеспечивало удобный формат хранения компьютерных данных , позволяющий пользователям записывать программы на бумажную ленту и распространять их среди других пользователей. [1]
Компьютерный клуб Homebrew впервые собрался в марте 1975 года, и вскоре его члены использовали собрания для обмена программами на перфоленте. На июньской встрече исчезла кассета с предварительной версией Altair BASIC . Лента была передана Стиву Домпиру, который передал ее Дэну Соколу, у которого был доступ к высокоскоростному перфоратору. На следующей встрече в картонной коробке появилось 50 копий Altair BASIC на бумажной ленте. [2] Когда Эд Робертс , основатель MITS, узнал об этом, он заявил: «Любой, кто использует украденную копию MITS BASIC, должен признать себя тем, кем он является, — вором». [3] Билл Гейтс сделал это более формальным, написав « Открытое письмо любителям », жалуясь на то, что «как должно быть известно большинству любителей, большинство из вас крадут ваше программное обеспечение». [4]
Жалоба не была принята должным образом. Среди множества ответов Боб Альбрехт, еще один член Homebrew и основатель People's Computer Company (PCC), посчитал, что лучшим ответом будет создание собственного BASIC, который будет совершенно бесплатным для использования кем угодно. Он обратился к Деннису Эллисону , преподавателю компьютерных наук Стэнфордского университета , с просьбой написать спецификацию для версии BASIC, которая могла бы уместиться в 2–3 килобайта памяти. [a] Чтобы облегчить портирование , проект был основан на промежуточном языке (IL), интерпретаторе для интерпретатора, что означало, что нужно было портировать только небольшую часть общего кода.
Первоначальный проект Эллисона был опубликован в выпуске информационного бюллетеня PCC за сентябрь 1975 года вместе с версией интерпретатора IL для Intel 8080 . В статье программистам предлагалось реализовать проект на своих компьютерах и отправить полученную версию на языке ассемблера обратно в PCC. Они заявили о своих планах опубликовать три специальных информационных бюллетеня, содержащих эти версии, представленные пользователями, а также исправления ошибок, программы, написанные на новом языке BASIC, а также предложения и улучшения. Эта концепция получила дальнейшее внимание, когда она была переиздана в январе 1976 года в выпуске Специальной группы по интересам ACM по языкам программирования. [5] Материалы посыпались. Среди примечательных ранних версий была Tiny BASIC Extended от Дика Уиппла и Джона Арнольда, которая работала в 3 КБ ОЗУ, добавляла циклы FOR...NXT и позволяла использовать один числовой массив. Они избегали использования IL и писали его непосредственно в машинном коде, используя восьмеричный код . [6]
Первый из трех запланированных информационных бюллетеней под названием «Журнал доктора Добба по компьютерной гимнастике и ортодонтии, бегущий свет без лишних байтов» был опубликован в январе 1976 года. [6] Он начинается с заметки Альбрехта под псевдонимом « дракон», предположив, что трех изданий будет недостаточно, и спросил читателей, хотят ли они, чтобы оно продолжалось. Он также перепечатал оригинальную статью о Tiny BASIC от PCC, включил полный список Extended TB и ряд небольших программ BASIC, включая советы и рекомендации от Эллисона. [7] Реакция на первый выпуск была настолько впечатляющей, что во введении ко второму выпуску говорилось, что они уже решили продолжить публикацию нового информационного бюллетеня под упрощенным названием « Журнал доктора Добба» . В следующих нескольких выпусках были опубликованы дополнительные версии языка, а аналогичные статьи начали появляться в других журналах, таких как Interface Age .
К середине 1976 года интерпретаторы Tiny BASIC были доступны для процессоров Intel 8080 , Motorola 6800 и MOS Technology 6502 . Это был предшественник совместной разработки сообщества свободного программного обеспечения до того, как Интернет позволил легко передавать файлы, и был примером проекта свободного программного обеспечения до движения за свободное программное обеспечение . [9] Любители компьютеров обменивали бумажные ленты, кассеты или даже перепечатывали файлы из распечатанных списков. [10]
Джим Уоррен, редактор журнала Dr. Dobb's , написал в бюллетене ACM Programming Language за июль 1976 года о мотивах и методах этого успешного проекта. Он начал с этого: «Существует реальная альтернатива проблемам, поднятым Биллом Гейтсом в его гневном письме любителям компьютеров относительно «грабежа» программного обеспечения. Когда программное обеспечение бесплатно или настолько дешево, что за него легче заплатить, чем дублировать это, тогда оно не будет «украдено». Письмо Билла Гейтса было написано с целью превратить программное обеспечение в продукты . Альтернативный метод заключался в том, чтобы опытный профессионал разработал общий дизайн, а затем наметил стратегию реализации. Знающие любители смогут реализовать проект для различных компьютерных систем. Уоррен предсказал, что эта стратегия будет продолжена и расширена. [10]
В майском выпуске журнала Dr. Dobbs за 1976 год был опубликован Palo Alto Tiny BASIC Ли-Чена Ванга для 8080. Список начинался с обычного названия, имени автора и даты, но также было написано «@COPYLEFT ВСЕ НЕПРАВИЛЬНОСТИ ЗАРЕЗЕРВИРОВАНЫ». [11] Другой член Homebrew Computer Club Роджер Раускоб модифицировал и улучшил программу Ли-Чен Ванга, и это было опубликовано в декабрьском номере журнала Interface Age за 1976 год . [8] Роджер добавил свое имя и сохранил уведомление COPYLEFT.
Tiny BASIC был разработан так, чтобы использовать как можно меньше памяти, и это отражается в скудности функций, а также в деталях его системы интерпретатора . Ранним микрокомпьютерам не хватало оперативной памяти и вторичной памяти для компилятора BASIC , что было более типично для систем с разделением времени.
Как и большинство BASICов той эпохи, Tiny Basic был интерактивным, когда пользователь вводил операторы в командную строку. Поскольку микрокомпьютеры той эпохи часто использовались с телетайпами или «тупыми» терминалами, прямое редактирование существующего текста было невозможно, и вместо этого редактор использовал символы выноса, часто обратную косую черту, чтобы указать, где пользователь сделал резервную копию для редактирования существующего текста.
Если пользователь вводил оператор в командную строку, система проверяла его, чтобы определить, начинается ли он с цифры. Если этого не произошло, строка немедленно анализировалась и обрабатывалась, потенциально генерируя выходные данные через PRINT
. Это было известно как «прямой режим».
Если строка была введена с начальным числом, число было преобразовано из десятичного формата, например «50», и преобразовано в 8-битное значение, в данном случае $32
шестнадцатеричное . Это число использовалось в качестве индекса в области хранения, похожей на массив , где остальная часть строки сохранялась точно в том формате, в котором она была набрана. Когда пользователь вводил LIST
командную строку, система перебирала массив, преобразовывала номер строки обратно в десятичный формат, а затем распечатывала оставшуюся часть текста в строке.
Когда программа присутствует в памяти и пользователь вводит команду RUN
, система переходит в «косвенный режим». В этом режиме указатель устанавливается на первую строку программы, например, 10 ( $0A hex ). Исходный текст этой строки затем извлекается из хранилища и запускается так, как если бы пользователь только что набрал его в прямом режиме. Затем указатель перемещается на следующую строку, и процесс продолжается.
Грамматика приведена ниже в форме Бэкуса-Наура , почти точно так, как указано в заметках по проекту. [12] В листинге звездочка (" *
") обозначает ноль или более объектов слева от нее, за исключением первой звездочки в определении " term
", которая является оператором умножения; круглые скобки группируют объекты; а эпсилон (" ε
") означает пустой набор. Как это принято в обозначениях грамматики компьютерного языка, альтернативы различаются вертикальной чертой (« |
»), а также их перечислением в отдельных строках. Символ « CR
» обозначает возврат каретки (обычно генерируется клавишей «Enter» на клавиатуре). BREAK из консоли прервет выполнение программы.
строка :: = оператор числа CR | оператор CR оператор :: = PRINT список выражений IF выражение relop выражение THEN оператор GOTO выражение INPUT список переменных LET var = выражение выражение GOSUB RETURN CLEAR LIST RUN END список выражений :: = ( строка | выражение ) ( , ( строка | выражение ) ) * var-list :: = var ( , var ) * выражение :: = ( +|-|ε ) термин (( +|- ) термин ) * термин :: = фактор (( * | / ) фактор ) * коэффициент :: = var | номер | ( выражение ) var :: = A | Б | С ... | Ю | Z номер :: = цифра цифра * цифра :: = 0 | 1 | 2 | 3 | ... | 8 | 9 повторений :: = < ( >| = |ε ) | > ( <| знак равно |ε ) | "=" строка :: = " ( |!|#|$ ... -|.|/|цифра|: ... @|A|B|C ... |X|Y|Z)* "
Обратите внимание, что строка не была определена в примечаниях к проектированию.
Этот синтаксис, каким бы простым он ни был, добавил одно нововведение: GOTO
он GOSUB
мог принимать выражение, а не просто номер строки, предоставляя назначенный GOTO [13] , а не оператор переключения структуры GOTO/GOSUB ... OF ...
, которая затем поддерживалась в HP Time-Shared BASIC. и хищничество ON ... GOTO
. Разрешающий синтаксис IF-THEN statement
(в отличие от просто номера строки для перехода) в то время еще не поддерживался в Dartmouth BASIC, но был введен Digital [14] и скопирован Microsoft.
В примечаниях к проектированию указана виртуальная машина , в которой интерпретатор Tiny BASIC сам запускается на интерпретаторе виртуальной машины. Идея дизайнера использовать виртуальную машину приложения восходит к Вэлу Шорру (с META II , 1964) и Гленни (Syntax Machine). Выбор подхода с использованием виртуальной машины позволил сэкономить пространство памяти и усилия по реализации, хотя программы BASIC, выполняемые на ней, выполнялись несколько медленно. [15]
Диалекты, в которых использовалась виртуальная машина, включали Tiny BASIC Extended, Tiny BASIC Тома Питтмана [16] и NIBL. Другие диалекты, такие как Denver Tiny BASIC (DTB) и Palo Alto Tiny BASIC, были прямыми переводчиками. Некоторые программисты, такие как Фред Гриб из DTB, рассматривали программу IL (интерпретационный язык) как псевдокод для алгоритма , реализуемого на языке ассемблера; Denver Tiny BASIC не использовал виртуальную машину, но внимательно следил за программой IL.
Это репрезентативный отрывок из 120-строчной программы IL:
S1: TST S3 , 'GO' ;GOTO OR GOSUB? TST S2 , 'TO' ;ДА...TO, ИЛИ...SUB CALL EXPR ;GET LABEL DONE ;ОШИБКА ЕСЛИ CR НЕ СЛЕДУЮЩИЙ XFER ;НАСТРОЙКА И ПЕРЕХОД S3: TST S8 , 'ПЕЧАТЬ' ;ПЕЧАТЬ.
Обычной схемой работы программы является проверка ключевого слова или части ключевого слова, а затем действие на основе этой информации. Каждый тест представляет собой утверждение о том, что будет дальше в буфере строк. Если утверждение не выполнено, управление переходит к следующей метке (обычно ищет новое ключевое слово или токен). Здесь система перемещает свой буферный курсор по всем пробелам и проверяет наличие GO , и если ей не удается его найти, то переходит к строке S3 . Если он его находит, выполнение продолжается со следующей команды IL. В этом случае система затем проверяет TO , переходя к строке S2 , если она не удалась (проверка SUB , чтобы увидеть, является ли это командой GOSUB ). Если он проходит, контроль продолжается; в данном случае вызов IL-подпрограммы, начинающейся с метки EXPR , которая анализирует выражение. В Tiny BASIC (вычисленный GO TO) так же законен и является альтернативой ON-GOTO в более крупных реализациях BASIC. Подпрограмма EXPR помещает результат выражения в арифметический стек (в данном случае номер строки). DONE проверяет, что за выражением не следует никакой другой текст, и выдает ошибку, если это так. XFER извлекает число из стека и передает на выполнение (GOes TO) соответствующий номер строки, если он существует.GOTO X*10+100
GOTO 100
В следующей таблице приведен неполный список из 32 команд виртуальной машины, на которой был написан первый интерпретатор Tiny BASIC. [17]
Том Питтман , обсуждая IL, говорит: «Интерпретатор TINY BASIC был разработан Деннисом Эллисоном как анализатор рекурсивного спуска . Часть элегантной простоты этой конструкции была потеряна из-за добавления синтаксического сахара в язык, но основная форма осталась. Язык IL особенно подходит для анализа TINY BASIC методом рекурсивного спуска из-за общей рекурсивной природы его процедур и простоты токенов TINY BASIC. Язык IL эффективно оптимизирован для интерпретации TINY. Опыт показал, что сложность добавления Новые функции языка не соответствуют природе этих функций. Обычно необходимо добавлять дополнительные подпрограммы машинного языка для поддержки новых функций. Часто трудности перевешивают преимущества». [19]
Определяя Tiny BASIC для Домашнего компьютерного клуба, Питтман писал: «Tiny BASIC — это правильное подмножество Dartmouth BASIC, состоящее только из следующих типов операторов: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST. , RUN. Арифметика осуществляется только в 16-битных целых числах с использованием операторов + - * / и вложенных круглых скобок. Есть только 26 однобуквенных имен переменных A, B, ... Z и нет функций. Нет строк или массивов. ... Tiny BASIC указывает номера строк меньше 256». [20] Затем он описал свою реализацию: «Этот язык был дополнен функциями RND, USR, PEEK и POKE, предоставляя пользователю доступ ко всем компонентам системы в 6800 из программы BASIC».
Многие разработчики привнесли в свои проекты собственный опыт работы с HP Time-Shared BASIC или DEC BASIC-PLUS и смягчили формальную спецификацию языка Tiny BASIC. Из семи известных реализаций, опубликованных к 1977 году:
RND()
. Хотя эта функция и не включена в спецификацию, в статье информационного бюллетеня, предшествовавшей примечаниям к дизайну для Tiny BASIC, запрашивалась только эта функция.LET
быть необязательными, и большинство выражений let в операторах присваивания содержат операторы отношения .:
хотя используется TBX $
и PATB ;
.IF
операторах все, кроме MINOL, устранили необходимость в выражениях содержать реляционные операторы (например, было допустимо). Реализации вообще удалили его, сделали его необязательным или поддерживали только для подразумеваемых .IF X THEN LET Y=X
THEN
GOTO
PRINT
для поддержки зон печати, позволяющих ,
перейти к следующей зоне и ;
не перемещать курсор.NEW
.SZE
, DTB и PATB имела SIZE
, L1B имела MEM
, а NIBL имела TOP
.DIM
допускаемые массивы в TBX и DTB.REM
оператор ark.FOR
цикл: PATB, NIBL и L1B предлагали FOR-TO-STEP/NEXT
, тогда как TBX не поддерживал STEP
и использовал ключевое слово NXT
для завершения цикла.DO/UNTIL
несмотря на жалобы Эллисона во втором выпуске о проблемах с BASIC.В качестве альтернативы токенизации для экономии оперативной памяти TBX, [21] DTB, [22] и MINOL [23] усекают ключевые слова: PR
for PRINT
, IN
for INPUT
, RET
for RETURN
. Полные традиционные ключевые слова не принимались. Напротив, PATB допускал принятие традиционных ключевых слов, но также позволял сокращать любое ключевое слово до минимальной уникальной строки с конечной точкой. Например, PRINT
можно было бы ввести P.
, хотя PR.
и другие варианты также работают. Эта система была сохранена в уровне I BASIC для TRS-80 , который использовал PATB, а также позже была обнаружена в Atari BASIC и BASIC различных карманных компьютеров Sharp . [24]
Наиболее известными диалектами 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 , давно существующим компьютерным журналом. В журнале было опубликовано около десяти версий.
TBX также был известен как Texas Tiny BASIC. [33]
И SCELBAL [34] , и 6800 Tiny BASIC были анонсированы в журнале, но не опубликовали их исходный код.
Одной из самых популярных из множества версий Tiny BASIC была Palo Alto Tiny BASIC, или сокращенно PATB, авторства Ли-Чен Ванга . PATB впервые появился в майском 1976 года выпуске книги Dr. Dobbs , написанном на специальном языке ассемблера с нестандартной мнемоникой. Это привело к появлению дополнительных портов, которые работали с обычными ассемблерами на 8080. [24] Первая версия интерпретатора занимала 1,77 килобайт памяти и предполагала использование телетайпа (TTY) для пользовательского ввода/вывода . Ошибка в оригинальной статье появилась в июньско-июльском номере журнала Dr. Dobb's (том 1, № 6). В эту статью также включена информация о добавлении дополнительных устройств ввода-вывода на примере кода для отображения видео VDM от Processor Technology .
Ван был одним из первых, кто использовал слово «авторское лево» . В уведомлении о распространении Palo Alto Tiny BASIC он написал: «@COPYLEFT ВСЕ НЕПРАВИЛЬНОСТИ ЗАРЕЗЕРВИРОВАНЫ». [35] Tiny BASIC не распространялся под какой-либо формальной формой условий распространения авторского лева, но был представлен в контексте, когда исходный код распространялся и изменялся. Фактически, Ван ранее внес изменения в Tiny BASIC Extended, прежде чем написать свой собственный интерпретатор. [21] Он призвал других адаптировать его исходный код и опубликовать свои адаптации, как в случае с версией PATB Роджера Рауколба, опубликованной в Interface Age . [8] Он также опубликовал третью версию в «Справочнике персональных и домашних компьютеров PCC» . [36]
Одним из наиболее заметных изменений в PATB является добавление цикла FOR...NEXT . В оригинальном TB циклы можно было реализовать только с помощью IF
и GOTO
. Как и в Microsoft BASIC , верхняя и нижняя границы цикла устанавливались при входе в цикл и не менялись во время цикла, поэтому, если одна из границ была основана на выражении переменной; изменение переменной не изменило границу. Модификатор STEP
был необязательным, как и в MS. [24]
Еще одним существенным изменением стала возможность размещать несколько операторов в одной строке. По необъяснимым причинам PATB использовал ;
для разделения операторов точку с запятой, а не уже распространенное двоеточие :
.
Другие изменения включают добавление одного числового массива с именем переменной @
в STOP
дополнение к END
, а также использование #
значка "не равно" при сравнении, в отличие от <>
. [24] [б]
PATB использовал слова для сообщений об ошибках вместо чисел. Чтобы уменьшить объем необходимой памяти, сообщений было всего три, и они состояли из отдельных слов. Система будет реагировать WHAT?
на синтаксические ошибки, HOW?
на ошибки во время выполнения, такие как переход к несуществующей строке или числовое переполнение, а также SORRY
на проблемы с нехваткой памяти. [24]
Ван также написал программу STTREK на своем Tiny BASIC, которая появилась в июльском номере журнала People's Computer Company Newsletter за 1976 год . [37] [38]
Позже он адаптировал язык в 3K Control Basic для Cromemco , добавив имена переменных в форме буква-цифра (например, A0
to Z9
), логические функции ( AND()
,,, ), команды для выполнения подпрограмм машинного языка, дополнительные OR()
параметры форматирования и другие ( и вместо и ; функции порта ввода-вывода). [39]XOR()
CALL
PRINT
GET()
PUT()
PEEK
POKE
Palo Alto Tiny BASIC был адаптирован для многих других реализаций, включая Level I BASIC (1977), BASIC для карманного компьютера Sharp PC-1211 (1980) и Astro BASIC (1982, Джейми Фентон ). [40]
Написанный учеником старшей школы, MINOL был единственной реализацией, которая не поддерживала полную заметку о проекте, не имела приоритета операторов , имела только три повтора (<, =, #), опускала GOSUB
и RETURN
. Он поддерживал только 8-битную точность без знака (в отличие от 16-битной точности со знаком для любой другой реализации) и номера строк от 0 до 254.
Пробелы не допускались, за исключением строк; !
возвращает случайное число $
перед тем, как выражение загрузит строку по этому адресу; OS
возвращается в операционную систему. Память была адресуемой, как если бы она представляла собой двумерный массив старших и младших байтов (например, от «(0,0)» до «(255,255)»); CALL
выполняет подпрограмму машинного языка. [23]
Многие диалекты появлялись в различных других публикациях.
Вдохновленный призывом PCC к использованию Tiny BASIC, Роберт Уитервик написал MICRO BASIC 1.3 для системы SWTPC 6800 ), который SWTPC опубликовал в июньском выпуске информационного бюллетеня SWTPC за 1976 год. Уитервик написал текст от руки на официальном планшете. Позже он расширил язык до 4K, добавив поддержку чисел с плавающей запятой; эта реализация была уникальной среди интерпретаторов BASIC, поскольку использовала двоично-десятичное число с точностью до 9 цифр и диапазоном до 10 99 и была опубликована бесплатно в виде вкладыша в журнал «Floppy ROM» . В версии 8K добавлены строковые переменные и функции тригонометрии . Версии 4K и 8K продавались SWTPC. В январе 1978 года Уитервик продал права на исходный код компании Motorola . [41] [42]
Томас Ф. Уэйтман написал Tiny BASIC в 1976 году для терминалов Hewlett-Packard HP-2640 и HP-2645 (которые использовали процессоры Intel 8008 и 8080), который был опубликован в журнале Hewlett-Packard Journal .
В декабрьском выпуске журнала Interface Age за 1976 год был опубликован LLL ( Ливерморская лаборатория Лоуренса ) BASIC, первый вариант которого был разработан Стивом Лейнингером на основе спецификации Эллисон до того, как Лейнингер покинул National Semiconductor и перешёл в Tandy Corporation . Окончательный интерпретатор был разработан Джоном Дикенсоном, Джерри Барбером и Джоном Титером в Университете Айдахо по контракту с LLL. Помимо 5K, он включал в себя пакет операций с плавающей запятой, разработанный Дэвидом Мидом, Хэлом Брэндом и Фрэнком Олкеном. Программа была передана в общественное достояние компанией LLL, которая разработала систему под эгидой Управления энергетических исследований и разработок США. [43]
Altair BASIC , 4K BASIC, мог работать на машине с оперативной памятью 4 КБ, оставляя свободным только около 790 байт для программного кода. [44] [45] Инициатива Tiny BASIC началась в ответ на плату в 150 долларов за Altair 4K BASIC.
В 1975 году Стив Возняк присоединился к недавно сформированному компьютерному клубу Homebrew , в который входили Ли-Чен Ван (Palo Alto Tiny BASIC) и Том Питтман (6800 Tiny BASIC). Возняк пришел к выводу, что его машина должна иметь собственный BASIC, который, как мы надеемся, будет первым для процессора MOS Technology 6502 . Поскольку для языка требовалось 4 КБ ОЗУ, он сделал это минимальным объемом памяти для проекта. [46] Первоначально Integer BASIC был опубликован на компакт-кассете в 1976 году.
В 1977 году Radio Shack (как его тогда называли) выпустила свой первый компьютер TRS-80 — систему Z80 с уровнем I BASIC в ПЗУ размером 4 КБ. Сотрудник Тэнди Стив Лейнингер написал первый проект интерпретатора NIBL (National Industrial Basic Language) для SC/MP , когда работал в National Semiconductor .[29] Не имея возможности взять с собой этот исходный код, он адаптировал Palo Alto Tiny BASIC Ли-Чен Ванга для оригинального прототипа TRS-80 Model I. Он значительно переработал интерпретатор, добавив поддержку чисел с плавающей запятой, простой черный цвет. -белые графики и READ/DATA/RESTORE
заявления. [47]
Первоначально разработанный в 1979 году, Sinclair 4K BASIC , написанный Джоном Грантом, использовал в качестве определения языка стандарт Minimal BASIC Американского национального института стандартов (ANSI) 1978 года, но сам по себе представлял собой неполную реализацию размером 4 КБ только с целочисленной арифметикой. [48]
Реализации Tiny BASIC были адаптированы для управления процессором и микроконтроллерами , такими как Arduino :
В 2002 году Эммануэль Шайу, Паскаль Манури и Бруно Пагано опубликовали Tiny BASIC (без GOSUB
/ RETURN
) в разделе «Разработка приложений с помощью Objective Caml» в качестве примера приложения Objective Caml . [53]
В 2013 году Алекс Янг опубликовал реализацию на Python . [54]
В 2019 году Сергей Кузнецов опубликовал версию на Ruby . [55]
Также в 2019 году Оскар Толедо Гутьеррес опубликовал bootBASIC, который умещается в 512 байтах загрузочного сектора машины 8086/8088, что делает его самой маленькой реализацией BASIC на данный момент. Для этого язык удаляет операторы отношения (оператор IF работает с ненулевыми значениями), ограничивает длину строк кода 19 символами или меньше и не обновляет отображение при нажатии клавиши Backspace. [56] Кроме того, в нем отсутствуют GOSUB и RETURN, но есть функция RND (без аргументов, возвращающая значение от 0 до 255). [57] Язык использует массив для хранения строк программы, для этого требуется 20 000 байт. [58]
В 2023 году Гордон Хендерсон опубликовал реализацию Tiny Basic на ассемблере 6502. Он находится под влиянием NIBL и может работать всего в 3,5 КБ ПЗУ, требуя не менее 1 КБ ОЗУ для хранения данных и программ. Он поддерживает DO/UNTIL, FOR/NEXT, простые строки и просмотр/просмотр памяти (байт или 16-битное слово), GOSUB/RETURN, CALL, RND с возможностью шестнадцатеричного ввода и вывода. [59]
В следующей таблице сравниваются языковые особенности реализаций Tiny BASIC с другими известными BASIC, которые им предшествовали.
;*********************************;; КРОШЕЧНЫЙ БАЗОВЫЙ ДЛЯ INTEL 8080; ВЕРСИЯ 2.0; ЛИ-ЧЕН ВАН; МОДИФИЦИРОВАНО И ПЕРЕВОДЕНО; ДЛЯ ИНТЕЛ-МНЕМОНИКИ; РОДЖЕР РАУСКОЛБ; 10 ОКТЯБРЯ 1976 ГОДА; @COPYLEFT; ВСЕ НЕПРАВИЛЬНОСТИ ЗАЩИЩЕНЫ;;*********************************
Движение за открытое программное обеспечение было основано Деннисом Эллисоном, когда он выпустил Tiny BASIC в 1975 году.
КРОШЕЧНЫЙ БАЗОВЫЙ ДЛЯ INTEL 8080ВЕРСИЯ 1.0ЛИ-ЧЕН ВАН10 ИЮНЯ 1976 ГОДА@COPYLEFTВСЕ НЕПРАВИЛЬНОСТИ ЗАЩИЩЕНЫИюньская дата в майском номере верна. Журнал отставал от графика, июньский и июльский номера были объединены, чтобы наверстать упущенное.
CRLF
там символизирует возврат каретки, за которым следует перевод строки .{{cite book}}
: |first1=
имеет общее имя ( справка )