Applesoft BASIC - Applesoft BASIC

Applesoft BASIC
Оригинальный автор (ы)Марк Макдональд
Рик Вейланд
изначальный выпуск1977; 43 года назад (1977)
Стабильный выпуск
Applesoft II / 1978 г.; 42 года назад (1978)
Операционная системаApple II серии
ТипMicrosoft BASIC

Applesoft BASIC это диалект Microsoft BASIC, разработан Марк Макдональд и Рик Вейланд, снабженный Apple II серии компьютеров. Он заменяет Целое число BASIC и является БАЗОВЫМ в ПЗУ во всех компьютерах серии Apple II после оригинала Яблоко II модель. Его также называют FP BASIC (из "плавающая точка ") из-за Apple DOS команда, используемая для его вызова, вместо INT для Integer BASIC.

Поставщиком Applesoft BASIC: Microsoft и его название происходит от имен обоих яблоко и Microsoft. Сотрудники Apple, в том числе Рэнди Виггинтон, адаптировал интерпретатор Microsoft для Apple II и добавил несколько функций. Первая версия Applesoft была выпущена в 1977 году на кассета и отсутствовала надлежащая поддержка графики с высоким разрешением. AppleSoft II, который был доступен на кассете и диске, а также в ПЗУ Apple II Plus и последующие модели были выпущены в 1978 году. Именно эта последняя версия, которая имеет некоторые различия в синтаксисе и поддерживает графические режимы Apple II с высоким разрешением, обычно является синонимом термина «Applesoft».

Компилятор Applesoft, TASC (Компилятор AppleSoft), был выпущен Microsoft в 1981 г.[1]

История

Когда Стив Возняк написал Целое число BASIC для Яблоко II, он не реализовал поддержку плавающая точка математике, потому что он в первую очередь интересовался написанием игр - задачи, для которой было достаточно одних целых чисел.[2] В 1976 году Microsoft разработала Microsoft BASIC, интерпретатор BASIC для Технология MOS 6502, но в то время не существовало производственного компьютера, который бы его использовал. Узнав, что у Apple есть машина 6502, Microsoft спросила, заинтересована ли компания в лицензировании BASIC, но Стив Джобс ответил, что у Apple уже есть один.

Apple II был представлен публике на Компьютерная ярмарка Западного побережья в апреле 1977 г. и поступила в продажу в июне. Одной из наиболее частых жалоб клиентов на компьютер было отсутствие у BASIC поддержки операций с плавающей запятой.[3] Целочисленный BASIC ограничен целыми числами от -32768 до 32767 и вызывал проблемы у пользователей, пытающихся писать с его помощью бизнес-приложения. Стив Возняк никогда не добавлял возможности вычислений с плавающей запятой в Integer BASIC, поскольку он не считал их необходимыми для игрового и образовательного программного обеспечения - двух основных задач, которые он предполагал для Apple II. Поскольку Возняк - единственный человек, который понимал Integer BASIC достаточно хорошо, чтобы добавлять функции с плавающей запятой - был занят Диск II привод и контроллер и с Apple DOS, Apple обратилась к Microsoft. Проблема была в том, что соперник Commodore PET Персональный компьютер с самого начала имел интерпретатор BASIC с плавающей запятой. Лицензия Applesoft также спасла Microsoft от почти банкротства, когда они передали лицензию на BASIC компании Commodore для ПЭТ по соглашению, которое оказалось для них неожиданно дорогостоящим.

Сообщается, что Apple получила восьмилетнюю лицензию на Applesoft BASIC от Microsoft за фиксированную плату в размере 31000 долларов, продлив ее в 1985 году по соглашению, которое предоставило Microsoft права и исходный код для Apple. Версия BASIC для Macintosh.[4] Applesoft была разработана для обеспечения обратной совместимости с Integer BASIC и использует ядро ​​реализации Microsoft 6502 BASIC, которая включает использование команды GET для обнаружения нажатий клавиш и не требует пробелов в строках программы. Хотя Applesoft BASIC медленнее, чем Integer BASIC, у него есть много функций, которых не хватает старому BASIC:

  • Атомарные строки: строка больше не является массивом символов (как в Integer BASIC и C ); это вместо этого сборщик мусора объект (как в Схема и Ява ). Это позволяет использовать строковые массивы; ТусклыйАвстралийский доллар(10) привело к вектор из 11 строковые переменные нумеруются от 0 до 10.
  • Многомерный массивы (числа или строки)
  • Одинарная точность плавающая точка переменные с 8-битной экспонентой и 31-битным значащим и улучшенными математическими возможностями, включая тригонометрические и логарифмические функции
  • Команды для графики с высоким разрешением
  • ДАННЫЕ заявления, с ЧИТАТЬ и ВОССТАНОВИТЬ команды, для представления числовых и строковых значений в количестве
  • CHR $, STR $, и ВАЛ функции для преобразования между строковыми и числовыми типами (оба языка имели ASC функция)
  • Пользовательские функции: простые однострочные функции, написанные на BASIC, с одним параметром
  • Перехват ошибок, позволяющий программам на BASIC обрабатывать неожиданные ошибки с помощью подпрограммы, написанной на BASIC.

