Applesoft BASIC

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

Applesoft BASIC - это диалект Microsoft BASIC, разработанный Marc McDonald и Ric Weiland, поставляемые с компьютерами серии Apple II. Он заменяет Integer BASIC и является BASIC в ROM во всех компьютерах серии Apple II после исходной модели Apple II. Он также упоминается как FP BASIC (от «с плавающей запятой ») из-за того, что для его вызова использовалась команда Apple DOS вместо INT.для целого числа BASIC.

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

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

Содержание

  • 1 История
  • 2 Возможности
    • 2.1 Ограничения
    • 2.2 Звук и графика
    • 2.3 Расширения
    • 2.4 Ошибки
    • 2.5 Производительность
  • 3 Пример кода
  • 4 Ранняя эволюция
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки

История

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

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

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

  • Атомарные строки: строка больше не является массивом символов (как в Integer BASIC и C ); вместо этого это объект со сборщиком мусора (как в Scheme и Java ). Это позволяет использовать строковые массивы; DIM A $ (10)привел к вектору из одиннадцати строковых переменных, пронумерованных от 0 до 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.

Возможности

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

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

Оператор PR # может использоваться для перенаправления вывода на принтер (например, 10 PR # x: PRINT «Hello!»), где 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 добавляет пробел до и после каждого ключевого слова с токенизацией, он часто создает два пробела в строке, где одного достаточно для удобства чтения.

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

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

Ограничения

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

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

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

Applesoft поддерживает графический дисплей Apple II с низким разрешением (лоры), где 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 перед выходом из подпрограммы.

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

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

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

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

Пример кода

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

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

10TEXT: HOME 20? "HELLO WORLD"

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

10 ТЕКСТ: HOME 20 PRINT «HELLO WORLD»

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

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

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

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

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

  • Удаление строки программы: DEL
  • Доступ к машинной программе: CALL
  • Доступ к периферийным устройствам: IN # и PR # (хотя IN без "#" указан среди зарезервированных слов)
  • Управление диапазоном памяти: HIMEM: и LOMEM:
  • Отслеживание выполнения для отладки ging: 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. Не упоминается какой-либо код для вычисления значения, возвращаемого самой функцией; функция всегда отображается как присвоенная «фиктивным» переменным, которые, не выполняя действий по установке значения с помощью кода пользователя, просто получают бессмысленное значение, возвращенное им. Даже используемые подпрограммы ПЗУ, которые возвращают значения (в примерах, те, которые предоставляют услуги функций PDL () и SCRN ()), просто имеют свои значения, сохраненные пользовательскими подпрограммами в местах, которые отдельно PEEKed в последующем операторе.

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

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

См. Также

Ссылки

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

Последняя правка сделана 2021-06-11 22:26:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте