СКЕЛЬБАЛ
SCELBAL , сокращение от SCientific ELEmentary Basic Language , представляет собой версию языка программирования BASIC, выпущенную в 1976 году для SCELBI и других ранних Intel 8008 и 8080 на базе микрокомпьютеров , таких как Mark-8 . Более поздние дополнения к языку включали расширенный математический пакет и обработку строк . Исходная версия требовала 8 КБ ОЗУ , а дополнения требовали не менее 12 КБ.
Язык был опубликован в виде книги с вводными разделами, за которыми следовали блок-схемы 8008 , а затем ассемблерный код . В книге описывались способы сэкономить больше памяти, например, отключив массивы, а также то, как пользователь может добавлять в язык свои собственные новые функции.
История
[ редактировать ]Основным автором SCELBAL является Марк Арнольд, который был учеником средней школы в 1974 году, когда было объявлено о SCELBI. Арнольд дружил с профессорами Университета Вайоминга (UW) и через них организовал учетную запись на их Sigma 7 мейнфрейме . Первая версия того, что стало SCELBAL, была написана для этой машины. Позже в том же году он написал кросс-компилятор на этой платформе 8008.
Арнольд поступил в UW в 1975 году и связался с Натом Уодсвортом, одним из основателей SCELBI, и предложил идею скомпилированной версии BASIC для их новой платформы. Это будет многопроходная система, в которой промежуточные версии будут сохраняться на кассете . Это было бы очень утомительно в использовании, но позволило бы создавать программы, которые будут работать на моделях системы 8H размером 4 КБ. Уодсворт отдал предпочтение интерпретатору , для которого потребуется 8 КБ, который будет доступен в новых моделях системы 8B. В языке использовались процедуры с плавающей запятой , опубликованные Уодсвортом в 1975 году в книге « Программирование на машинном языке для 8008» .
Уодсворту потребовалось несколько месяцев, чтобы наконец заключить контракт, который включал отправку Арнольду системы разработки 8B. Это значительно задержало выпуск языка в 1976 году. Арнольд предположил, что, если бы не эти задержки, SCELBAL мог бы быть выпущен примерно в то же время, что и Altair BASIC, в конце 1975 года. Впервые он был представлен в длинной статье во втором выпуске журнала Dr. Журнал Добба в феврале 1976 года. [1]
О выпуске SCLEBAL было объявлено в рекламе июньского номера Byte за 1976 год. В рекламе язык не связывался конкретно с платформой SCELBI, вместо этого он просто предлагался в виде книги в качестве полного списка исходных текстов для создания версии BASIC в любой системе 8008 или 8080 с необходимыми 8 КБ ОЗУ. Цена книги составила 49 долларов (около 262 долларов в 2023 году). [2]
Описание
[ редактировать ]SCELBAL использовал 32-битный (четырехбайтовый) формат с плавающей запятой для числовых вычислений с 23-битной мантиссой , 1-битным знаком для мантиссы, 7-битной экспонентой и 1-битным знаком для экспоненты. Они были организованы в обратном порядке: младший байт мантиссы находился в первом байте, за ним следовал средний, а затем наиболее значимый байт со знаком в старшем бите. Показатель степени шел последним, опять же со знаком в старшем бите. [3] В руководстве представлен хорошо документированный ассемблерный код для всего математического пакета, включая точки входа и примечания по использованию. [4] 32-битные форматы были обычным явлением в то время, в то время как более поздние версии BASIC, начиная с Microsoft BASIC для MOS 6502 , обычно использовали 40-битный (пятибайтовый) формат для дополнительной точности. [5]
В остальном SCELBAL был похож на другие диалекты BASIC, включая ранние версии MS, такие как Altair BASIC , в которых отсутствовали строковые переменные и операторы, а также ряд математических функций. Остальные различия были менее выражены. IF
заявление имело необязательную форму IF...GOTO
что устранило необходимость THEN
, IF X<Y GOTO 100
. [6] Он также сохранил краткую форму той же концепции в стиле MS: IF X<Y THEN 100
. Это также позволяло условное выполнение других операторов, таких как IF X<Y THEN PRINT X
. [7]
Базовый язык не поддерживал обработку строк, хотя в нем можно было использовать литеральные (константные) строки. PRINT
и имел вспомогательные функции CHR
для печати непечатаемых символов и TAB
предоставить макет. Как ни странно, система требовала, чтобы в кодах ASCII были установлены старшие разряды, поэтому для преобразования обычных кодов символов ASCII в коды символов SCELBI нужно было складывать или вычитать 128. Например,
PRINT "HELLO";CHR(172);CHR(160);"WORLD"
для создания строки «HELLO, WORLD» на выходе. [8]
INPUT
обычно читает введенный пользователем текст как число, но позволяет знаку доллара указывать, что вместо этого значение следует читать как код SCELBI. Например, INPUT A
будет читать пользовательский ввод «1» в A как значение с плавающей запятой 1, в то время как INPUT A$
приведет к тому, что A будет установлено на 177, 49 (ASCII для «1») + 128. Кроме того, когда используется знак доллара, традиционный знак «?» Подсказка не выводится, и команда возвращается на язык, как только вводится один символ, вместо ожидания возврата каретки, как в обычном случае. [8]
Среди немногих других отличий было то, что NEW
команда, найденная в MS и очищающая существующий программный код и данные, называется SCR
для "царапины", [9] и USR
функция, которая называлась подпрограммой машинного языка , была UDF
для «пользовательской функции». [10] UDF
позволяла передавать один параметр с плавающей запятой пользовательской функции, машинный код которой должен был быть загружен в память в фиксированном месте перед выполнением. [11]
Коды ошибок были сокращены до двух букв, а код для LOAD
и SAVE
были предоставлены в шаблонной форме и, как ожидается, будут реализованы при портировании на другие платформы. [12] Номера строк могут находиться в диапазоне от 1 до 999999. [10] тогда как большинство BASIC использовали 16-битное целое число и, таким образом, поддерживали строки от 1 до 32767 или от 1 до 65535.
Особенности языка
[ редактировать ]- Взято из руководства 1976 года, если не указано иное. [13]
Команды
[ редактировать ]Только в немедленном режиме
[ редактировать ]В документации называется «исполнительным» режимом.
SCR
- царапина, эквивалент MS
NEW
LIST
RUN
LOAD
SAVE
Немедленный или программный режим
[ редактировать ]PRINT
INPUT
- Как и MS, может принимать несколько переменных,
INPUT A,B,C
. Не включил строку подсказки. LET
- Как и МС,
LET
было необязательным, поэтому15 LET X=10
и15 X=10
эквивалентны. IF...THEN
IF...GOTO
- Альтернативная форма
IF...THEN
. GOTO
- Похоже, "разнесенная версия",
GO TO
, не получил поддержки. GOSUB...RETURN
FOR...TO...STEP...NEXT
- Как и в МС,
STEP
является необязательным и принимается равным 1.NEXT
требовалась переменная, в отличие от более поздних версий MS. REM
END
DIM
- Массивы работали как в MS, но были необязательными и их можно было отключить для экономии памяти. Поддерживались только одномерные массивы, а общее количество элементов для всех массивов вместе взятых составляло 64 числа.
Функции
[ редактировать ]INT
SGN
ABS
SQR
RND
- Как и в MS, принимает фиктивную переменную и возвращает значение от 0 до 1.
CHR
- Обратите внимание на отсутствие $ в MS, которая использует
CHR$
. TAB
UDF
Расширения
[ редактировать ]SCELBI опубликовал два расширения к системе: Дополнение по математическим функциям и Дополнение по строкам.
Дополнение к математическим функциям
[ редактировать ]Дополнение к математическим функциям добавило пять новых трансцендентных функций : SIN
, COS
, EXP
, LOG
, и ATN
. [14]
Струнное дополнение
[ редактировать ]Строковое дополнение было несколько больше, чем математические функции, и включало ряд новых функций.
Строки могли иметь длину до 80 символов, а система могла хранить в общей сложности 64 строковые переменные. Любой из этих 64 или все они могли быть одномерными массивами, но общее количество все равно должно было составлять 64 строки. Как ни странно, строковые массивы не требовали DIM
заявление. [15]
В отличие от MS BASIC и вдохновившей его обработки строк Dartmouth BASIC , SCELBI использовал стиль «нарезки» строковых манипуляций, который можно найти в современных BASIC, таких как SDS BASIC , HP Time-Shared BASIC и Northstar BASIC или более позднем Atari BASIC . Вместо использования таких функций, как LEFT$
, RIGHT$
, MID$
для доступа к подстрокам использовался синтаксис доступа к массиву с двоеточием перед начальной точкой и, при необходимости, точкой с запятой перед длиной. Поскольку SCELBAL также поддерживал строковые массивы, первое число в средствах доступа к массиву было индексом массива и было необязательным, если переменная не была массивом. Так, например, код: [15]
10 LET A$="HELLO"
20 PRINT A$(:2;3)
приведет к тому, что на выходе будет напечатано «ELL». Если использовался массив, синтаксис требовал индекс массива в первом параметре: [15]
100 LET A$(1)="HELLO"
150 LET A$(2)="WORLD"
200 PRINT A$(2:2;3)
приведет к тому, что на выходе будет напечатано «ORL». SCELBAL также позволял опускать точку с запятой, которая указывает символы от начальной точки до конца строки. Так, например, код:
210 PRINT A$(2:2)
приведет к тому, что на выходе будет напечатано «ORLD».
Несмотря на то, что он похож на SDS BASIC, существует существенное отличие в том, как он работает по сравнению с другими BASIC, которые использовали синтаксис срезов, поскольку последним параметром является длина, а не позиция. Например, в Atari BASIC аналогичный код: [16]
20 PRINT A$(2,3)
вместо этого выведет «EL», поскольку инструкция переводится как «печатать все символы между позициями 2 и 3». Таким образом, SCELBAL работает более похоже на MS BASIC, где эквивалентами могут быть: [17]
20 PRINT MID$(A$,2,3)
и
210 PRINT RIGHT$(A$(2),2)
Чтобы добавить полную поддержку строк, дополнение заменило исходное. CHR
с CHR$
, который соответствует синтаксису своего аналога MS. [15] Так же, INPUT
был изменен, поэтому строковые переменные работали как числовые, ожидая возврата каретки, а затем присваивая весь пользовательский ввод связанной строковой переменной. [18] Также добавлены функции поддержки LEN
и ASC
, [15] и VAL$
для преобразования строки, содержащей числовое значение, в строковое представление этого числа. Как и в MS, для конкатенации использовалась +
оператор. [18]
Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Арнольд, Марк; Уодсворт, Нат (февраль 1976 г.). «SCELBAL — язык более высокого уровня для систем 8008/8080» . Журнал доктора Добба . стр. 30–53.
- ^ «Шокирует!» . Байт . Июнь 1976 г. с. 47.
- ^ Арнольд и Уодсворт 1976 , с. 10.1.
- ^ Арнольд и Уодсворт 1976 , с. 10.
- ^ Стейл, Майкл (20 октября 2008 г.). «Создайте свою собственную версию Microsoft BASIC для 6502» .
- ^ Арнольд и Уодсворт 1976 , с. 14.10.
- ^ Арнольд и Уодсворт 1976 , с. 2.3.
- ^ Jump up to: а б Арнольд и Уодсворт 1976 , с. 14.16.
- ^ Арнольд и Уодсворт 1976 , с. 14.1.
- ^ Jump up to: а б Арнольд и Уодсворт 1976 , с. 14.17.
- ^ Арнольд и Уодсворт 1976 , с. 14.3.
- ^ Арнольд и Уодсворт 1976 , с. 14.18.
- ^ Арнольд и Уодсворт 1976 .
- ^ Математика 1977 , с. 1.
- ^ Jump up to: а б с д и Струны 1977 , с. 1.
- ^ Смолл, Дэвид, изд. (1983). «Строки Atari и обработка текста» . Креативная Атари . Творческие вычисления.
- ^ Струны 1977 , с. 3.
- ^ Jump up to: а б Струны 1977 , с. 2.
Библиография
[ редактировать ]- Арнольд, Марк; Уодсворт, Нат (1976). SCELBAL: язык более высокого уровня для систем 8008/8080 (PDF) . СКЭЛБИ Компьютерный консалтинг.
- Арнольд, Марк (1977). SCELBAL Дополнение к математическим функциям . СКЭЛБИ Компьютерный консалтинг.
- Арнольд, Марк (1977). Дополнение к струнным инструментам SCELBAL . СКЭЛБИ Компьютерный консалтинг.
Внешние ссылки
[ редактировать ]- Симулятор Javascript 8008 с предустановленным SCELBAL.
- Симулятор JavaScript 8008 с предустановленными SCELBAL, Math и String Supplements.
- Объектный код для опубликованного SCELBAL в формате Intel Hex
- Страница SCELBAL Майка Уиллегала
- Эмулятор SCELBI OS/X Майка Уиллегала, который может запускать SCELBAL