stringtranslate.com

Atari БЕЙСИК

Atari BASIC — это интерпретатор языка программирования BASIC , который поставлялся с 8-битными компьютерами Atari . В отличие от большинства американских BASIC эпохи домашних компьютеров, Atari BASIC не является производным от Microsoft BASIC и отличается от него существенными отличиями. Он включает ключевые слова для функций, специфичных для Atari, и не поддерживает строковые массивы.

Язык распространялся в виде  картриджа ROM объемом 8 КБ для использования с компьютерами Atari 400 и 800 1979 года. Начиная с 600XL и 800XL в 1983 году, BASIC встроен в систему. Существует три основных версии программного обеспечения: оригинальная версия на основе картриджа "A", встроенная версия "B" для 600XL/800XL и финальная версия "C" в последних моделях XL и серии XE.

Несмотря на то, что 8-битные компьютеры Atari работали на более высокой скорости, чем большинство его современников, несколько технических решений поместили Atari BASIC в нижнюю часть тестов производительности. Первоначальные авторы решили большинство этих проблем в серии улучшенных версий: BASIC A+ (1981), BASIC XL (1983) и BASIC XE (1985).

Полный аннотированный исходный код и спецификации проекта Atari BASIC были опубликованы в качестве The Atari BASIC Source Book в 1983 году. [2]

Разработка

Машины, которые впоследствии стали 8-битными компьютерами Atari, изначально разрабатывались как игровые консоли второго поколения , призванные заменить Atari VCS . Рэй Кассар , новый президент Atari, решил бросить вызов Apple Computer , создав вместо этого домашний компьютер. [3]

Это означало, что проекты должны были включать язык программирования BASIC , стандарт для домашних компьютеров. В начале 1978 года Atari лицензировала исходный код версии Microsoft BASIC для MOS 6502. [4] Он предлагался в двух версиях: одна использовала 32-битный формат с плавающей точкой, который составлял около 7800 байт при компиляции, а другая использовала расширенный 40-битный формат, который был близок к 9 КБ. [5]

Даже 32-битная версия едва влезала в 8-килобайтный формат картриджа ПЗУ машины . Atari также чувствовала, что им нужно расширить язык для поддержки аппаратных функций своих компьютеров, подобно тому, что Apple сделала с Applesoft BASIC . Это увеличило размер версии Atari примерно до 11 КБ; AppleSoft BASIC на Apple II+ имел длину 10 240 байт. [a] Через шесть месяцев код был урезан почти до 8-килобайтного ПЗУ, [4] но Atari столкнулась с крайним сроком в январе 1979 года для выставки бытовой электроники (CES), где должны были быть продемонстрированы машины. Они решили обратиться за помощью, чтобы подготовить версию BASIC к выставке. [4]

Шепардсон Микросистемс

Картридж Atari BASIC 8K

В сентябре 1978 года Shepardson Microsystems выиграла тендер на завершение BASIC. [4] В то время они завершали Cromemco 16K Structured BASIC для машин Cromemco S-100 на базе Z80 . [6] [7] Разработчики Кэтлин О'Брайен и Пол Лоутон использовали Data General Business Basic , реализацию только для целочисленных вычислений, в качестве вдохновения для своего BASIC, учитывая опыт Лоутона с Data General в системе разделения времени . [1]

Cromemco BASIC включал расширенную реализацию с плавающей точкой , используя 14-значный двоично-десятичный формат (BCD), что стало возможным благодаря использованию всех 16 регистров процессора Zilog Z80 . Поскольку он преобразовывал все данные во внутренний формат во время редактирования, небольшие константы, такие как «1», занимали бы значительный объем памяти, и это могло бы стать особой проблемой при хранении массивов чисел. Чтобы решить эту проблему, язык также поддерживал 6-значный формат BCD. Он также включал отдельный 16-битный целочисленный формат для хранения внутренних значений, таких как номера строк и аналогичные системные значения. [8]

Даже самые маленькие BASIC на 6502 обычно использовали около 10 КБ, например, Commodore BASIC использовал 9 КБ, но также полагался на поддержку KERNAL , [ b] в то время как Applesoft BASIC использовал 10780 байт. [c] Чтобы достичь цели размещения в 8 КБ ПЗУ, новый BASIC должен был состоять из двух частей: сам язык на картридже и отдельная библиотека FP, использующая 2 КБ в 10 КБ ПЗУ системы. [11] Чтобы разместиться в пределах 2 КБ, система с плавающей точкой поддерживала только 6-значный формат.

Atari приняла предложение, и когда спецификации были окончательно доработаны в октябре 1978 года, Лоутон и О'Брайен начали работу над новым языком. [4] В контракте была указана дата поставки 6 апреля 1979 года или ранее, и это также включало файловую систему (позже известную как DOS 1.0). [11] Планы Atari состояли в том, чтобы вывести раннюю версию Microsoft BASIC 8K на выставку CES 1979 года, а затем перейти на Atari BASIC для производства. Разработка продвигалась быстро, чему способствовал бонусный пункт в контракте, что привело к тому, что первоначальная версия была доставлена ​​в октябре. Atari вывела на выставку CES версию с картриджем 8K вместо версии Microsoft. [12] Позже Microsoft BASIC от Atari стал доступен как отдельный продукт. [13]

Релизы

Версия, предоставленная Шепардсоном Atari для демонстрации на CES, не была финальной, и Шепардсон продолжил исправлять ошибки. [12] Шепардсон не знал, что Atari уже отправила версию для CES в производство. [14]

Эта версия позже стала известна как Revision A. Она содержит серьезную ошибку в процедуре копирования памяти: удаление строк кода длиной ровно 256 байт вызывает блокировку после ввода следующей команды. Ключ Resetне исправляет ее. [15]

Revision B пыталась исправить основные ошибки Revision A и была выпущена в 1983 году как встроенное ПЗУ в моделях 600XL и 800XL. Исправляя ошибку копирования памяти, программист заметил тот же шаблон кода в разделе для вставки строк и применил то же исправление. Вместо этого это внесло исходную ошибку в этот код. Вставка новых строк встречается гораздо чаще, чем удаление старых, поэтому изменение резко увеличило количество сбоев. [15] Revision B также добавляет 16 байт к программе каждый раз, когда она SAVEd и LOADed, в конечном итоге заставляя машину исчерпывать память даже для самых маленьких программ. [16] [17] Mapping the Atari описал их как «потрясающие ошибки» и посоветовал владельцам Revision B «не дурачьтесь; получите новое ПЗУ, которое доступно на картридже» от Atari. [17] В книге приводится программа для патча Revision B до Revision C для тех, у кого нет картриджа. [18]

Revision C устраняет утечки памяти в Revision B. [17] Он встроен в более поздние версии 800XL [16] и все модели XE, включая XEGS. Revision C также была доступна в виде картриджа. [17]

Версию можно определить, набрав PRINT PEEK(43234)в строке READY. Результат 162для Revision A, 96для Revision B и 234для Revision C. [19]

Описание

Редактирование программы

Синтаксические ошибки выводятся сразу после ввода строки.

Как и большинство BASIC для домашних компьютеров, Atari BASIC завязан на своем редакторе строк . Строки программы могут быть до трех физических строк экрана по 40 символов, всего 120 символов. Курсор можно свободно перемещать, при этом редактор автоматически отслеживает, к какой строке программы BASIC относится текущая строка экрана. Например, если курсор в данный момент находится на строке 30, а пользователь использует курсор-вверх на строку 20, любое редактирование с этой точки будет выполняться на строке 20.

Редактор Atari BASIC обнаруживает множество ошибок, которые не были бы замечены в версиях, производных от MS. Если обнаружена ошибка, редактор повторно отображает строку, выделяя текст рядом с ошибкой в ​​инверсном видео . Ошибки отображаются в виде числовых кодов с описаниями, напечатанными в руководстве. [20] Благодаря тому, как работает редактор строк, пользователь может немедленно исправить ошибку. В примере, изображенном выше (с PRUNT), ошибку можно исправить, наведя курсор на U, введя (редактор имеет только режим перезаписи) и нажав .IRETURN

Строка, введенная с ведущим номером от 0 до 32767, [21] вставляется в текущую программу или заменяет существующую строку. Если номер строки отсутствует, интерпретатор присваивает ей номер -1 (8000 16 ), и команды выполняются немедленно, в «немедленном режиме». RUNКоманда выполняет сохраненную программу с наименьшего номера строки. Atari BASIC позволяет выполнять все команды в обоих режимах. Например, LISTможет использоваться внутри программы, тогда как во многих интерпретаторах это было бы доступно только в немедленном режиме.

Во время ввода ключевые слова можно сокращать с помощью шаблона, установленного Palo Alto Tiny BASIC , вводя точку в любом месте слова. So L.расширяется до LIST, как есть LI.. Необходимо ввести только достаточное количество букв, чтобы сделать сокращение уникальным, so PLOTтребуется , PL.поскольку единственная буква P не является уникальной. Чтобы расширить сокращение, токенизатор просматривает свой список зарезервированных слов, чтобы найти первое, которое соответствует предоставленной части. Более часто используемые команды появляются первыми в списке зарезервированных слов, с REMв начале (его можно ввести как .). Когда программа позже LISTредактируется, она всегда будет выписывать полные слова с тремя исключениями: PRINTимеет синоним, ?; GOTOимеет синоним, GO TO; и LETимеет синоним, который является пустой строкой (так что и означают одно и то же). Это отдельные токены, и поэтому останутся таковыми в листинге программы. В MS BASIC также допускалась краткая форма для , но в ней использовался тот же токен, поэтому она расширялась до того времени, когда была выпущена, и рассматривалась как аббревиатура, а не синоним.10 LET A = 1010 A = 10?PRINTPRINTLIST

Токенизатор

Когда пользователь нажимает во время редактирования, текущая строка копируется в буфер входной строки BASIC в памяти между 580 и 5FF 16 . [21] Токенизатор Atari BASIC сканирует текст, преобразуя каждое ключевое слово в однобайтовый токен (например, is 20 16 ), [22] каждое число в шестибайтовое значение с плавающей точкой, каждое имя переменной в индекс в таблице и так далее, пока строка полностью не будет преобразована в легко интерпретируемый формат. Результат сохраняется в выходном буфере, расположенном в первых 256 байтах наименьшей доступной свободной памяти, на который указывает указатель LOMEM, хранящийся в 80, 81 16 . [21] Затем вывод из токенизатора перемещается. Программа сохраняется в виде дерева синтаксического анализа . [d]RETURNPRINT

Шепардсон назвал эту концепцию полной токенизации «предкомпилирующим интерпретатором». [23] Полученный токенизированный код исключает любой синтаксический анализ во время выполнения, что ускоряет его работу. Его недостаток в том, что небольшие константы, такие как 0 или 1, имеют размер шесть байтов каждая, что длиннее исходного текста.

Набор указателей (адресов) указывает на различные данные: имена переменных хранятся в таблице имен переменных (VNTP – 82, 83 16 ), а их значения хранятся в таблице значений переменных (указывается на VVTP – 86, 87 16 ). При таком косвенном указании имен переменных для ссылки на переменную требуется всего один байт для обращения к ее записи в соответствующую таблицу. Строковые переменные имеют свою собственную область (указывается на STARP – 8C, 8D 16 ), как и стек времени выполнения (указывается на RUNSTK – 8E, 8F 16 ), используемый для хранения номеров строк операторов цикла ( FOR...NEXT) и подпрограмм ( GOSUB...RETURN). Наконец, конец использования памяти BASIC указывается адресом, хранящимся в указателе MEMTOP – 90, 91 16 ).

Математические функции

