stringtranslate.com

Applesoft БЕЙСИК

Applesoft BASIC — это диалект Microsoft BASIC , разработанный Марком Макдональдом и Риком Вейландом и поставляемый с компьютерами серии Apple II . Он заменяет Integer BASIC и является BASIC в ПЗУ во всех компьютерах серии Apple II после исходной модели Apple II . Его также называют FP BASIC (от слова с плавающей запятой ) из-за команды Apple DOSFP , используемой для его вызова, а не INTдля Integer 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 был представлен публике на компьютерной ярмарке Западного побережья в апреле 1977 года и поступил в продажу в июне. Одной из наиболее частых жалоб клиентов на компьютер было отсутствие в BASIC вычислений с плавающей запятой. [3] Еще более проблематичным было то, что конкурирующий персональный компьютер Commodore PET с самого начала имел интерпретатор BASIC с поддержкой операций с плавающей запятой. Поскольку Возняк — единственный человек, который достаточно хорошо понимал Integer BASIC, чтобы добавлять функции с плавающей запятой, — был занят диском и контроллером Disk II , а также Apple DOS , Apple обратилась к Microsoft.

Сообщается, что Apple получила восьмилетнюю лицензию на Applesoft BASIC от Microsoft за фиксированную плату в размере 31 000 долларов и продлила ее в 1985 году по соглашению, которое предоставило Microsoft права и исходный код для версии BASIC от Apple для Macintosh . [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 столбцов (обычно в слоте 1) переключает в текстовый режим на 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 для подачи звукового сигнала системного предупреждения .

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

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

Расширения

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

Ошибки

Недостаток функции перехвата ошибок 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 , с инверсным видео и колокольчиком , запустите, а затем перечислите

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

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

В одну строку кода можно включить несколько команд, если они разделены двоеточием ( :). Может ?использоваться в Applesoft BASIC (и почти во всех версиях Microsoft BASIC) как ярлык для слова «ПЕЧАТЬ», хотя написание этого слова не только приемлемо, но и канонично — Applesoft преобразовала «?» во введенных программах к тому же токену, что и «PRINT» (таким образом, при использовании «?» память фактически не сохраняется), поэтому любой из них отображается как «PRINT», когда программа указана в списке. Программа выше отображается в LISTкоманде как:

10 ТЕКСТ : ДОМ 20 НАПЕЧАТАЙТЕ «HELLO WORLD»     

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

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

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

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

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

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

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

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

Связанные ОСНОВЫ

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

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

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

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

  1. ^ Руководство пользователя TASC (компилятор AppleSoft). Белвью, Вашингтон: Потребительские продукты Microsoft. 1981.
  2. ^ Аб Возняк, Стив (1 мая 2014 г.). «Как Стив Возняк написал BASIC для оригинальной Apple с нуля». Гизмодо . Проверено 2 мая 2014 г.
  3. Маккракен, Гарри (16 апреля 2012 г.). «Apple II Forever: дань уважения 35-летию первого знакового продукта Apple». Время . ISSN  0040-781X . Проверено 21 июня 2019 г.
  4. Херцфельд, Энди (12 февраля 2014 г.). «MacBasic - Печальная история MacBasic». Фольклор.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. дои : 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, также знает Адама SmartBASIC. Доступны все те же команды, все те же элементы управления для этого Бейсика, этого интерпретатора. Фактически, мы собираемся показать вам программу, которая использует графические команды Applesoft... выполняемые через Адама. ... Что касается нас, то когда мы работаем на BASIC и не просматриваем и не POKE... что-либо ниже интерпретатора BASIC, мы совместимы по исходному коду.
  10. ^ Гревстад, Эрик (декабрь 1986 г.). «Лазер 128 / Доступная совместимость». inСидр . п. 58 . Проверено 24 апреля 2017 г.

В эту статью включен текст из Everything2, доступного под лицензией GFDL.

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