ТИ БЕЙСИК (ТИ 99/4А)
![]() | |
Парадигма | процедурный |
---|---|
Впервые появился | 1979 год |
Дисциплина набора текста | Статический , сильный |
Лицензия | Собственный |
TI BASIC — это ANSI -совместимый интерпретатор языка программирования BASIC , встроенный в домашний компьютер Texas Instruments TI-99/4 1979 года и его улучшенную версию TI-99/4A 1981 года .
В отличие от большинства BASIC, встречающихся на современных микрокомпьютерах , TI BASIC не ведет свою историю от Microsoft BASIC , а вместо этого был разработанным TI интерпретатором после нового стандарта Minimal BASIC, созданного ANSI и ECMA . Он, в свою очередь, был основан на оригинальном Dartmouth BASIC 1960-х годов. Существует ряд различий, иногда незначительных, между TI BASIC и более распространенными разновидностями MS.
В Minimal BASIC отсутствует ряд функций, которые обычно встречаются в современных BASIC, а компания Texas Instruments позже представила картридж TI Extended BASIC , который расширил функциональность, доступную пользователям BASIC. Сюда входил широкий спектр функций, имеющихся в других BASIC, а также новые системные функции для обработки спрайтов , звука и других функций платформы.
Как это было принято на домашних компьютерах, TI BASIC использовался не только для программирования, но и в качестве тонкой операционной системы . Помимо Minimal BASIC, TI добавила команды для текстовых, графических и основных операций с файлами, таких как запись на ленту или любую другую файловую систему. Из-за особенностей платформы TI-99 TI BASIC отличался чрезвычайно медленной производительностью, примерно вдвое меньшей, чем у обычных машин, но, наоборот, обладал высокой числовой точностью.
Производительность
[ редактировать ]TI-99 был основан на TMS9900 микропроцессоре , 16-битной конструкции, которая изначально была создана для обеспечения однокристального центрального процессора (ЦП) в младших моделях TI-990 линейки миникомпьютеров . TMS9900 также подходил для использования в микрокомпьютере, но в то время остальные вспомогательные микросхемы, необходимые для создания полноценного компьютера, неизменно были 8-битными, включая широкий каталог таких чипов TI. В мини-компьютере системы поддержки 16-бит были построены из множества отдельных микросхем, но это не подходило для недорогого продукта. Таким образом, TI приняла решение сделать машину в основном 8-битной и подключить различные вспомогательные микросхемы к этой 8-битной шине, при этом TMS9900 дважды считывает шину для получения 16-битного значения. [1]
TMS9900 Архитектура набора команд была основана на 16-битных кодах операций , а это означает, что программы обычно были в два раза больше, чем на 8-битной машине. В эпоху дорогой памяти это стоило значительных затрат. Чтобы решить эту проблему, TI создала 8-битную виртуальную машину со своим собственным языком или промежуточным представлением, известным как «Язык графического программирования» или GPL, который позволял писать программы в более компактном формате. Обратной стороной этого подхода является то, что каждую инструкцию GPL приходилось на лету конвертировать в одну или несколько базовых инструкций TMS9900. [2] Сам код GPL хранился на 8-битной стороне машины, что еще больше замедляло ее производительность. [3]
По всем этим причинам машина работала гораздо медленнее, чем теоретически была способна. Это было особенно заметно в BASIC. Каждая инструкция в программе пользователя должна была считываться из 8-битной памяти, интерпретироваться с использованием кода, написанного на GPL, а затем снова выводиться обратно по 8-битной шине. В результате TI BASIC имел низкую производительность; по обычным тестам того времени TI-99 обычно работал вдвое быстрее, чем 8-битные машины, такие как Commodore PET или Apple II . [4] Например, запуск Byte Sieve в BASIC занял 3960 секунд в TI BASIC, тогда как тот же тест в Applesoft BASIC на Apple II, якобы гораздо более медленной машине, занял 2806 секунд, что примерно на 30% быстрее, чем у TI. [5]
Элементы TI BASIC
[ редактировать ]Редактирование и запуск
[ редактировать ]В отличие от большинства BASIC того времени, TI BASIC не имел полноэкранного редактора. Вместо этого был предоставлен редактор строк, который позволял пользователю добавлять или редактировать по одной строке за раз. Для упорядочивания каждого оператора использовались явные номера строк. Он использовал >
приглашение указать текущую новую строку в немедленном режиме , в отличие от более распространенного READY
. [6] Номера строк варьировались от 1 до 32767 включительно, и ввод строки за пределами этого диапазона приводил к ошибке «BAD LINE NUMBER». [7] Входу в линию способствовало NUMBER
команда, доступная только в немедленном режиме, в которой введены возрастающие номера строк, [8] и RESEQUENCE
, который изменил нумерацию существующей программы. [9]
TI BASIC также включал ряд команд отладки. BREAK
работало что-то вроде STOP
, останавливая выполнение определенных строк. В отличие от STOP
, выход в немедленный режим не произошел на строке, где BREAK
появилось, но на строках BREAK
упоминается. Например, BREAK 130
приведет к выходу программы в немедленный режим всякий раз, когда она переходит на строку 130. Это можно использовать, например, вставив один BREAK
в верхней части программы, чтобы контролировать выполнение, а не вставлять его в середину кода. UNBREAK
отключил существующие точки останова. [10] Кроме того, TRACE
распечатал номер текущей исполняемой строки в угловых скобках: <100><110>
и т. д., и UNTRACE
выключил его. [11]
Заявления
[ редактировать ]ANSI-совместимые утверждения TI BASIC: DATA, DEF, DIM, END, FOR..TO..STEP..NEXT, GOSUB, GOTO, IF..THEN..ELSE, INPUT, LET, NEXT, ON..GOSUB, ON..GOTO, OPTION BASE, PRINT, RANDOMIZE, READ, REM, RESTORE, RETURN, STOP
. Большинство из них работают так же, как и их аналоги MS, с двумя дополнениями; RANDOMIZE
перезапускает генератор случайных чисел с заданным «начальным» значением и OPTION BASE
устанавливает первую запись в массиве либо в 0, либо в 1, тогда как MS всегда отсчитывается от нуля. К этому стандартному набору добавлено CALL
, CLOSE
, DISPLAY
и OPEN
. [12]
В соответствии со стандартом Minimal BASIC, [13] IF
операторы могли выполнять только ответвления, они не могли выполнять произвольные операторы, как это было распространено почти во всех остальных BASICах той эпохи. Например, такой код:
100 IF X>5 THEN PRINT"IT IS LARGE"
недопустимо в TI BASIC. Вместо этого это нужно было бы выполнить, используя несколько строк:
100 IF X<=5 THEN 300
200 PRINT"IT IS LARGE"
Это может легко привести к ошибкам отклонения на единицу, если преобразование не будет внимательно следить за изменением смысла логического сравнения. Однако TI BASIC поддержала ELSE
пункт: [14]
100 IF X>5 THEN 200 ELSE 300
The PRINT
В заявлении использовались двоеточия для разделения элементов в разных строках в дополнение к более распространенным запятым или точке с запятой. Это исключало его использование в качестве разделителя операторов - концепции, которой не было в TI BASIC. [15] Это означает, что строка может содержать только один оператор. В связи с тем, как работают интерпретаторы BASIC, GOTO
Циклы на основе - можно значительно ускорить, объединив код в одну строку, что позволяет избежать необходимости искать в программе номера строк. Эта, казалось бы, незначительная недостающая функция может привести к значительному замедлению кода, и добавление этой функции было частью Extended BASIC.
Расширения системы Minimal BASIC часто не были представлены непосредственно в BASIC, а вместо этого были доступны через CALL
команда и ряд именованных подпрограмм на основе GPL. Например, CALL CLEAR
очищает экран и CALL KEY
возвращает код клавиши, нажатой в данный момент на клавиатуре. Языку не хватало PEEK
и POKE
так что официального способа не было [16] Чтобы создать новый код, допускающий вызов CALL, в рамках BASIC, для этого потребуется редактор/ассемблер TI, картридж TI Mini Memory, в который входит небольшой ассемблер , [17] или с помощью расширенного BASIC.
Функции
[ редактировать ]В отличие от Microsoft BASIC, в котором использовались LEFT$
, MID$
, RIGHT$
, и INSTR
для работы со строками TI BASIC использовала ANSI-совместимый интерфейс. SEG$
и POS
.
- АБС
- Абсолютное значение
- АСЦ
- Числовое значение ASCII первого символа строки
- АТН
- Арктангенс
- CHR$
- Преобразование числа в строку с символом ASCII
- COS
- Косинус
- ЭОФ
- Проверьте, ли конец файла достигнут
- Опыт
- Возведение в степень
- ИНТ.
- наибольшее целое число, меньшее или равное параметру
- ТОЛЬКО
- Длина строки
- БРЕВНО
- Натуральный логарифм
- POS-терминал
- Первое появление строки в другой строке
- РНД
- Генератор псевдослучайных чисел
- СЭГ $
- Вернуть подстроку строки
- СГН
- Функция знака
- ГРЕХ
- Его
- СКР
- Квадратный корень
- STR$
- Преобразование числа в строку
- ТАН
- Касательная
- ВАЛ
- Преобразование строки в число
Подпрограммы
[ редактировать ]Подпрограммы вызываются с помощью CALL
заявление (например CALL CLEAR
).
CHAR
Определение графических символовCLEAR
Очищает экранCOLOR
Определяет цвет переднего плана и фона для 8 символов.GCHAR
Считывает один символ в указанной позиции с экранаHCHAR
Записывает символ в позицию экрана и повторяет его по горизонтали.JOYST
Возвращает положение джойстикаKEY
Читает с клавиатуры без эха на экранеSCREEN
Меняет цвет экранаSOUND
Создает звуки (используя частоту ) и шум.VCHAR
Записывает символ в позицию экрана и повторяет его вертикально.
Расширенный БЕЙСИК
[ редактировать ]TI BASIC располагался во внутренних ПЗУ системы. В 1981 году компания TI выпустила подключаемый картридж ПЗУ , который добавлял дополнительные функции к существующему коду, улучшая язык во многих отношениях. [18] Это долгожданное дополнение к платформе, известное как Extended BASIC. [19]
Среди изменений было добавление возможности иметь несколько операторов в строке. Использование нескольких операторов может улучшить производительность; циклы, реализованные в одной строке, выполняются намного быстрее. Кроме того, операторы теперь могут занимать несколько строк. Поскольку базовый диалект уже использовал двоеточие для разделителей строк, Extended BASIC использовал для этой цели двойное двоеточие. Как ни странно, поскольку оператор с двумя двоеточиями был возможен, например, в TI BASIC: PRINT "A"::"B"
, который вывел бы «A», пустую строку, а затем «B», поэтому для этих операторов требовалось добавить пробел в Extended BASIC, PRINT "A": :"B"
. [18]
Еще одним запоздалым дополнением было то, что IF
операторы теперь могут выполнять произвольные операторы, а не только GOTO
. В Extended BASIC можно было бы написать простой оператор вроде IF X>10 THEN X=X-1
. Это также сработало в ELSE
пункт, допускающий такие утверждения, как IF A=4 AND B=6 THEN R=10 ELSE PRINT "OOPS"
. [18]
Другие дополнения включают небольшой набор новых утверждений, в том числе ACCEPT
, IMAGE
, LINPUT
, ON BREAK
, ON ERROR
, ON WARNING
, SUB
, SUBEND
и SUBEXIT
. Последние три оператора используются для структурного программирования , позволяя создавать именованные подпрограммы . Расширенный BASIC также включал ряд новых функций, особенно подпрограммы CALLable. Среди последних была библиотека команд спрайтов, в том числе создающих автоматически продолжающееся движение. [18]
Синтез речи
[ редактировать ]Оснащенные синтезатором речи TI, пользователи TI Extended BASIC также могут генерировать речь из заранее определенного словаря так же легко, как писать текст на экране. Например, следующая строка текста заставит синтезатор речи идентифицировать компьютер: [18]
CALL SAY("HELLO I AM A #TEXAS INSTRUMENTS# T I NINETY NINE FOUR A HOME COMPUTER")
Фразы, состоящие из нескольких слов, разделяются символом #, т.к. #TEXAS INSTRUMENTS#
в этом примере. Использование слова, не включенного во встроенный словарь синтезатора речи, состоящий из 338 слов и фраз, приведет к тому, что он будет медленно произносить это слово. Картридж Terminal Emulator II от TI обеспечивал функцию преобразования текста в речь. [18]
Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ «Внутренняя архитектура ТИ-99/4А» . 16 августа 2000 г.
- ^ Нуспикель, Тьерри. «GPL: язык графического программирования» . Проверено 2 августа 2020 г.
- ^ «Я вырос и изучил основы на TI-99/4a. Это было чудесное и простое время…» Hacker News . Проверено 2 августа 2020 г.
- ^ Найт, Дэниел (10 января 2016 г.). «Насколько быстрыми были домашние компьютеры конца 1970-х годов?» . Бюджетный Mac .
- ^ Гилбрит, Джим; Гилбрит, Гэри (январь 1983 г.). «Возвращение к Эратосфену: еще раз через решето» . Байт . стр. 283–325.
- ^ Руководство 1981 , с. II-5.
- ^ Руководство 1981 , с. II-8.
- ^ Руководство 1981 , с. II-26.
- ^ Руководство 1981 , с. II-27.
- ^ Руководство 1981 , с. II-33.
- ^ Руководство 1981 , с. II-36.
- ^ Руководство 1981 , с. я.
- ^ Минимальный БЕЙСИК (PDF) (Технический отчет). ЭКМА. Январь 1978 года.
- ^ Руководство 1981 , с. II-51.
- ^ Руководство 1981 , с. II-65.
- ^ Подвиг Джеймса Аббатиелло
- ^ «Мини Память» .
- ^ Jump up to: а б с д и ж Шоу 1983 .
- ^ Каплан, Гэри (июнь 1981 г.). «Расширенный БАЗОВЫЙ обзор» . ТИ 99ер .
Библиография
[ редактировать ]- Шоу, Стивен (1983). «Расширенный базовый» . Начало работы с Texas Instruments TI99/4A . Издательство Феникс. ISBN 978-0-946576-04-3 .
- Справочное руководство пользователя (PDF) . Техасские инструменты. 1981.
Внешние ссылки
[ редактировать ]- BASIC для начинающих на ClassicCmp.org
- Справочная карта TI-99/4A BASIC на ClassicCmp.org