Введение
Языки программирования BASIC, разработанные для систем с объемом памяти менее 4 КБ.
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, ввел термин "копилефт" для описания этой концепции. Реакция сообщества была настолько огромной, что бюллетень был преобразован в журнал Dr. Dobb's Journal – первый регулярный периодический журнал, посвященный программному обеспечению для микрокомпьютеров. Журнал Dr. Dobb's издавался в печатном виде в течение 34 лет, а затем в онлайн-формате до 2014 года, когда его веб-сайт превратился в статический архив. Небольшой размер и открытый исходный код сделали эти реализации бесценными в первые годы развития микрокомпьютеров в середине 1970-х годов, когда оперативная память была дорогой, а типичный объем памяти составлял всего 4–8 КБ. Хотя минимальная версия Altair BASIC от Microsoft также могла работать на машинах с 4 КБ памяти, она оставляла всего 790 байт для программ на BASIC. Больший объем свободного места был значительным преимуществом Tiny BASIC. Чтобы соответствовать строгим ограничениям по размеру, диалекты Tiny BASIC обычно лишены многих функций, часто встречающихся в других диалектах, например, в большинстве версий отсутствовали строковые переменные, вычисления с плавающей точкой и допускались только однобуквенные имена переменных. Реализации Tiny BASIC до сих пор используются сегодня для программирования микроконтроллеров, таких как Arduino.
Altair BASIC
Самые ранние микрокомпьютеры, такие как MITS Altair 8800, как правило, не имели встроенного ввода/вывода (В/В) за пределами переключателей на передней панели и светодиодных ламп. Для выполнения полезной работы обычно требовалось добавление карты расширения ввода-вывода и использование какого-либо терминала. В то время видеотерминалы были очень дорогими, стоили значительно больше, чем сам компьютер, поэтому многие пользователи обращались к механическим устройствам, таким как Teletype Model 33. Модель 33, как и большинство телепринтеров того времени, включала в себя перфораторную систему, предназначенную для предварительной записи сообщений операторами с последующим их воспроизведением на "высокой скорости", быстрее, чем большинство людей могли бы напечатать сообщение вручную. Для ранних микрокомпьютеров это обеспечивало удобный формат хранения компьютерных данных, позволяя пользователям записывать программы на бумажную ленту и распространять их другим пользователям. Клуб Homebrew Computer Club впервые собрался в марте 1975 года, и его участники вскоре стали использовать встречи для обмена программным обеспечением на перфолентах. На июньском собрании исчезла лента с предварительной версией Altair BASIC. Ленту передали Стиву Домпиеру, который передал её Дэну Соколу, у которого был доступ к высокоскоростному перфоратору. На следующей встрече в картонной коробке появилось 50 копий Altair BASIC на бумажной ленте. Когда Эд Робертс, основатель MITS, узнал об этом, он заявил: "Любой, кто использует украденную копию MITS BASIC, должен признаться в этом, ведь он – вор". Билл Гейтс оформил это более официально, написав "Открытое письмо любителям", в котором жаловался, что "Как большинство любителей, вероятно, знают, большинство из вас крадут программное обеспечение".
Маленький BASIC
Жалоба не была воспринята благосклонно. Среди множества ответов Боб Альбрехт, ещё один участник Homebrew и основатель компании People's Computer Company (PCC), полагал, что наилучшим решением будет разработка собственного BASIC, полностью свободного для использования любым желающим. Он обратился к Деннису Эллисону, преподавателю факультета компьютерных наук Стэнфордского университета, с просьбой написать спецификацию версии BASIC, которая поместилась бы в 2–3 килобайта памяти. Для упрощения переноса дизайн был основан на промежуточном языке (IL) – интерпретаторе для интерпретатора, что означало необходимость переноса лишь небольшой части общего кода. Первоначальный проект Эллисона был опубликован в сентябрьском выпуске информационного бюллетеня PCC в 1975 году вместе с версией интерпретатора IL для Intel 8080. В статье содержался призыв к программистам реализовать этот проект на своих компьютерах и отправить полученный ассемблерный код обратно в PCC. Они заявили о планах опубликовать три специальных выпуска бюллетеня, содержащих версии, предоставленные пользователями, а также исправления ошибок, программы, написанные на новом BASIC, и предложения по улучшению. Концепция получила дальнейшее признание, когда была перепечатана в январском выпуске 1976 года Специальной группы ACM по языкам программирования. Предложения стали поступать массово. Одной из заметных ранних версий был Tiny BASIC Extended, разработанный Диком Уипплом и Джоном Арнольдом, который работал в 3K оперативной памяти, добавлял циклы FOR NXT и позволял использовать единственный числовой массив. Они отказались от использования IL и написали код непосредственно в машинном коде, используя восьмеричную систему счисления. Он начинается с примечания Альбрехта под псевдонимом «дракон», в котором он предполагает, что трёх выпусков будет недостаточно, и спрашивает читателей, хотят ли они продолжения. Также была перепечатана оригинальная статья о Tiny BASIC из PCC, включен полный листинг Extended TB и ряд небольших программ на BASIC, включая советы и приёмы от Эллисона. Реакция на первый выпуск была настолько впечатляющей, что во введении ко второму номеру было объявлено о решении продолжить публикацию нового бюллетеня под упрощённым названием «Журнал доктора Добба». В последующих выпусках были опубликованы дополнительные версии языка, и подобные статьи стали появляться в других журналах, таких как Interface Age.
Распространение
[[Файл:Copyleft Все ошибки зарезервированы. png|thumb|240px|right|alt=Моноширинный шрифт гласит "Tiny basic for Intel 8080, версия 2.0 от Ли Чен Ванга, модифицированный и переведенный на мнемонику Intel Роджером Раусклобом, 10 октября 1976 г. @ Copyleft, Все ошибки зарезервированы."|В 1976 году энтузиасты компьютерной техники обменивались бумажными лентами, кассетами или даже перепечатывали файлы из печатных листингов. Джим Уоррен, редактор журнала Dr. Dobb's, в июльском бюллетене ACM Programming Language 1976 года написал о мотивах и методах этого успешного проекта. Он начал со слов: "Существует жизнеспособная альтернатива проблемам, поднятым Биллом Гейтсом в его возмущенном письме любителям компьютеров относительно "несанкционированного копирования" программного обеспечения. Когда программное обеспечение бесплатное или настолько дешевое, что его проще купить, чем скопировать, его не будут "красть"". Письмо Билла Гейтса было направлено на превращение программного обеспечения в товар. Альтернативный подход заключался в том, чтобы опытный профессионал разработал общий дизайн, а затем определил стратегию реализации. Знающие любители могли бы реализовать этот дизайн для различных компьютерных систем. Уоррен предсказал, что эта стратегия будет продолжена и расширена. Роджер Раусколб, член Homebrew Computer Club, модифицировал и улучшил программу Ли Чен Ванга, и это было опубликовано в декабрьском выпуске журнала Interface Age 1976 года. Роджер добавил свое имя и сохранил уведомление COPYLEFT.
Основные понятия
Tiny BASIC был разработан для использования минимального объема памяти, и это отражается как в ограниченности функций, так и в деталях его системы интерпретации. Ранним микрокомпьютерам не хватало оперативной памяти и внешних носителей для компилятора BASIC, что было более характерно для систем с разделением времени. Как и большинство BASIC того времени, Tiny BASIC был интерактивным: пользователь вводил команды в командную строку. Поскольку микрокомпьютеры той эпохи часто использовались с телетайпами или "неинтеллектуальными" терминалами, прямое редактирование существующего текста было невозможно, и редактор вместо этого использовал специальные символы, часто обратную косую черту, для обозначения позиции, куда пользователь мог вернуться для редактирования текста. Если пользователь вводил команду в командной строке, система проверяла, начинается ли она с числа. Если нет, строка немедленно анализировалась и выполнялась, потенциально генерируя вывод. Это называлось "прямым режимом". Если строка начиналась с числа, это число преобразовывалось из десятичного формата, например, "50", в 8-битное значение, в данном случае, в шестнадцатеричное. Это число использовалось как индекс в массиве, служащем областью хранения, где остальная часть строки сохранялась в точном виде, в котором она была введена. Когда пользователь вводил в командную строку, система просматривала массив, преобразовывала номер строки обратно в десятичный формат и затем выводила остальную часть текста в этой строке. Когда программа находилась в памяти и пользователь вводил команду, система переходила в "косвенный режим". В этом режиме указатель устанавливался на первую строку программы, например, 10. Оригинальный текст этой строки извлекался из памяти и выполнялся так, как если бы пользователь только что ввел его в прямом режиме. Затем указатель переходил к следующей строке, и процесс повторялся.
Отступления от конструкции
Определяя Tiny BASIC для Homebrew Computer Club, Питтман написал: "Tiny BASIC является надлежащим подмножеством Dartmouth BASIC, состоящим только из следующих типов операторов: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST, RUN. Арифметика выполняется только с 16-битными целыми числами, используя операторы + * / и вложенные скобки. Доступны только 26 однобуквенных имен переменных от A до Z, и нет функций. Строки и массивы отсутствуют. Tiny BASIC определяет номера строк меньше 256." Затем он продолжил описание своей реализации: "Этот язык был дополнен функциями RND, USR, PEEK и POKE, предоставляя пользователю доступ ко всем компонентам системы 6800 из программы BASIC." Многие разработчики привнесли свой опыт работы с HP Time Shared BASIC или DEC BASIC PLUS в свои проекты и ослабили формальную спецификацию Tiny BASIC. Из семи известных реализаций, опубликованных к 1977 году:
Все добавляли ту или иную функцию генерации случайных чисел, как правило. Хотя она и не была включена в спецификацию, в статье в бюллетене, предшествовавшей Design Note для Tiny BASIC, запрашивалась только эта функция. Все позволяли использовать необязательные пробелы, а в большинстве реализаций выражения в операторах присваивания могли содержать реляционные операторы. Все, кроме 6800TB, поддерживали разделители операторов в строках, обычно хотя TBX использовал , а PATB использовал . Во всех, кроме MINOL, в операторах убрали требование наличия реляционных операторов в выражениях (например, было допустимо). В реализациях полностью убрали его, сделали необязательным или поддерживали только для неявных . Ни одна реализация не поддерживала операторы . Многие были модифицированы для поддержки зон печати, используя для перехода к следующей зоне и для того, чтобы курсор не перемещался. Все, кроме 6800TB и DTB, добавили . Все, кроме 6800TB и MINOL, добавили функцию для возврата размера памяти: TBX имел , DTB и PATB имели , L1B имел , а NIBL имел . Четыре реализации добавили массивы: либо один, неразмерный массив в PATB и L1B, либо массивы с изменяемым размером в TBX и DTB. Четыре реализации добавили оператор . Четыре реализации добавили цикл: PATB, NIBL и L1B предлагали , в то время как TBX не поддерживал и использовал ключевое слово для завершения цикла. Только NIBL демонстрировал хоть какое-то приближение к структурированному программированию, с , несмотря на жалобы Эллисона в выпуске 2 о проблемах с BASIC. В качестве альтернативы токенизации, для экономии оперативной памяти, TBX, DTB и MINOL усекали ключевые слова: для , для , для . Полные, традиционные ключевые слова не принимались. В отличие от этого, PATB разрешал использовать традиционные ключевые слова, но также позволял сокращать любое ключевое слово до его минимальной уникальной строки с последующей точкой. Например, можно было ввести , хотя и другие варианты также работали. Эта система была сохранена в Level I BASIC для TRS 80, который использовал PATB, а также позже была найдена в Atari BASIC и BASIC различных карманных компьютеров Sharp.
All added some sort of random number function, typically Though not included in the specification, a newsletter article prior to the Design Note for Tiny BASIC requested only this function. All enabled to be optional and most let expressions in assignment statements contain relational operators. All but 6800TB supported statement delimiters in lines, typically although TBX used and PATB used In statements, all but MINOL removed the need for expressions to contain relational operators (e. g., was valid). Implementations removed altogether or made it optional or supported it only for implied None supported clauses. Many modified to support print zones, using to go to the next zone and to not advance the cursor. All but 6800TB and DTB added All but 6800TB and MINOL added a function to return memory size: TBX had , DTB and PATB had , L1B had , and NIBL had Four implementations added arrays, whether a single, undimensioned array in PATB and L1B or ensionable arrays in TBX and DTB. Four implementations added the ark statement. Four implementations added the loop: PATB, NIBL, and L1B offered , while TBX did not support and used the keyword to end a loop. Only NIBL had any nod towards structured programming, with , despite Allison's lament in Issue 2 about problems with BASIC. As an alternative to tokenization, to save RAM, TBX, DTB, and MINOL truncated keywords: for , for , for The full, traditional keywords were not accepted. In contrast, PATB allowed accepted traditional keywords but also allowed any keyword to be abbreviated to its minimal unique string, with a trailing period. For instance, could be typed , although and other variations also worked. This system was retained in Level I BASIC for the TRS 80, which used PATB, and was also later found in Atari BASIC and the BASIC of various Sharp Pocket Computers.
Диалекты
Наиболее заметными диалектами 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 (в журнале Dr. Dobb's Journal) Дата публикации Номер Диалект Автор Процессор Размер Декабрь 1975 1 Заметка по проектированию Деннис Эллисон Февраль 1976 2 6800 Tiny BASIC (6800TB) Том Питтман 6800 2K Апрель 1976 4 Пало-Альто Tiny BASIC (PATB) Ли Чен Ван 8080 1.77K Ноябрь 1976 10 Национальный промышленный язык BASIC (NIBL) Марк Александр и Стив Лейнингер SC/MP 4K Октябрь 1980 49 Улучшенный 6800 Tiny BASIC Роберт Хадсон 6800 Февраль 1985 100 TBI68K Гордон Брэндли 68000 Январь 2006 351 Возвращение Tiny BASIC Том Питтман (C) TBX также был известен как Texas Tiny BASIC. SCELBAL и 6800 Tiny BASIC были анонсированы в журнале, но их исходный код опубликован не был.
TBX was also known as Texas Tiny BASIC. Both SCELBAL and 6800 Tiny BASIC were announced in the magazine but did not publish their source code.
Пало-Альто, крошечный BASIC
Одной из самых популярных версий Tiny BASIC был Palo Alto Tiny BASIC, или PATB, созданный Ли Чен Вангом. PATB впервые появился в майском выпуске журнала Dr. Dobbs в 1976 году и был написан на специализированном языке ассемблера с нестандартными мнемоническими командами. Это привело к созданию новых портов, работавших с обычными ассемблерами для процессора 8080. Tiny BASIC не распространялся на условиях формальной лицензии copyleft, но был представлен в среде, где исходный код свободно распространялся и изменялся. Фактически, Ван ранее вносил правки в Tiny BASIC Extended, прежде чем написать собственный интерпретатор. Одним из наиболее значительных изменений в PATB стало добавление цикла FOR NEXT. В оригинальной версии TB циклы можно было реализовать только с использованием GOTO и GOSUB. Как и в Microsoft BASIC, верхняя и нижняя границы цикла устанавливались при входе в цикл и не изменялись в процессе его выполнения, поэтому изменение переменной, используемой для определения границы, не влияло на саму границу. Модификатор STEP был необязательным, как и в MS BASIC. Позже он адаптировал язык в 3K Control Basic для Cromemco, добавив имена переменных в формате "буква-цифра" (например, A0–Z9), логические функции (AND, OR, XOR), команду CALL для выполнения подпрограмм на языке ассемблера, расширенные возможности форматирования PRINT и другие функции (GET и PUT вместо PEEK и POKE; функции портов ввода-вывода). Palo Alto Tiny BASIC был адаптирован для многих других реализаций, включая Level I BASIC (1977), BASIC для карманного компьютера Sharp PC 1211 (1980) и Astro BASIC (1982, разработанный Джейми Фентоном).
Минол
Написанный старшеклассником, MINOL был единственной реализацией, не поддерживавшей полную Заметку о дизайне, лишенной приоритета операторов, имевшей только три оператора сравнения (<, =, #), исключавшей и поддерживавшей только 8-битную беззнаковую точность (в отличие от 16-битной знаковой точности для всех остальных реализаций) и номера строк от 0 до 254. Пробелы не допускались, за исключением строк; возвращает случайное число перед загрузкой строки по этому адресу в выражении; возвращает управление операционной системе. Память адресуема, как будто это двухмерный массив старших и младших байтов (например, от "(0,0)" до "(255,255)"); выполняет подпрограмму машинного кода. Томас Ф. Уайтман написал Tiny BASIC в 1976 году для терминалов Hewlett Packard HP 2640 и HP 2645 (использовавших процессоры Intel 8008 и 8080), который был опубликован в журнале Hewlett Packard Journal. В декабрьском выпуске журнала Interface Age за 1976 год был опубликован LLL (Lawrence Livermore Laboratory) BASIC, первый черновик которого был разработан Стивом Лейнингером на основе спецификации Эллисона до того, как Лейнингер покинул National Semiconductor и перешел в Tandy Corporation. Окончательный интерпретатор был разработан Джоном Диккенсоном, Джерри Барбером и Джоном Титером в Университете Айдахо по контракту с LLL. Занимая 5 КБ, он включал пакет операций с плавающей точкой, разработанный Дэвидом Мидом, Халом Брэндом и Фрэнком Олкеном. Программа была передана в общественное достояние LLL, которая разработала систему под эгидой Администрации США по энергетическим исследованиям и разработкам.
U. S. Energy Research and Development Administration.
4K BASICs
Altair BASIC, 4K BASIC, мог работать в машине с 4 КБ оперативной памяти, оставляя лишь около 790 байт свободных для программного кода. Инициатива Tiny BASIC возникла в ответ на цену в 150 долларов за Altair 4K BASIC. В 1975 году Стив Возняк присоединился к недавно созданному Homebrew Computer Club, среди членов которого были Ли Чен Ванг (Palo Alto Tiny BASIC) и Том Питтман (6800 Tiny BASIC). Возняк пришел к выводу, что его машине необходим собственный BASIC, который, возможно, станет первым для процессора MOS Technology 6502. Поскольку для языка требовалось 4 КБ оперативной памяти, он установил этот объем как минимальный для проекта. Integer BASIC был впервые опубликован на компакт-кассете в 1976 году. В 1977 году Radio Shack (как компания тогда называлась) выпустила свой первый компьютер, TRS 80 – систему на базе Z80 с Level I BASIC в 4 КБ ROM. Сотрудник Tandy Стив Лейнингер написал первый черновик интерпретатора NIBL (National Industrial Basic Language) для SC/MP, работая в National Semiconductor. Sinclair 4K BASIC, разработанный Джоном Грантом и первоначально выпущенный в 1979 году, использовал в качестве определения языка стандарт American National Standards Institute (ANSI) Minimal BASIC 1978 года, однако сам являлся неполной реализацией объемом 4 КБ, поддерживающей только целочисленную арифметику.
Последующие реализации
В 2002 году Эммануэль Шайлу, Паскаль Манури и Бруно Пагано опубликовали Tiny BASIC (в котором отсутствует символ "/") в книге "Разработка приложений с использованием Objective Caml" в качестве примера приложения на Objective Caml. В 2013 году Алекс Янг опубликовал реализацию на Python. В 2019 году Сергей Кузнецов опубликовал версию на Ruby. Также в 2019 году Оскар Толедо Гутьеррес опубликовал bootBASIC, который помещается в 512 байтах загрузочного сектора машины 8086/8088, что делает его самой маленькой реализацией BASIC на сегодняшний день. Для достижения этого язык исключает реляционные операторы (операторы IF работают с ненулевыми значениями), ограничивает длину строк кода 19 символами или меньше и не обновляет экран при нажатии клавиши Backspace. Кроме того, в нем отсутствуют команды GOSUB и RETURN, но присутствует функция RND (без аргументов, возвращающая значение от 0 до 255). Язык использует массив для хранения строк программы, что требует 20 000 байт памяти. В 2023 году Гордон Хендерсон опубликовал реализацию Tiny Basic на ассемблере 6502. Она вдохновлена NIBL и может работать, занимая всего 3,5 КБ ПЗУ, при этом требуется как минимум 1 КБ ОЗУ для хранения данных и программы. Она поддерживает DO/UNTIL, FOR/NEXT, простые строки, а также команды peek/poke памяти (байт или 16-битное слово), GOSUB/RETURN, CALL, RND с возможностью ввода и вывода в шестнадцатеричном формате.
Сравнение диалектов
В следующей таблице сравниваются языковые особенности реализации Tiny BASIC с другими известными BASIC, которые им предшествовали. + Сравнение реализаций BASIC – Tiny BASIC и другие BASIC Программист(ы) Процессор Тип ВВОД ПРИСВОИть ПЕЧАТЬ ПЕРЕХОДИТЬ_К ЕСЛИ ТОГДА ПОДПРОГРАММА ВОЗВРАТ КОНЕЦ ЗАПУСК СПИСОК ОЧИСТИТЬ НОВЫЙ РЕМ ДЛЯ/ПОКА/ШАГ/СЛЕДУЮЩИЙ ЧТЕНИЕ / ДАННЫЕ / ВОССТАНОВИТЬ Добавленные команды BASIC Настройки Выражения relop Функции RND Функция памяти Номера строк Разделитель операторов Ошибки Точность Арифметика Переменные Массивы Строки (студенты Дартмута) GE 225 Компилировать и выполнять [!] LET var = выражение PRINT expr list { , / ; / } GO TO number IF выражение relop выражение THEN номер_строки GOSUB номер RETURN END RUN LIST start NEW [запрос имени программы] REM FOR / TO / STEP / NEXT READ, DATA STOP приоритет, ^ < <= = >= > <> INT, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN RND(0) 0 1 от 1 до 99999 22 определено 9 цифр ±999,999,999; E обозначение, основание 2 от 256 до +255 (E±76). A–Z, A0–Z9 DIM (однобуквенное имя, два измерения); если не указано, предполагается от 0 до 10; до 1500 элементов во всех массивах (добавлено в версии 4) (сотрудники DEC) PDP 8 Компилировать и выполнять INPUT var list LET var = выражение PRINT expr list { , / ; / } GO TO number IF выражение relop выражение [THEN/GO TO] номер_строки GOSUB номер RETURN END RUN LIST (первый (, последний)) NEW [запрос имени программы] REM FOR / TO / STEP / NEXT READ, DATA, RESTORE STOP, OLD, SAVE, UNSAVE DELETE (первый (, последний)), BYE приоритет, ^ < <= = >= > <> INT, SGN, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN RND(0) 0 1 от 1 до 2045 23 определено ±134,217,727; 14E 38<N<1.7E38 A–Z, AA–Z9 DIM (однобуквенное имя, два измерения) Альфред Уивер, Майкл Тиндалл, Рональд Дэниелсон 8008 Интерпретатор INPUT <переменная> {, <переменная>}* LET var = формула PRINT <строка> / <формула> {, <строка> / <формула>}* GO TO number IF выражение THEN номер_строки GOSUB номер RETURN END RUN REM FOR / TO / STEP / NEXT DEF FN, STOP приоритет, ^ < <= = >= > # AND OR NOT FNA Z, SIN, COS, LOG, SQR, EXP, ATN от 0 до 999 4-байтовая мантисса и 1-байтовый экспонент [пакет арифметики с плавающей точкой Datapoint 2200] A–Z, A0–Z9 DIM (однобуквенное имя, три измерения) Билл Гейтс, Пол Аллен, Монте Давидофф 8080 Интерпретатор INPUT ("строка",) var list (LET) var = выражение PRINT expr list { , / ; } GOTO number IF выражение THEN номер_строки/оператор GOSUB номер RETURN END RUN LIST (начало) NEW REM FOR / TO / STEP / NEXT READ, DATA, RESTORE STOP приоритет < <= = >= > <> ABS, INT, SGN, SQR, TAB, USR RND(X) <0, новое использование X в качестве зерна; =0, повторить; >0, следующее от 1 до 65535 : 12 определено 40-битное операндное число с плавающей точкой DIM (одно измерение) Деннис Эллисон Интерпретатор INPUT var list LET var = выражение PRINT expr list GOTO выражение IF выражение relop выражение THEN оператор GOSUB выражение RETURN END RUN LIST [эквивалентно NEW] приоритет < <= = >= > <> >< от 1 до 255 8 определено 16 бит ± 32767 A–Z Dick Whipple & John Arnold 8080 Интерпретатор IN (LET) var = выражение ;} GO TO IF выражение [no THEN] оператор GO SUB RET END RUN LST (первый (, последний)) NEW FOR NXT (no STEP) DTA (массив LET) приоритет < <= = >= > <> >< TB пробелы в печати RN (случайное 0 10000) SZE от 1 до 65535 $ 14 определено 16 бит ± 32767 AZ DIM, 1 или 2 измерения, максимум 255x255 Fred Greeb 8080 Интерпретатор IN (LET) var = выражение} GOTO IF выражение [no THEN] оператор GUBET RUN END RUN LIST (первый (последний) [эквивалентно NEW] ± 32767 AZ DIM (два измерения, максимальный размер 255) Steve Wozniak 6502 Интерпретатор INPUT ("строка",) var list (LET) var = выражение PRINT expr list { , / ; } GOTO выражение IF выражение relop выражение THEN номер_строки/оператор GOSUB выражение RETURN END RUN (start) LIST (первый (, последний)) SCR REM FOR / TO / STEP / NEXT AUTO, DEL, POKE TAB (команда), C приоритет <= = >= > > <> # OR NOT SGD MON, ABS, PEEK , LEN RND (((X) 0 X (или X 0!) University of Idaho staff 8080 Interpreter INPUT var list (LET) var = выражение PRINT expr list { , / ;} GO TO number IF выражение relop выражение (THEN) оператор GO SUB number RETURN END RUN LIST SCR REM FOR/TO/NEXT (no STEP) STOP CALL, GET , PUT приоритет < <= = >= > <> >< от 0 до 32767 : 14 определено 32-битное операндное число с плавающей точкой A–Z, A0–Z9 DIM (только целые числа, однобуквенное имя, одно измерение, максимальный размер 255) John Grant Z 80 Interpreter INPUT var LET var = выражение PRINT expr list { , / ;} GO TO number IF выражение THEN оператор GO SUB number RETURN RUN (number) LIST CLEAR NEW REM FOR/TO/NEXT (no STEP) STOP POKE приоритет < = > ABS, CHR$, CODE, PEEK, RND, STR$, TL$, USR RND, RANDOMISE от 1 до 9999 10 определено 16-битное целое число 16-битное целое число A–Z followed by any number of alphanumeric DIM A Z (только целые числа, однобуквенное имя, одно измерение, максимальный размер 255) Eric T. Mueller 8080 Interpreter IN [возврат к началу прямой инструкции] END RUN LIST CLEAR [только переменные] NEW < = # от 1 до 254 : 6 определено 8 бит от 0 до 255 A–Z (H,L) местоположение памяти один символ Li Chen Wang 8080 Interpreter INPUT [(expression) var]* (LET) var = выражение PRINT expr list GOTO выражение IF выражение [no THEN] оператор GOSUB выражение RETURN STOP RUN LIST (start) NEW REM FOR / TO / STEP / NEXT STOP приоритет < <= = >= > # ABS RND SIZE от 1 до 32767 ; 3 определено 16 бит ± 32767 A–Z @(1 массив из 1 измерения) Mark Alexander & Steve Leininger SC/MP Interpreter INPUT ($)var (LET) var = выражение PR/PRINT expr list GOTO выражение IF выражение (THEN) оператор GOSUB выражение RETURN END RUN LIST (start) CLEAR [переменные и стек] NEW REM FOR / TO / STEP / NEXT DO/UNTIL Адресация памяти (@ [PEEK/POKE], STAT, PAGE) приоритет < <= = >= > <> MOD , AND, OR, NOT, RND(A,Z) TOP от 0 до 32767 : 13 четырехзначных определений 16 бит ± 32767 A–Z адресация памяти Steve Leininger Z80 Interpreter INPUT (#digit) [(expression) var]* (LET) var = выражение PRINT (#digit) expr list GOTO number IF выражение THEN оператор 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 приоритет < <= = >= > <> >< ABS , INT , MEM, POINT(X,Y) RND MEM от 1 до 32767 : 3 определено 16 бит ± 32767 A–Z A(1 массив из 1 измерения) Robert Uiterwyk 6800 Interpreter INPUT var list (LET) var = выражение PRINT expr list { , / ; } GOTO выражение IF выражение relop выражение THEN оператор GOSUB выражение RETURN END RUN LIST (первый (, последний)) NEW FOR/TO/NEXT (no STEP) TAB приоритет < <= = >= > <> >< RND, SIZE RND [возвращает 1 32762] SIZE (оператор, который печатает используемые байты и свободные байты) от 1 до 65535 17 определено 16 бит [позже BCD!] ± 32767 A–Z DIM (два измерения, максимальный размер 255) Steve Wozniak 6502 Interpreter INPUT ("string",) var list (LET) var = выражение PRINT expr list { , / ; } GOTO выражение IF выражение relop выражение THEN номер_строки/оператор GOSUB выражение RETURN END RUN (start) LIST (первый (, последний)) SCR REM FOR / TO / STEP / NEXT AUTO, DEL, POKE TAB (команда), CALL приоритет <= = >= > > <> # OR NOT MOD SGN, ABS, PEEK , LEN RND(X) 0 X (или X 0!) HIMEM, LOMEM от 1 до 32767 [ранняя версия, затем :] 16 определено 16 бит ± 32767 A–Z followed by any number of alphanumeric DIM (одно измерение)