И наоборот, в Applesoft отсутствует MOD (остаток) оператор, который присутствовал в Integer BASIC.

Адаптация BASIC для Apple II была утомительной работой, поскольку Apple получила список источников для Microsoft 6502 BASIC, который оказался ошибочным.[нужна цитата ] а также потребовал добавления команд Integer BASIC. Поскольку у Apple не было ассемблера 6502, команда разработчиков была вынуждена отправить исходный код по телефонным линиям в Call Computer, компанию, которая предлагала услуги компилятора. Это был чрезвычайно утомительный и медленный процесс, и после того, как Call Computer потерял исходный код из-за неисправности оборудования, один из программистов, Клифф Хьюстон, использовал свой собственный компьютер IMSAI 8080 для крест собрать БАЗОВЫЙ источник.[5]

Функции

Applesoft похожа на Commodore BASIC 2.0, за исключением функций, унаследованных от Integer BASIC. Есть несколько незначительных отличий, таких как отсутствие в Applesoft побитовых операторов; в противном случае большинство программ BASIC, которые не используют аппаратно-зависимые функции, будут работать на обоих BASIC.

Оператор PR # перенаправляет вывод на карту расширения, а IN # перенаправляет ввод с карты расширения. Номер слота карты указывается после PR # или IN # в выписке. Компьютер блокируется, если в слоте нет карты. PR # 0 восстанавливает вывод на экран из 40 столбцов, а IN # 0 - на клавиатуру.

Оператор PR # может использоваться для перенаправления вывода на принтер (например, 10PR №Икс:РАСПЕЧАТАТЬ"Привет!") где x - номер слота, в котором находится карта порта принтера. Чтобы отправить на принтер список программ BASIC, пользователь вводит PR № x: LIST.

PR # 6 заставляет Applesoft загружать дисководы (хотя контроллер Disk II может быть в любом слоте, обычно он находится в слоте 6). PR # 3 переключается в текстовый режим с 80 столбцами, если присутствует карточка с 80 столбцами.

Как и в Commodore BASIC, числовые переменные хранятся как 40-битные числа с плавающей запятой; каждая переменная требует пяти байтов памяти. Программист может обозначать переменные как целые числа, следуя за ними знаком процента, и в этом случае они используют два байта и ограничиваются диапазоном от -32768 до 32767; однако BASIC внутренне преобразует их обратно в числа с плавающей запятой, в то время как каждый знак процента также занимает дополнительный байт программного кода, поэтому на практике эта функция полезна только для уменьшения использования памяти большими переменными массива.

Функция RND генерирует псевдослучайный дробное число от 0 до 1. RND (0) возвращает последнее сгенерированное случайное число. RND с отрицательным числом перейдет к точке в последовательности, определяемой конкретным используемым отрицательным числом. RND с любым положительным значением генерирует следующее число в последовательности, независимо от заданного фактического значения.

Как и другие реализации Microsoft BASIC, Applesoft отбрасывает пробелы (вне строк и комментариев) в строках программы. СПИСОК добавляет пробелы при отображении кода для удобства чтения. Так как LIST добавляет пробел перед и после каждого ключевого слова с токенизацией, он часто создает два пробела в строке, где одного достаточно для удобства чтения.

Приглашение по умолчанию для ВХОД это вопросительный знак. РАСПЕЧАТАТЬ не добавляет начальный пробел перед числами.

Coleco утверждал, что его Адам Исходный код SmartBASIC домашнего компьютера был совместим с Applesoft.[6] Microsoft лицензировала BASIC, совместимый с Applesoft, чтобы VTech для своего Лазер 128 клон.[7]

Ограничения

В нескольких ранних моделях Apple II Applesoft BASIC не поддерживал использование строчная буква буквы в программах, кроме строк. РАСПЕЧАТАТЬ допустимая команда, но Распечатать и Распечатать приведет к синтаксической ошибке.

В Applesoft отсутствуют некоторые команды и функции, общие для большинства интерпретаторов Microsoft BASIC, отличных от 6502, например:

  • INSTR (поиск подстроки в строке)
  • ПЕЧАТЬ (форматирование чисел при выводе на печать)
  • INKEY $ (проверьте нажатие клавиши без остановки программы; хотя PEEK для местоположения $ C000 выполняет это действие)
  • LPRINT (вывод на принтер вместо экрана)

В Applesoft нет команд для работы с файлами или дисками, кроме сохранения и загрузки программ на кассету. Дисковая операционная система Apple II, известная просто как DOS, расширяет язык, чтобы обеспечить такие возможности.

Только первые две буквы имен переменных имеют значение. Например, «LOW» и «LOSS» обрабатываются как одна и та же переменная, и попытка присвоить значение «LOSS» перезаписывает любое значение, присвоенное «LOW». Программист также должен избегать следующих друг за другом букв, которые являются командами или операциями Applesoft. Имя "SCORE" для переменной интерпретируется как содержащее ИЛИ ЖЕ Логический оператор, отображаемый как СЧЕТ. «ФОН» содержит GR, команда для вызова графического режима с низким разрешением и приводит к синтаксической ошибке.

Звук и графика

Единственная звуковая поддержка - это возможность РАСПЕЧАТАТЬ ASCII колокольчик озвучить системное оповещение писк, а PEEK команду, чтобы щелкнуть динамик. Язык недостаточно быстр, чтобы производить больше, чем жужжание баритона от повторяющихся щелчков. Однако программы могут хранить программу на машинном языке, которая будет вызываться для генерации электронных музыкальных тонов, охватывающих несколько октав.

Applesoft поддерживает Apple II с низким разрешением (знания) графический дисплей, где 40 цветных «блоков» по ​​горизонтали и до 48 блоков по вертикали, могут отображаться в 16 цветах, с командами для построения отдельных блоков и горизонтальных или вертикальных линий; а также режим найма, где шесть цветов (фиксированное подмножество палитры знаний из 16 цветов) могут отображаться с разрешением 280 по горизонтали на 192 по вертикали (с некоторыми ограничениями на горизонтальное размещение), с командой для рисования точек или любые диагональные линии на экране. Начиная с Apple IIe, появился новый режим «двойного высокого разрешения», основанный на режиме, представленном на Яблоко III компьютер, стал доступен на машинах со 128к памяти. Этот режим по сути дублирует разрешение исходного режима найма, но включает все 16 цветов палитры знаний. Однако Applesoft не поддерживает этот режим и должна полагаться на дополнительные процедуры на машинном языке, чтобы использовать его. Дополнительные новые графические режимы на Apple IIgs также не поддерживаются.

Никаких положений для смешивания текста и графики не существует, за исключением ограниченного «аппаратного разделения экрана» Apple II (четыре строки текста внизу экрана).

На основе векторов таблицы формы может использоваться для рисования объектов в графике найма, но они медленнее по сравнению с подпрограммами, которые рисуют растровые изображения напрямую. Они также поддерживают только определение горизонтальных и вертикальных линий. Диагонали и кривые не поддерживаются, хотя фигуры можно рисовать с поворотом под разными углами, поэтому линии, якобы определенные как горизонтальные или вертикальные, будут отображаться диагональными. Кроме того, фигуры можно рисовать в увеличенном масштабе.

Расширения

Applesoft BASIC можно расширить двумя способами: командой амперсанда (&) и функцией USR (). Это две функции, которые вызывают низкоуровневые подпрограммы машинного языка, хранящиеся в памяти, что полезно для подпрограмм, которые должны быть быстрыми или требовать прямого доступа к произвольным функциям или данным в памяти. Функция USR () принимает один числовой аргумент и может быть запрограммирована на получение и возврат вычисленного значения функции, которое будет использоваться в числовом выражении. «&» является сокращением для CALL с заранее определенным адресом.