Atari BASIC включает три тригонометрические функции: синус, косинус и арктангенс. DEGи RADустанавливает, используют ли эти функции радианы или градусы, по умолчанию радианы. Восемь дополнительных функций включают округление, логарифмы и квадратный корень. Случайная функция, RND, генерирует число от 0 до 1; параметр не используется.

Обработка строк

Atari BASIC скопировал систему обработки строк Hewlett-Packard BASIC , [24] , где базовый тип данных — один символ, а строки — массивы символов. Внутренне строка представлена ​​указателем на первый символ в строке и его длиной. Чтобы инициализировать строку, ее необходимо DIMensioned с ее максимальной длиной. Например:

10 DIM A$ ( 20 ) 20 PRINT "ВВЕДИТЕ СООБЩЕНИЕ: " ; 30 INPUT A$ 40 PRINT A$        

В этой программе зарезервирована строка из 20 символов, и любые символы, превышающие длину строки, будут усечены. Максимальная длина строки составляет 32 768 символов. Массивы строк не поддерживаются.

Доступ к строке осуществляется с помощью функций индексации массива или среза . A$(1,10)возвращает строку из первых 10 символов A$. Массивы индексируются с 1, поэтому строка длиной 10 начинается с 1 и заканчивается 10. Функции среза просто устанавливают указатели на начальную и конечную точки в пределах существующей выделенной памяти.

Массивы не инициализируются, поэтому числовой массив или строка содержат все данные, которые были в памяти, когда они были выделены. Следующий трюк позволяет быстро инициализировать строку, а также полезен для очистки больших областей памяти от нежелательного мусора. Числовые массивы можно очистить только с помощью цикла FOR...NEXT:

10 REM Инициализируем A$ 1000 символами X 20 DIM A$ ( 1000 ) 30 A$ = "X" : A$ ( 1000 ) = A$ : A$ ( 2 ) = A$    

Конкатенация строк работает так, как в следующем примере. Целевая строка должна быть достаточно большой, чтобы вместить объединенную строку, иначе возникнет ошибка:

10 DIM A$ ( 12 ), B$ ( 6 ) 20 A$ = "Привет " : B$ = "там!" 30 A$ ( LEN ( A$ ) + 1 ) = B$ 40 PRINT A$      

Значения в операторах DATA разделены запятыми и не типизированы. Следовательно, строки в операторах DATA обычно не заключаются в кавычки. В результате элементы данных не могут содержать запятую, но могут включать двойные кавычки. Числовые значения в операторах DATA считываются как строки или как числа в зависимости от типа переменной, в которую они считываются. Оператор READ нельзя использовать с переменными массива.

Ввод/вывод

Atari OS включает в себя подсистему для ввода/вывода периферийных устройств (I/O), известную как CIO (Central Input/Output). Большинство программ можно писать независимо от того, какое устройство они могут использовать, поскольку все они соответствуют общему интерфейсу; в то время это было редкостью на домашних компьютерах. Новые драйверы устройств можно было написать довольно легко, и они автоматически становились доступными для Atari BASIC и любой другой программы, использующей Atari OS, а существующие драйверы можно было заменить или дополнить новыми. Например, заменяющий E: мог бы заменить тот, что в ПЗУ, чтобы обеспечить отображение на 80 столбцов, или совмещаться с ним для генерации контрольной суммы всякий раз, когда возвращается строка (например, используется для проверки листинга программы ввода).

Atari BASIC поддерживает доступ CIO с зарезервированными словами OPEN #, CLOSE #, PRINT #, INPUT #, GET #, PUT #, NOTE #, POINT # и XIO # . В ОС есть процедуры для простых функций рисования графики, но не все они доступны как определенные ключевые слова BASIC. PLOT и DRAWTO для рисования линий поддерживаются, а команда, обеспечивающая заливку области для примитивных линейных геометрических фигур, не поддерживается. Функцию заливки можно использовать через общую точку входа CIO, которая вызывается с помощью команды BASIC XIO .

Оператор BASIC OPEN # подготавливает устройство для доступа к вводу-выводу:

10 REM Открывает кассетное устройство на канале 1 для чтения в BASIC 20 OPEN # 1 , 4 , 0 , "C:MYPROG.DAT"   

Здесь OPEN # означает «убедиться, что канал 1 свободен», вызвать драйвер C: для подготовки устройства (это установит катушки кассетной ленты на натяжение и продвинет головки, удерживая кассетный проигрыватель «на паузе»). 4 означает «чтение» (другие коды — 8 для записи и 12 = 8 + 4 для «чтения и записи»). Третье число — вспомогательная информация, устанавливаемая в 0, когда она не нужна. C:MYPROG.DAT — это имя устройства и имя файла; имя файла игнорируется для драйвера кассеты. Физические устройства могут иметь номера (в основном диски, принтеры и последовательные устройства), поэтому « P1: » может быть плоттером, а « P2: » — ромашковым принтером, или « D1: » может быть одним дисководом, а « D2: » и т. д. Если отсутствует, предполагается 1.

Оператор LPRINT отправляет строку на принтер.

A считывается путем PEEK- индексации ячеек памяти, поддерживаемых драйвером клавиатуры, или путем открытия его как файла (например, ). Последний ожидает нажатия клавиши.OPEN 1,4,0,"K:":GET #1,A$

Ввод текста DOSиз BASIC приводит к выходу в меню команд Atari DOS . Все несохраненные программы теряются, если на текущем диске не включена функция подкачки файлов памяти. Команды для отображения каталога на диске из BASIC нет; это можно сделать, выйдя в DOS.

Графика и звук

Atari BASIC поддерживает звук (через оператор SOUND ), графику ( GRAPHICS, SETCOLOR, COLOR, PLOT, DRAWTO ) и контроллеры ( STICK, STRIG, PADDLE, PTRIG ). [25] Оператор SOUND устанавливает один из 4 каналов прямоугольных импульсов оборудования с параметрами громкости, высоты тона и искажения.

Расширенные возможности оборудования, такие как более высокое разрешение тона, фильтры верхних частот, оцифрованный звук и формы волн, графика игрока/ракеты ( спрайты ), переопределенные наборы символов, прокрутка и пользовательские графические режимы не поддерживаются BASIC; для этого потребуются процедуры машинного языка или операторы PEEK/POKE. К некоторым из 17 основных режимов символов/графики, поддерживаемых оборудованием, нельзя просто получить доступ из BASIC на Atari 400/800, поскольку ПЗУ ОС не поддерживают их. К ним относятся некоторые многоцветные режимы символов (режимы ANTIC 4 и 5), режим символов с выносным элементом (режим ANTIC 3) и режимы с самым высоким разрешением 2 и 4 цветов (режимы ANTIC C и E, 160x192 пикселей). Единственный способ получить к ним доступ — через PEEK/POKE или машинный язык, вручную настроив регистры ANTIC и список отображения. В ПЗУ ОС на XL/XE добавлена ​​поддержка этих режимов, за исключением режима ANTIC 3, для корректной работы которого требуется переопределение набора символов в ОЗУ. [26]

Режимы растрового изображения в BASIC обычно устанавливаются так, чтобы текстовое окно занимало последние четыре строки в нижней части экрана, чтобы пользователь мог отображать подсказки и вводить данные в программу. Если к номеру режима, вызванного с помощью оператора GRAPHICS, добавляется 16, весь экран будет в режиме растрового изображения (например, GRAPHICS 8+16). Если вызывается режим растрового изображения на весь экран, Atari BASIC корректно переключится обратно в текстовый режим, когда выполнение программы будет завершено, избегая оставления пользователя с неотвечающим экраном, который необходимо вывести, введя слепую команду или перезагрузив компьютер.

Координаты растрового изображения находятся в диапазоне от 0 до максимального числа строк/столбцов минус один, таким образом, в режиме 6 (160x192) максимальные координаты пикселя могут быть 159 и 191. Если Atari BASIC попытается выполнить вывод за пределами разрешенных для этого режима координат, возникнет ошибка выполнения.

Продвинутые методы

Метки линий

Atari BASIC позволяет использовать числовые переменные и выражения для предоставления номеров строк GOTOи GOSUBкоманд. Например, подпрограмма, очищающая экран, может быть записана как GOSUB CLEARSCREEN, что проще для понимания, чем GOSUB 10000.

Строки как способ манипулирования памятью

Базовые адреса строки хранятся в таблице переменных. Адреса строк могут быть перенаправлены для указания на произвольные области ОЗУ. Это позволяет быстро выполнять процедуры сдвига памяти, лежащие в основе назначения строк и подстрок, применять из BASIC к памяти, используемой для экрана или графики игрока/ракеты. Это особенно полезно для достижения быстрого вертикального перемещения изображений игрока/ракеты непосредственно из Atari BASIC.

Произвольный доступ через DATA/RESTORE

Числовые переменные и выражения могут использоваться в качестве параметра для RESTOREоператора, что позволяет DATAосуществлять произвольный доступ к операторам с помощью кода, например . Это также можно использовать для эмуляции статических строковых массивов: .RESTORE ROOMBASE+ROOMNUMBER:READ DESCRIPTION$, TREASURE$, EXITSRESTORE STRBASE+INDEX:READ A$:PRINT A$

Обработка ошибок с помощью TRAP

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

Включает в себя

Команда ENTERсчитывает исходный код с устройства и объединяет его с текущей программой, как если бы пользователь ввел его. Это позволяет сохранять программы по разделам через LIST, считывая их с помощью ENTERдля объединения или замены существующего кода. Используя блоки номеров строк, которые не перекрываются, программисты могут создавать библиотеки подпрограмм и объединять их в новые программы по мере необходимости.

Самоизменяющийся код

Редактор может быть настроен на многократное считывание ввода с экрана до тех пор, пока не будет достигнут EOF. Это позволяет программе записывать новый программный код, за которым следует оператор CONTна экране, а затем, устанавливая курсор экрана в начало нового кода, STOPзапускать программу, заставляя новый код считываться, а затем выполнение будет продолжено оператором CONT.

Встроенный машинный язык

Atari BASIC может вызывать подпрограммы машинного кода, хранящиеся в строках или ed в памяти. Для этой цели часто используется POKEобласть размером 256 байт, начинающаяся с адреса 1536 10 (600 16 ).

Машинный код вызывается функцией USR. Первый параметр — адрес подпрограммы, а следующие значения — параметры. Если код хранится в строке с именем, ROUTINE$его можно вызвать с двумя параметрами как .ANSWER=USR(ADR(ROUTINE$),VAR1,VAR2)

Параметры помещаются в аппаратный стек как 16-битные целые числа в порядке, указанном в вызове USRв порядке от младшего байта к старшему. Последний байт помещается, указывая количество аргументов. Код машинного языка должен удалить эти значения перед возвратом через инструкцию RTS. 16-битное значение можно вернуть в BASIC, поместив его в адреса 212 10 и 213 10 (D4 16 и D5 16 ).

Форма Бэкуса-Наура

Atari BASIC поддерживал форму Бэкуса–Наура . Она была частично задокументирована Кэрол Шоу . [27] Шоу, вместе с Кейтом Брюстером, также написали Atari BASIC Reference Manual . [28] [29] [30]

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

Теоретически Atari BASIC должен работать быстрее, чем современные BASIC, основанные на шаблоне MS. Поскольку исходный код полностью токенизирован при вводе, все шаги токенизации и анализа уже завершены. Даже сложные математические операции готовы к запуску, при этом любые числовые константы уже преобразованы во внутренний 40-битный формат, а значения переменных ищутся по адресу, а не их нужно искать. [e] На практике Atari BASIC медленнее большинства других BASIC для домашних компьютеров , часто на большую величину. [31]

В двух широко используемых бенчмарках той эпохи, « Sieve of Eratosthenes» журнала Byte и бенчмарке Creative Computing, написанном Дэвидом Х. Алем , Atari оказалась в конце списка по производительности и была намного медленнее современных Apple II и PET , [32] несмотря на то, что имела тот же самый процессор, работающий примерно в два раза быстрее. Она финишировала позади более медленных машин, таких как ZX81 и даже некоторых программируемых калькуляторов. [33]

Большая часть медлительности языка обусловлена ​​тремя проблемами. [31]

Первая заключается в том, что математические процедуры с плавающей точкой плохо оптимизированы. В тесте Ahl одна операция возведения в степень была ответственна за большую часть плохих результатов машины. [31] Преобразование между числами с плавающей точкой и 16-битными целыми числами также происходит особенно медленно. Внутри эти целые числа используются для номеров строк и индексации массивов, а также для нескольких других задач, но числа в токенизированной программе хранятся в двоично-десятичном формате (BCD). [34] Всякий раз, когда встречается одно из них, например номер строки в GOTO 100, значение BCD преобразуется в целое число, что может занять до 3500 микросекунд. [35]

Другая проблема заключается в том, как Atari BASIC реализует переходы. Чтобы выполнить переход в GOTOили GOSUB, интерпретатор ищет по всей программе соответствующий номер строки. [36] Напротив, современные версии MS-производных BASIC выполняли бы поиск вперед от текущей строки, если бы номер строки цели перехода был больше, тем самым улучшая производительность перехода примерно в два раза в среднем.

Связанная и более серьезная проблема — реализация FOR... NEXTциклов. Когда FORвыполняется оператор, Atari BASIC записывает его номер строки. Каждый раз, когда NEXTдостигается , он ищет эту строку в программе, несмотря на то, что она находится в том же месте, что и в прошлый раз. [31] Все другие BASIC вместо этого записывают местоположение оператора в памяти FORи могут немедленно вернуться к нему без необходимости поиска.

Причину столь низкой эффективности лучше всего иллюстрирует цитата одного из основных авторов, Билла Уилкинсона; в 1982 году он заявил:

Лично я никогда не был уверен, что интерпретируемый язык (например, BASIC) должен быть быстрым. Авторы... утверждали, что Atari BASIC — самый медленный язык из когда-либо созданных. Моим первым побуждением было сказать: «Кому какое дело?» [37]

Эту философию можно сравнить с философией Apple BASIC Стива Возняка для оригинального Apple I , который был разработан специально для обеспечения производительности, необходимой для написания игр:

После разработки аппаратных аркадных игр я понял, что возможность программировать их на BASIC изменит мир. [38]

На платформе появилось несколько сторонних BASIC, которые решили некоторые или все эти проблемы. В их число входил собственный BASIC XL Уилкинсона , который сократил время для теста Byte с 194 до 58 секунд, [31] более чем в три раза быстрее. На тесте Ahl Atari BASIC потребовалось 405 секунд, в то время как точно такой же код в Turbo-BASIC XL занял 41,6 секунды, что на порядок лучше. [39]

Отличия от Microsoft BASIC

Ключевые слова

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

Примечания

  1. ^ AppleSoft BASIC занимал ячейки памяти с $D000 по $F7FF, в общей сложности 10240 байт.
  2. ^ Commodore BASIC использовал две основные области памяти: $A000-$BFFF и $E000-$E4D2. [9]
  3. ^ Applesoft находилась в районе $D000-$F7FF, включая библиотеку FP. [10]
  4. ^ Хотя дерево синтаксического анализа реализовано как набор таблиц, что на самом деле является деталью реализации.
  5. ^ Вот почему в MS-BASIC в именах переменных есть только две значащие буквы. Они хранятся в списке, содержащем всего два байта ASCII для имени, чтобы сократить время поиска.

Ссылки

Цитата

  1. ^ ab Лоренцо, Марк (2017). Бесконечный цикл: история языка программирования BASIC . Филадельфия: SE Books. стр. 106. ISBN 978-1974-27707-0.
  2. ^ Уилкинсон, О'Брайен и Лоутон 1983.
  3. Декабрь 2004.
  4. ^ abcde Wilkinson 1982, стр. ix.
  5. ^ Штейл, Майкл (20 октября 2008 г.). «Создайте собственную версию Microsoft BASIC для 6502». Требуется некоторая сборка .
  6. Уилкинсон 1982, стр. iv–v.
  7. ^ Cromemco 1978.
  8. ^ Cromemco 1978, стр. 2, 3.
  9. ^ «Карта памяти».
  10. ^ «Карта памяти – Apple II с загруженным Applesoft BASIC».
  11. ^ ab Wilkinson 1982, стр. v.
  12. ^ ab Wilkinson 1982, стр. x.
  13. Черри, Чарльз (июнь 1987 г.). «BASIC Bonanza». Antic .
  14. ^ Уилкинсон 1982, стр. vi.
  15. ^ ab "Atari BASIC Bugs". Compute! . Июль 1986. стр. 10.
  16. ^ ab Radcliff, Matthew (сентябрь 1985 г.). "Revision C Converter". Antic . Получено 08.07.2023 .
  17. ^ abcd Чедвик 1985, стр. 230.
  18. Чедвик 1985, стр. 250–251.
  19. Харди, Боб (февраль 1993 г.). "Keycode Getter". Atari Classics . стр. 18.
  20. Руководство 1980 г., Приложение Б.
  21. ^ abc Crawford 1982, стр. 10.3.
  22. ^ Кроуфорд 1982, стр. 10.6.
  23. ^ Уилкинсон, О'Брайен и Лоутон 1983, стр. 5.
  24. ^ HP 2000/Access BASIC Reference Manual (PDF) . Hewlett Packard. Май 1976. С. e.
  25. Руководство 1980, стр. 54.
  26. ^ "ATR: гл.15: Отображение списков".
  27. Шоу, Кэрол (18 апреля 1980 г.). Atari BASIC BNF — Форма Бэкуса–Наура (внутренняя служебная записка). Atari.
  28. ^ "Compute!'s First Book of Atari". www.atariarchives.org . Получено 11 сентября 2024 г. Кэрол Шоу, Кит Брюстер. BASIC REFERENCE MANUAL. черновик, Atari, Inc., Саннивейл, Калифорния (1979)
  29. ^ Эдвардс, Бендж (12 октября 2011 г.). "Интервью VC&G: Кэрол Шоу, первая женщина-разработчик видеоигр Atari". У них было руководство для Atari BASIC [для Atari 800], и кто-то написал что-то вроде жеманного руководства, которое должно было быть очень юмористическим, но в нем было много технических ошибок. В итоге мне пришлось переписать руководство . Получено 11 сентября 2024 г.
  30. ^ «Женщины в сфере технологий: новаторская карьера пионера видеоигр Кэрол Шоу». blog.avast.com . Получено 11 сентября 2024 г.
  31. ^ abcde Wilkinson 1985, стр. 139.
  32. ^ Ахл, Дэвид (ноябрь 1983 г.). «Сравнительный тест производительности». Creative Computing . С. 259–260.
  33. ^ Ахл, Дэвид (январь 1984). "Тест производительности творческих вычислений". Творческие вычисления . стр. 12.
  34. ^ Уилкинсон, О'Брайен и Лоутон 1983, стр. 17.
  35. ^ Кроуфорд 1982, стр. 8.45.
  36. Winner, Lane (1982). «De Re Atari, Глава 10: Atari BASIC». Atari, Inc.
  37. ^ Уилкинсон, Билл (сентябрь 1982 г.). "Insight: Atari". Compute! . стр. 116.
  38. ^ Уильямс, Грегг; Мур, Роб (декабрь 1984 г.). «История Apple / Часть 1: Ранняя история». Байт . стр. A71.
  39. ^ «Ahl's Benchmark?». 28 ноября 2007 г.

Библиография

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