HP с разделением времени BASIC
Парадигма | императив |
---|---|
Разработчик | Майк Грин |
Впервые появился | до 1969 года |
ТЫ | ХП 2100 |
Под влиянием | |
Дартмут БЕЙСИК | |
Под влиянием | |
См. SDS BASIC , Integer BASIC , Atari BASIC и многие другие. |
HP Time-Shared BASIC ( HP TSB ) — языка программирования BASIC интерпретатор для Hewlett-Packard HP 2000 линейки миникомпьютеров с разделением времени . TSB исторически примечательна как платформа, выпустившая первые публичные версии игры Star Trek .
В системе реализован диалект BASIC, а также элементарная учетная запись пользователя и библиотека программ, которая позволяет нескольким людям использовать систему одновременно. Эти системы были основной силой в начале-середине 1970-х годов и породили большое количество программ. HP вела базу данных предоставленных программ, и клиенты могли заказывать их на перфоленте за символическую плату.
Большинство BASIC 1970-х годов ведут свою историю от оригинального Dartmouth BASIC 1960-х годов, но ранние версии Dartmouth не поддерживали строковые переменные и не предлагали функции манипулирования строками. Вендоры добавили свои решения; HP использовала систему, похожую на Фортран и другие языки, с разделением массивов , а DEC позже представила MID/LEFT/RIGHT
функции.
Когда в середине 1970-х годов на рынок начали выходить микрокомпьютеры , появилось множество новых BASIC, чьи парсеры основывались на синтаксисе DEC или HP. Altair BASIC , первоначальная версия того, что впоследствии стало Microsoft BASIC , была создана по образцу BASIC-PLUS от DEC . Другие, в том числе Apple Integer BASIC , Atari BASIC и North Star BASIC, были созданы по образцу HP. Это несколько затрудняло преобразование между этими платформами, если приходилось сталкиваться с обработкой строк.
Номенклатура
[ редактировать ]Программное обеспечение также было известно по названию версии, привязанному к аппаратной версии, на которой оно работало, например HP 2000C Time-Shared BASIC , а операционная система существовала в разных вариантах — 2000A, 2000B, 2000C, High-Speed 2000C, 2000E, и 2000Ф.
В некоторых публикациях HP также называла этот язык «Access BASIC». Это соответствовало названию машин, на которых он работал, известных в некоторых публикациях как «2000/Access». Эта терминология, по-видимому, использовалась лишь кратко, когда платформа была впервые запущена.
Подробности платформы
[ редактировать ]За исключением систем 2000A и 2000E, система реализована с использованием двухпроцессорной архитектуры . Один полностью сконфигурированный процессор HP серии 2100 используется для выполнения большей части системного кода и всего пользовательского кода, а второй процессор HP серии 2100 меньшего размера используется для обработки последовательных линий RS-232 , по которым передается время. -совместное использование подключенных пользователей. В зависимости от конфигурации оборудования система поддерживает до 16 или до 32 удаленных пользователей одновременно.
Обычным терминалом для системы TSB был Teletype Model 33 ASR, подключавшийся непосредственно к процессору ввода-вывода или через модем или акустический соединитель . Имена учетных записей представляют собой комбинацию одного буквенного символа, за которым следуют три десятичные цифры, например , B001. Привилегированные учетные записи начинались с буквы «А» и имели некоторые дополнительные возможности хранения команд и программ. — Учетная запись суперпользователя A000. Эта схема позволяет использовать до 26 000 учетных записей пользователей.
Во время выполнения пользовательские программы переносятся на накопитель с фиксированной головкой — физически это диск, но работающий как магнитный барабан . с подвижной головкой или в пакете Когда пользовательские программы не выполняются, они хранятся на диске . Привилегированные пользователи также могут хранить программы на гораздо более быстром барабане. Резервная копия жесткого диска была записана на магнитную ленту .
Имена программ и файлов состоят из шести буквенных символов (AZ) и цифр (0–9). Программы сохраняются в токенизированном формате с помощью команды SAVE. Их также можно сохранить в полукомпилированном формате с помощью команды CSAVE, что позволяет им запускаться быстрее. Поскольку система была тесно связана с использованием общедоступных телетайпов, окончания строк в файлах состояли из символа возврата каретки (ASCII CR, шестнадцатеричный 0D), за которым следовал символ перевода строки (ASCII LF, шестнадцатеричный 0A).
Синтаксис
[ редактировать ]Этот язык представляет собой довольно стандартную реализацию BASIC, обеспечивающую интегрированную среду редактирования и выполнения. Операторы анализируются на предмет правильного синтаксиса по мере их ввода, а затем сохраняются в токенизированной форме. Каждый оператор BASIC должен находиться на строке с уникальным номером, например
10 PRINT "HELLO WORLD"
Номера строк являются обязательными, а операторы автоматически размещаются в возрастающей числовой последовательности. Строки TSB могут содержать один оператор; объединение нескольких операторов в цепочку с двоеточием, как в MS BASIC, не поддерживается. Допускается присвоение нескольких переменных, например , 20 LET A=B=C=42
. Как и в большинстве версий BASIC, использование слова «LET» было необязательным.
В самой ранней версии (2000A) язык поддерживал следующие функции. [1] В более поздних версиях было добавлено множество дополнительных функций. [2]
- Безусловное управление потоком программы через
GOTO
операторы и подпрограммы черезGOSUB
иRETURN
заявления - Условное управление потоком через
IF/THEN
заявление - Расчетное управление потоком через
GOTO/OF
иGOSUB/OF
заявления - Блок-цикл на основе переменных
FOR
иNEXT
заявления - Хранение данных в коде через
DATA
,READ
, иRESTORE
заявления - Ввод и вывод пользователю или файлу диска через
INPUT
,READ #
,PRINT
,PRINT #
, иIF END #
заявления - Числовые переменные формы «A» или «A n » (где A — одна буква, а n — одна необязательная цифра), хранящиеся в виде 32-битных с плавающей запятой . чисел
- Строковые переменные формы «A$» (где A — одна буква), хранящие от 0 до 72 символов.
- Одно- или двумерные матричные (массивы) переменные вида «A[x]» или «A[x,y]»
- Матричные операции с помощью операторов (
MAT READ, MAT INPUT, MAT PRINT, MAT=
) и операции (+, -, *, ZER, CON, IDN, INV, TRN
) - Булевы операторы (
AND, OR, NOT
) и операторы отношения (<, <=, =, #, <>, >=, and >
) - Встроенные математические функции, включая тригонометрические (
SIN, COS, TAN, ATN
), логарифмы (LOG, EXP
), квадратный корень (SQR
), генератор случайных чисел (RND
), другие (ABS, INT, SGN, MIN, MAX)
и пользовательские функции - Операции с перфолентой с использованием дистанционных терминалов электромеханического телетайпа Teletype Model 33
Обработка строк
[ редактировать ]Строки в TSB рассматриваются как массив символов, а не как один многосимвольный объект. По умолчанию им выделяется один символ в памяти, и если необходима строка большей длины, их необходимо упомянуть перед использованием. Например, DIM A$[10]
создаст строку, которая может содержать максимум 10 символов. Максимальная длина строки в TSB составляет 255 символов. [3]
Доступ к подстрокам внутри строк осуществляется с использованием нотации « нарезки »: A$(L,R)
или A$[L,R]
, где подстрока начинается с самого левого символа, указанного индексом L, и продолжается до самого правого символа, указанного индексом R, или A$[L]
Форма, в которой подстрока начинается с самого левого символа, указанного индексом L, и продолжается до конца строки. TSB принимает () или [] взаимозаменяемо. Индексы массива и подстроки начинаются с 1.
Это резко контрастирует с BASICами, которые следуют шаблону DEC и используют такие функции, как LEFT$()
, MID$()
, и RIGHT$()
для доступа к подстрокам, хотя ANSI BASIC продолжает использовать синтаксис подстроки, аналогичный тому, который был введен Hewlett-Packard. Нотацию HP также можно использовать на стороне назначения оператора LET или INPUT для изменения части существующего строкового значения, например 100 A$[3,5]="XYZ"
или 120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS"
, чего нельзя было сделать с ранними реализациями LEFT/MID/RIGHT.
Основное преимущество этого стиля доступа к строкам заключается в том, что он устраняет необходимость в сложном управлении памятью , которое в противном случае требуется при изменении длины строки. MS BASIC имел длинную библиотеку для сжатия памяти путем удаления мертвого пространства в куче строк , когда в системе заканчивалась память. Он также был общеизвестно медленным и за время своего существования несколько раз модифицировался с целью повышения производительности или исправления ошибок. [4] Недостатком стиля TSB является то, что строка всегда занимает весь объем DIM-пространства, даже если строка внутри пуста, а простые задачи, такие как конкатенация, потенциально могут переполнить строку, если изначально для нее не был установлен большой размер.
Более поздние версии Dartmouth BASIC включали строковые переменные, основанные на том же шаблоне, что и в BASIC-PLUS и MS BASIC. Однако в этой версии не использовались функции LEFT/MID/RIGHT для управления строками, а вместо этого использовались CHANGE
команда, которая преобразовывала строку в эквивалентные значения ASCII и обратно. HP включила идентичную функциональность, изменив только название на CONVERT
. [5] [а] Кроме того, можно использовать одинарные кавычки для преобразования числовой константы в символ ASCII, что позволяет создавать строку по частям; A$='23 '64 '49 "DEF"
создал строку «ABCDEF» без необходимости CHR$()
функция. [6]
МАТ-команды
[ редактировать ]Более поздние версии Dartmouth BASIC включали набор MAT
команды, которые позволяли выполнять операции с целыми массивами ( матрицами ) с помощью одного оператора. Они также были доступны в более поздних версиях TSB. В своей простейшей форме, MAT
используется как альтернативная форма LET
, применяя выражение ко всем элементам массива. Например:
100 DIM A(20),B(20)
...
200 MAT A=A+B
Добавит значение каждого значения в B к каждой записи в A таким же образом, как:
100 DIM A(20),B(20)
...
200 FOR I=1 TO 20
210 A[I]=A[I]+B[I]
220 NEXT I
Помимо того, что эти команды делают код короче и нагляднее, они также имеют то преимущество, что они высоко оптимизированы, что легко превосходит использование FOR/NEXT. [7] Дополнительные функции и операторы изменяют PRINT
и INPUT
, инвертировать массивы, строить единичные матрицы и т. д. в одном операторе. [8]
Другие различия
[ редактировать ]TSB также включает ряд более незначительных отличий от других диалектов. Среди наиболее важных:
#
— необязательная форма сравнения неравных, идентичная<>
[9]- вычисляемый переход с использованием
ON...GOTO/GOSUB
синтаксис не поддерживается. Вместо этогоGOTO expression OF 1,2,3...
выполняет ту же функцию, выбирая номер строки из списка на основе его порядкового положения. Например,GOTO 1 OF 10,20,30
всегда будет переходить к строке 10, тогда какGOTO A OF 100,200,300
будет переходить на разные строки, если значение A равно 1, 2 или 3. [10] - Логические и реляционные операторы можно использовать в любом математическом выражении, возвращая 0 в случае ложности или 1 в случае истины, что было необычно для языков BASIC того времени, но популярно в таких языках, C. как Например,
IF C+D THEN 1600
перейдет к строке 1600, если C или D больше нуля, поскольку выражениеC+D
будет иметь значение «истина» вIF
. Если C и D оба равны нулю,IF
оценит его как «ложь», и ветвь не будет выбрана. - БСЭ включает в себя
ENTER
, вариация стандартаINPUT
утверждение, которое продолжается после достижения лимита времени.ENTER
имеет три входа: ограничение времени в секундах, возвращаемую переменную, содержащую фактическое прошедшее время (или код состояния), и, наконец, пользовательский ввод. Например,ENTER 15,T,A$[1,1]
будет ждать 15 секунд, пока пользователь введет один символ. T будет содержать фактическое время, которое они потратили, -256, если таймер истек, или -257 или -258, чтобы указать на проблемы с терминалом. [11] - При печати строковых констант (литералов) точки с запятой внутри строки не нужны. Например,
PRINT "THE NUMBER IS"A", TRY A LARGER VALUE."
не требует точек с запятой между строковыми константами и переменной A. [12] Некоторые другие BASIC, включая MS, также поддерживали этот синтаксис. Другие, такие как Atari или Integer, этого не сделали. - Запятые в
PRINT
используйте позиции табуляции каждые 15 символов, оставляя 12 в конце строки, всего 72. [13] - The
LIN
функция работает как вертикальный аналогTAB
.LIN(3)
вставит три возврата каретки, возможно, в существующую строку, если в конце была активна точка с запятой или запятая, а в особом случаеLIN(-1)
всегда будет переходить на следующую строку. [14] Integer BASIC имел аналогичную функцию, называемуюVTAB
.
См. также
[ редактировать ]- Rocky Mountain BASIC , еще один, но совсем другой диалект BASIC, созданный в Hewlett-Packard.
Примечания
[ редактировать ]Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ HP 2000A — Руководство пользователя, август 1969 г., номер детали 02000-90002, [1] . Проверено 9 мая 2016 г.
- ^ HP 2000/Access BASIC — Справочное руководство, номер детали 22687-90001, [2] . Проверено 9 мая 2016 г.
- ^ Ссылка 1976 , с. 4-3.
- ^ «Создайте свою собственную версию Microsoft BASIC» .
- ^ Ссылка 1976 , с. 4-6.
- ^ Ссылка 1976 , с. 4-2.
- ^ Ссылка 1976 , с. 11-50.
- ^ Ссылка 1976 , стр. 11–49, 11–55.
- ^ Ссылка 1976 , с. 2-5.
- ^ Ссылка 1976 , с. Ф-4.
- ^ Ссылка 1976 , с. 2-15.
- ^ Ссылка 1976 , с. 2-10.
- ^ Ссылка 1976 , с. 2-9.
- ^ Ссылка 1976 , с. 2-11.
Библиография
[ редактировать ]- Справочное руководство HP 2000/Access BASIC (PDF) . Хьюлетт Паккард. Май 1976 г. , деталь № 22687-90001.
- HP 2000/Access Learning Timeshare BASIC (PDF) . Хьюлетт Паккард. Май 1976 г. , деталь № 22687-90009.
Внешние ссылки
[ редактировать ]- www.bitsavers.org — Архивная документация HP (сканированная в PDF)
- Базовый интерпретатор, совместимый с HP 2000
- Компьютерный музей HP
- История компьютерных систем БТИ