Ошибки

Недостаток перехвата ошибок Applesoft с помощью ONERR означает, что системный стек не будет сброшен, если процедура обработки ошибок не вызовет RESUME, что может привести к сбою. Обработка ошибок, не использующая RESUME, может избежать проблемы с CALL -3288 или (эквивалентным) 62248 перед выходом из подпрограммы.[8]

Спектакль

Возняк первоначально называл свой Integer BASIC «Game BASIC» (написав его так, чтобы он мог реализовать Прорыв клон для своего нового компьютера).[2] Несколько игры действия были написаны на Applesoft BASIC, в значительной степени потому, что использование чисел с плавающей запятой для всех математических операций снижает производительность.

Программы Applesoft BASIC хранятся в виде связанный список линий; а ИДТИ К или же GOSUB берет линейное время. Некоторые программы имеют подпрограммы вверху, чтобы сократить время их вызова.

В отличие от Integer BASIC, Applesoft не преобразует буквальные числа в исходном коде в двоичные при вводе строки. Скорее, строка преобразуется всякий раз, когда строка выполняется. Поскольку поиск переменных часто выполняется быстрее, чем это преобразование, можно быстрее сохранить числовые константы, используемые внутри циклов, в переменных до входа в цикл.

Образец кода

Привет, мир, с обратное видео и колокольчик, запустите, затем перечислите

Привет, мир в Applesoft BASIC можно ввести следующее:

10 ТЕКСТ:ДОМА20?"ПРИВЕТ, МИР"

В одну строку кода можно включить несколько команд, разделенных двоеточием (:). В ? может использоваться в Applesoft BASIC (и почти во всех версиях Microsoft BASIC) в качестве ярлыка для «PRINT», хотя написание этого слова не только приемлемо, но и канонично - Applesoft преобразовал «?» во введенных программах на тот же токен, что и «PRINT» (таким образом, никакая память не сохраняется с помощью «?»), таким образом, либо отображается как «PRINT», когда программа отображается в списке. Программа выше появляется в СПИСОК команда как:

10ТЕКСТ:ДОМА20РАСПЕЧАТАТЬ"ПРИВЕТ, МИР"

[9]

Когда в середине 1978 года был впервые выпущен Applesoft II BASIC, он поставлялся на кассетной ленте и мог быть загружен в память через монитор машинного языка Apple II. Когда усовершенствованный Apple II + заменил исходный II в 1979 году, Applesoft теперь была включена в ПЗУ и автоматически запускалась при включении питания, если не было загрузочной дискеты. И наоборот, Integer BASIC был удален из ПЗУ и превращен в исполняемый файл на диске DOS 3.3.

Ранняя эволюция

Исходная версия Applesoft, хранящаяся в ОЗУ, как описано в ее Справочном руководстве от ноября 1977 г., имеет меньший код интерпретатора, чем более поздняя версия Applesoft II, занимающая 8½ Кб памяти,[10] вместо 10 КБ, используемых более поздней версией Applesoft II. Следовательно, ему не хватает ряда командных функций, разработанных для более поздней, основной версии:

  • Все команды, поддерживающие графику Apple «высокого разрешения» (всего 9)
  • Отлов ошибок с помощью ONERR ... GOTO и RESUME
  • Сокращенный вызов машинной подпрограммы "&"
  • Очистка экрана HOME (вызов процедуры системного ПЗУ)
  • Контроль вывода текста NORMAL, INVERSE, FLASH и SPEED =
  • Функция пространства печати SPC () указана среди зарезервированных слов в руководстве, но не документирована иначе (функция печати TAB () является задокументировано)
  • Кассетное хранилище числовых массивов: СОХРАНЕНИЕ и ВЫЗОВ
  • Ответ устройства: WAIT

а также несколько более поздних версий, которые уже присутствовали в Apple Integer BASIC:

  • Удаление программной строки: DEL
  • Машинно-программный доступ: CALL
  • Доступ к периферийным устройствам: IN # и PR # (хотя IN без "#" указан среди зарезервированных слов)
  • Управление диапазоном памяти: HIMEM: и LOMEM:
  • Отслеживание выполнения для отладки: TRACE и NOTRACE
  • Позиционирование экрана: HTAB и VTAB
  • Подпрограмма прерывания POP
  • Функции PDL () для чтения аналоговых контроллеров и SCRN () для чтения графического экрана с низким разрешением (оба обращаются к процедурам системного ПЗУ)

