stringtranslate.com

Applesoft BASIC

Applesoft BASIC — диалект Microsoft BASIC , разработанный Марком Макдональдом и Риком Вейландом , поставляемый с компьютерами Apple II . Он заменяет Integer BASIC и является BASIC в ПЗУ во всех компьютерах серии Apple II после оригинальной модели Apple II . Его также называют FP BASIC (от floating point ) из-за команды Apple DOS,FP используемой для его вызова, вместо INTInteger BASIC.

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

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

История

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

Apple II был представлен публике на выставке West Coast Computer Faire в апреле 1977 года и поступил в продажу в июне. Одной из самых распространенных жалоб клиентов на компьютер было отсутствие в BASIC математики с плавающей точкой. [3] Еще больше усложняло ситуацию то, что у конкурирующего персонального компьютера Commodore PET с самого начала был интерпретатор BASIC с поддержкой плавающей точки. Поскольку Возняк — единственный человек, который понимал Integer BASIC достаточно хорошо, чтобы добавлять функции плавающей точки, — был занят дисководом и контроллером Disk II , а также Apple DOS , Apple обратилась к Microsoft.

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

Напротив, в Applesoft отсутствует MODоператор (остаток) из Integer BASIC.

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

Функции

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

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

Оператор PR# может использоваться для перенаправления вывода на принтер (например, ), где x — номер слота, содержащего карту порта принтера. Чтобы отправить листинг программы BASIC на принтер, пользователь вводит .10 PR#x:PRINT"Hello!"PR#x:LIST

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

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

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

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

По умолчанию приглашением INPUTявляется вопросительный знак. PRINTне добавляет начальный пробел перед числами.

Ограничения

В нескольких ранних моделях Apple II Applesoft BASIC не поддерживал использование строчных букв в программах, за исключением строк. PRINTявляется допустимой командой, но printприводит Printк синтаксической ошибке.

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

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

Значимы только первые две буквы имен переменных. Например, "LOW" и "LOSS" рассматриваются как одна и та же переменная, и попытка присвоить значение "LOSS" перезапишет любое значение, присвоенное "LOW". Программист также должен избегать последовательных букв, которые являются командами или операциями Applesoft. Имя "SCORE" для переменной интерпретируется как содержащее OR логический оператор , отображаемый как SC OR E. "BACKGROUND" содержит GR, команду для вызова графического режима низкого разрешения, и приводит к синтаксической ошибке.

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

Единственная поддержка звука — это возможность использовать символ колокольчикаPRINT ASCII для подачи звукового сигнала системного оповещения и команда для нажатия на динамик. Язык недостаточно быстр, чтобы производить больше, чем баритональное гудение от повторяющихся щелчков. Однако программы могут хранить подпрограмму на машинном языке, которая будет вызываться для генерации электронных музыкальных тонов, охватывающих несколько октав.PEEK

Applesoft поддерживает рисование в режимах низкого и высокого разрешения Apple II. Существуют команды для построения пикселей и рисования горизонтальных и вертикальных линий в низком разрешении. Высокое разрешение позволяет использовать произвольные линии и векторные таблицы фигур для рисования масштабированных и повернутых объектов. Единственное положение для смешивания текста и графики — четыре строки текста в нижней части графического дисплея.

Начиная с Apple IIe , режим "двойного высокого разрешения" стал доступен на машинах с 128k памяти. Этот режим по сути дублирует разрешение исходного режима высокого разрешения, но включает все 16 цветов палитры низкого разрешения. Applesoft не предоставляет прямой поддержки этого режима. Специфические для Apple IIGS режимы также не поддерживаются.

Расширения

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

Ошибки

Недостаток перехвата ошибок via ONERRозначает, что системный стек не сбрасывается, если процедура обработки ошибок не вызывает RESUME, что может привести к сбою. [6] Встроенная функция генератора псевдослучайных чисел RNDспособна выдавать предсказуемую серию выходных данных благодаря способу, которым генератор задается при первом включении. Такое поведение противоречит тому, как документация Apple описывает эту функцию. [7]

Производительность

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

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

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

Пример кода

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

Hello, World! в Applesoft BASIC можно ввести следующим образом:

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

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

10 ТЕКСТ : ГЛАВНАЯ 20 ПЕЧАТЬ "HELLO WORLD"     

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

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

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

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

Кроме того, его графические команды низкого разрешения имеют названия, отличные от их аналогов 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; он сохранил запрос Memory Size? и отображал уведомление об авторских правах Microsoft. Для сохранения согласованности с Integer BASIC запрос «Ok» из кода Microsoft был заменен символом ]. Applesoft 1.x также предлагал пользователю при загрузке отключить оператор REM и ключевое слово LET в операторах присваивания в обмен на графические команды lores.

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

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

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

Связанные BASIC

Coleco заявила, что исходный код SmartBASIC ее домашнего компьютера Adam совместим с Applesoft. [9]

Microsoft лицензировала BASIC, совместимый с Applesoft, для VTech для своего клона Laser 128. [10]

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

Ссылки

  1. ^ Руководство пользователя TASC (The AppleSoft Compiler). Белвью, Вашингтон: Microsoft Consumer Products. 1981.
  2. ^ ab Возняк, Стив (1 мая 2014 г.). «Как Стив Возняк написал BASIC для оригинальной Apple с нуля». Gizmodo . Получено 2 мая 2014 г.
  3. ^ Маккракен, Гарри (16 апреля 2012 г.). «Apple II Forever: 35th-Anniversary Tribute to Apple’s First Iconic Product». Time . ISSN  0040-781X . Получено 21 июня 2019 г. .
  4. ^ Херцфельд, Энди (12 февраля 2014 г.). «MacBasic – грустная история MacBasic». Folklore.org .
  5. ^ "Глава 16: Языки". История Apple II . Июль 2010. Получено 6 июля 2016 .
  6. ^ Справочное руководство программиста Applesoft BASIC (только для IIe). Apple Computer, Inc. 1982. стр. 70.
  7. ^ Олдридж, Джеймс У. (июль 1987 г.). «Предостережения относительно генерации случайных чисел на Apple II». Методы исследования поведения, приборы и компьютеры . 19 (4): 397–99. doi : 10.3758/BF03202585 . S2CID  62633043.
  8. ^ Справочное руководство по базовому языку вычислений с плавающей точкой повышенной точности Applesoft. Apple Computer, Inc., ноябрь 1977 г.
  9. ^ Coleco представляет компьютерную систему Adam. 3 мая 2016 г. [28 сентября 1983 г.]. Событие произошло в 31:55. Архивировано из оригинала 22 ноября 2021 г. – через YouTube. Все, кто знает Applesoft BASIC, также знают Adam SmartBASIC. Доступны все те же команды, все те же элементы управления для этого BASIC, этого интерпретатора. Фактически, мы собираемся показать вам программу, которая использует графические команды Applesoft ... выполняемые через Adam. ... Что касается нас, когда мы находимся в BASIC, и мы не PEEKing или POKEing ... все, что находится ниже интерпретатора BASIC, мы совместимы по исходному коду.
  10. ^ Гревстад, Эрик (декабрь 1986 г.). «Лазер 128 / Доступный совместимый». inCider . стр. 58. Получено 24 апреля 2017 г.

В статье использован текст из Everything2, лицензированный по GFDL.

Внешние ссылки