Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

История [ править ]

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

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

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

  • Атомарные строки: строка больше не является массивом символов (как в Integer BASIC и C ); это вместо этого объект со сборкой мусора (как в Scheme и Java ). Это позволяет использовать строковые массивы; создает массив из одиннадцати строковых переменных, пронумерованных от 0 до 10.DIM A$(10)
  • Многомерные массивы (числа или строки)
  • Переменные с плавающей запятой одинарной точности с 8-битным показателем и 31-битным значащим и улучшенными математическими возможностями, включая тригонометрию и логарифмические функции
  • Команды для графики высокого разрешения
  • DATAзаявления, с READи RESTOREкоманды, для представления числовых и строковых значений в количестве
  • CHR$, STR$И VALфункция для преобразования между строками и числовыми типами (оба языком действительно имеет 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 для кросс-сборки исходного кода BASIC. [5]

Особенности [ править ]

Applesoft похожа на Commodore BASIC 2.0 за исключением функций, унаследованных от 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 загружать дисководы (хотя контроллер Disk II может быть в любом слоте, обычно он находится в слоте 6). PR # 3 переключается в текстовый режим с 80 столбцами, если присутствует карточка с 80 столбцами.

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

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

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

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

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

Ограничения [ править ]

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

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

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

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

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

Звук и графика [ править ]

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

Applesoft поддерживает графический дисплей Apple II с низким разрешением ( lores ), где 40 цветных «блоков» по ​​горизонтали и до 48 блоков по вертикали могут отображаться в 16 цветах с командами для построения отдельных блоков и горизонтальных или вертикальных линий; а также режим найма, где шесть цветов (фиксированное подмножество палитры знаний из 16 цветов) могут отображаться с разрешением 280 по горизонтали на 192 по вертикали (с некоторыми ограничениями по горизонтальному размещению), с командой для рисования точек или любые диагональные линии на экране. Начиная с Apple IIe, появился новый режим «двойного высокого разрешения», основанный на режиме, представленном в Apple 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» (написав его так, чтобы он мог реализовать клон Breakout для своего нового компьютера). [2] На Applesoft BASIC было написано несколько экшн-игр , в значительной степени из-за того, что использование чисел с плавающей запятой для всех математических операций снижает производительность.

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

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

Пример кода [ править ]

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

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

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

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

10 ТЕКСТ : ГЛАВНАЯ 20 ПЕЧАТЬ «ПРИВЕТ, МИР»     

[9]

Когда в середине 1978 года был впервые выпущен Applesoft II BASIC, он поставлялся на кассетной ленте и мог быть загружен в память через монитор машинного языка Apple II. Когда в 1979 году усовершенствованный Apple II + заменил исходный II, 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 () является документально)
  • Кассетное хранилище числовых массивов: СОХРАНИТЬ и ВЫЗВАТЬ
  • Ответ устройства: ПОДОЖДИТЕ

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

  • Удаление программной строки: DEL
  • Машинно-программный доступ: ЗВОНИТЬ
  • Доступ к периферийным устройствам: 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) появляются в списке зарезервированных слов, но нигде в руководстве не объясняются.

См. Также [ править ]

  • Ссылка для передачи формул ALF , повышение скорости для Applesoft BASIC
  • Chinese BASIC , локализованная на китайском языке версия Applesoft BASIC.
  • Apple III BASIC от Apple и Microsoft

Ссылки [ править ]

  1. ^ TASC (The Applesoft Compiler) Руководство, 1981
  2. ^ a b Возняк, Стив (2014-05-01). «Как Стив Возняк написал БЕЙСИК для оригинального яблока с нуля» . Gizmodo . Дата обращения 2 мая 2014 .
  3. ^ Маккракен, Гарри. «Apple II Forever: дань уважения к 35-летию первого культового продукта Apple» . Время . ISSN 0040-781X . Проверено 21 июня 2019 . 
  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 . Проверено 24 апреля 2017 .
  8. ^ Справочное руководство программиста Applesoft BASIC (только для IIe), Apple Computer, Inc., 1982
  9. ^ Эта статья включает текст из Everything2 , под лицензией GFDL.
  10. ^ Applesoft расширенной точностиплавающей точкой Basic Language Reference Manual, Apple Computer, Inc., ноябрь 1977

Внешние ссылки [ править ]

  • Разобранный ROM
  • AppleSoft BASIC на JavaScript