Кроме того, его команды для работы с графикой с низким разрешением имеют другие имена, чем их аналоги Integer BASIC / Applesoft II. Все имена команд имеют форму PLTx, поэтому GR, COLOR =, PLOT, HLIN и VLIN называются PLTG, PLTC, PLTP, PLTH и PLTV соответственно. Команда для возврата в текстовый режим, известная как TEXT в других версиях, - это просто TEX, и при условии, что она должна быть последним оператором в строке программы.

Applesoft BASIC 1.x был ближе к оригинальному коду Microsoft 6502 BASIC, чем более поздний Applesoft II; он сохранил размер памяти? и отобразил уведомление об авторских правах Microsoft. Для обеспечения согласованности с Integer BASIC приглашение «Ok» из кода Microsoft было заменено символом]. Applesoft 1.x также предлагал пользователю при загрузке отключить оператор REM и ключевое слово LET в операторах присваивания в обмен на графические команды lores.

Функция USR () также определяется по-другому и служит заменой отсутствующей команды CALL. Его аргумент предназначен не для передачи числового значения в подпрограмму на машинном языке, а вместо этого является адресом вызова самой подпрограммы; нет никакого «крючка» для предварительного определения адреса. Все несколько примеров в руководстве используют эту функцию только для доступа к подпрограммам «системного монитора ROM» или коротким пользовательским подпрограммам для управления подпрограммами ROM. Не упоминается какой-либо код для вычисления значения, возвращаемого самой функцией; функция всегда отображается как присвоенная «фиктивным» переменным, которые, не выполняя действий по установке значения с помощью кода пользователя, просто получают бессмысленное значение, возвращенное им. Даже используемые подпрограммы ROM, которые возвращают значения (в примерах, те, которые предоставляют услуги функций PDL () и SCRN ()), просто сохраняют свои значения с помощью пользовательских подпрограмм в местах, которые отдельно PEEKed в последующем операторе.

В отличие от Integer BASIC и Applesoft II, логические операторы AND, OR и NOT выполняют побитовые операции на 16-битных целочисленных значениях. Если им присваиваются значения за пределами этого диапазона, возникает ошибка.

Термины OUT и PLT (и вышеупомянутый IN) появляются в списке зарезервированных слов, но нигде в руководстве не объясняются.

Смотрите также

Рекомендации

  1. ^ Руководство по TASC (компилятор AppleSoft), 1981 г.
  2. ^ а б Возняк, Стив (01.05.2014). "Как Стив Возняк написал BASIC для оригинального Apple с нуля". Gizmodo. Получено 2 мая 2014.
  3. ^ Маккракен, Гарри. «Apple II Forever: 35-летие первого культового продукта Apple». Время. ISSN  0040-781X. Получено 2019-06-21.
  4. ^ Герцфельд, Энди "MacBasic - Печальная история MacBasic". http://www.folklore.org/StoryView.py?project=Macintosh&story=MacBasic.txt . Folklore.org. 2014 Февраль 12
  5. ^ «История Apple II - Глава 16 - Языки». Получено 6 июля, 2016.
  6. ^ Coleco представляет компьютерную систему Adam. YouTube. 2016-05-03 [1983-09-28]. Событие происходит в 31:55. Каждый, кто знает Applesoft BASIC, также знает Adam SmartBASIC. Доступны все те же команды, все те же элементы управления для этого Бейсика, этого интерпретатора. Фактически, мы собираемся показать вам программу, которая использует графические команды Applesoft ... выполняемые через Адама. ... Насколько нам известно, когда мы находимся в BASIC, и мы не PEEKing или POKEing ... все, что ниже интерпретатора BASIC, мы совместимы с исходным кодом.
  7. ^ Гревстад, Эрик (декабрь 1986). «Laser 128 / доступный совместимый». inCider. п. 58. Получено 2017-04-24.
  8. ^ Справочное руководство программиста Applesoft BASIC (только для IIe), Apple Computer, Inc., 1982
  9. ^ Эта статья включает текст из Все2, под лицензией GFDL.
  10. ^ Справочное руководство по базовому языку с плавающей точкой с расширенной точностью от Applesoft, Apple Computer, Inc., ноябрь 1977 г.

внешняя ссылка