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

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

Этот язык представлял собой картридж ROM емкостью 8  КБ для первых машин 8-битного семейства: 400, 800, а затем 1200XL. BASIC встроен в последующие модели XL и XE, но его можно отключить, удерживая клавишу во время загрузки. XEGS отключает BASIC , если питание без клавиатуры прилагается.OPTION

Atari BASIC была почти на дне в тестах производительности той эпохи. Первоначальные авторы решили большинство из этих проблем в BASIC XL и BASIC XE. Также появилось множество сторонних решений, таких как Turbo-Basic XL .

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

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

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

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

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

Shepardson Microsystems [ править ]

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

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

То, что стало Atari BASIC, - это урезанная версия Cromemco BASIC, перенесенная на 6502. Для этого требовалось 10 КБ кода. [9] Чтобы он уместился в картридже Atari 8K, некоторые стандартные процедуры были перенесены в ПЗУ операционной системы . Это включало 1780 байт для поддержки операций с плавающей запятой, которые были размещены в отдельном ПЗУ размером 2 КБ на материнской плате. [4]

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

Релизы [ править ]

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

Эта версия была позже известный как Revision A . Он содержит серьезную ошибку в подпрограмме, копирующей память; удаление строк кода длиной ровно 256 байт вызывает блокировку. Иногда это называлось «двухстрочной блокировкой», потому что она не срабатывала до тех пор, пока не была введена следующая строка кода или команда. Это не может быть исправлено нажатием Resetклавиши. [13]

Версия B попыталась исправить все основные ошибки в версии A и была выпущена в 1983 году как встроенное ПЗУ в моделях 600XL и 800XL. Исправляя ошибку копирования памяти, программист заметил тот же шаблон кода в разделе для вставки строк и применил то же исправление. Вместо этого в этот код была добавлена ​​исходная ошибка. Вставка новых строк происходит гораздо чаще, чем удаление старых, поэтому изменение резко увеличило количество сбоев. [13] Версия B также содержит ошибку, которая добавляет к программе 16 байтов каждый раз, когда она SAVEредактируется и LOADредактируется, что в конечном итоге приводит к нехватке памяти даже для самых маленьких программ. [14] [15] Отображение Atariописал их как «потрясающие ошибки» и посоветовал владельцам версии B «Не дурачиться; получите новое ПЗУ, которое доступно на картридже» от Atari. [15] В книге есть программа для исправления редакции B до версии C для тех, у кого нет картриджа. [16]

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

Версию можно определить, набрав PRINT PEEK(43234)в приглашении ГОТОВ. Результат 162для редакции A, 96редакции B и 234редакции C. [17]

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

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

Об ошибках синтаксиса сообщается сразу после ввода строки.

Atari BASIC использует линейный редактор, как и большинство домашних компьютеров BASIC. В отличие от большинства BASIC, Atari BASIC сканирует только что введенную строку программы и немедленно сообщает об ошибках. Если обнаружена ошибка, редактор повторно отображает строку, выделяя текст рядом с ошибкой в инвертированном видео . Ошибки отображаются в виде числовых кодов с описанием, напечатанным в руководстве. [18]

Строка, введенная с ведущим числом от 0 до 32767, [19] вставляется в текущую программу или заменяет существующую строку. Если номер строки отсутствует, команды выполняются немедленно. Команда RUNзапускает программу с наименьшего номера строки. Atari BASIC позволяет выполнять все команды в обоих режимах. Например, LISTможно использовать внутри программы.

LISTотображает либо всю программу, либо диапазон строк, разделенных запятой. Например, LIST 10,50отображает все строки от 10 до 50 включительно. Вывод можно перенаправить, указав идентификатор устройства. LIST "P:"отправляет листинг программы на принтер вместо экрана LIST "C:"на кассету.

Строки программы могут содержать до трех строк физического экрана, состоящих из 40–120 символов. Курсор можно перемещать свободно, при этом редактор автоматически отслеживает, частью какой строки программы BASIC является текущая строка экрана. Нажатие ↵ Enterтокенизирует текущую строку. В примере, изображенном выше (с PRUNT), ошибку можно исправить, наведя курсор на U, набрав I(в редакторе есть только режим перезаписи) и нажав ↵ Enter.

Токенизатор [ править ]

Токенизатор Atari BASIC анализирует всю строку при вводе или изменении. Все ключевые слова конвертируются в однобайтовый токен. Числовые константы разбираются в их 40-битной внутренней форме и затем помещаются в строку в этом формате, в то время как строки остаются в исходном формате, но с префиксом байта, описывающего их длину. У переменных есть хранилище, выделяемое по мере их появления, и их имя заменяется указателем на их место хранения в памяти. Шепардсон назвал эту концепцию ранней токенизации «интерпретатором предварительной компиляции». [20]

Исходный текст строки сохраняется в буфере строки ввода BASIC в памяти между 580 и 5FF 16 . Буфер вывода токена (адресуется указателем в LOMEM - 80, 81 16 ) составляет 256 байтов, и любой токенизированный оператор, размер которого превышает размер буфера, вызывает ошибку (14 - слишком длинная строка). Выходные данные токенизатора затем перемещаются в более постоянное хранилище в различных местах памяти. Программа хранится в виде дерева синтаксического анализа . [b]

Набор указателей (адресов) указывает на различные данные: имена переменных хранятся в таблице имен переменных (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 ).

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

В ключевых словах для связи с периферийными устройствами (см. Раздел « Ввод / вывод » ниже), таких как OPEN #и PRINT #, «  #» фактически является частью токенизированного ключевого слова, а не отдельным символом. Например, « PRINT» и « PRINT #0» - это одно и то же, [c] просто представлено по-разному.

Математические функции [ править ]

Atari BASIC включает три тригнометрические функции: синус, косинус и арктангенс. DEGи RADустановите, используют ли эти функции радианы или градусы, по умолчанию радианы.

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

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

Atari BASIC значительно отличается от BASIC в стиле Microsoft способом обработки строк. Microsoft BASIC в основном копировали строку обработки системы DEC «s BASIC-PLUS типов, в которых строки являются первоклассными с переменной длиной , а по часам. Это позволяет использовать как строковые переменные, так и массивы строк, поскольку обе они представлены внутри компьютерным словом, указывающим на хранилище в куче .

Напротив, Atari BASIC скопировала систему обработки строк Hewlett-Packard BASIC , где основным типом данных является один символ, а строки - это массивы символов. Строка представлена ​​указателем на первый символ в строке и его длиной. Чтобы инициализировать строку, ее размер должен быть увеличен до максимальной длины, тем самым зарезервировав требуемый объем памяти в куче. Например:

10 DIM A $ ( 20 ) 20 ПЕЧАТЬ «ВВЕДИТЕ СООБЩЕНИЕ:» ; 30 ВХОД A $ 40 ПЕЧАТЬ A $        

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

MS BASIC включает функции для доступа к битам строк, например, LEFT$(A$,10)возвращает 10 крайних левых символов A$. Эти функции создают новые строки в куче и возвращают указатель на начало новой строки. В Atari BASIC строка представлена ​​массивом, и доступ к ней осуществлялся с помощью функций индексации массива или «нарезки» . Эквивалентное выражение в Atari BASIC A$(1,10): массивы имеют 1-индекс, а не 0-индекс, поэтому строка длиной 10 начинается с 1 (не 0) и заканчивается на 10. Поскольку синтаксис нарезки был таким же, как синтаксис для выбора строки в двумерном массиве в других BASIC не было возможности определять массивы строк или работать с ними.

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

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

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

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

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

Оператор INPUT нельзя использовать с подсказкой или с переменными массива. Последний должен быть заполнен косвенно с помощью оператора типа 20 INPUT A: B (1) = A. Переменные массива в Atari BASIC также могут содержать два нижних индекса.

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

Массивы имеют базовый индекс 0, поэтому такой оператор, как DIM A (10), фактически создает массив из 11 элементов (элементы 0-10).

Ввод / вывод [ править ]

ОС Atari включает в себя подсистему ввода / вывода периферийных устройств (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 используется для вывода строк на принтер.

Atari BASIC не включает в себя эквивалент команд Microsoft BASIC GET или INKEY $ для обнаружения нажатия клавиши, это можно смоделировать либо путем прямого ввода драйвера клавиатуры, либо открытия его как файла (например ), хотя последний будет ждать нажатия клавиши в отличие от GET или INKEY $ .OPEN 1,4,0,"K:":GET #1,A$

Ввод DOSиз BASIC приведет к выходу в командное меню Atari DOS . Все несохраненные программы будут потеряны. Нет команды для отображения каталога диска из BASIC, и это должно быть сделано путем выхода из DOS.

DOS занимает примерно 5 КБ памяти, таким образом, машина Atari с кассетой (48 КБ или больше) будет иметь около 37 000 байт свободной памяти программ BASIC и 32 000 байт, если присутствует DOS. BASIC не может использовать дополнительную оперативную память на машинах XL и XE.

Поддержка графики и звука [ править ]

Atari BASIC имеет встроенную поддержку звука (с помощью оператора SOUND ), настройки экранной графики ( GRAPHICS, SETCOLOR , рисование графики COLOR, PLOT, DRAWTO ), джойстиков ( STICK, STRIG ) и манипуляторов ( PADDLE, PTRIG ) . Базовая операционная система включала подпрограмму для заполнения произвольных форм, но в BASIC не было команды PAINT, и ее вместо этого нужно было вызывать с помощью команды XIO . [21]

В Atari BASIC нет специальной команды для очистки экрана, обычно это делается с помощью , которая ПЕЧАТАЕТ контрольный код очистки экрана (аналогично Commodore BASIC). Atari BASIC не включает функцию TAB; это можно смоделировать, установив позицию столбца курсора в $ 55 или позицию табуляции в $ C9, которая имеет значение по умолчанию 10. Измененные значения не вступят в силу, пока не будет выполнен оператор PRINT. В Atari BASIC также нет функции SPC.PRINT CHR$(125)PRINT CHR$(147)

Расширенные аспекты оборудования, такие как графика игрока / ракеты ( спрайты ), переопределенные наборы символов, прокрутка и пользовательские графические режимы, не поддерживаются BASIC; для этого потребуются процедуры на машинном языке или операторы PEEK / POKE. Некоторые графические режимы недоступны из BASIC на Atari 400/800, поскольку ПЗУ ОС не поддерживают их; единственный способ получить к ним доступ - на машинном языке, установив регистры ANTIC и список отображения вручную. ПЗУ ОС на XL / XE добавили поддержку этих режимов. [22]

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

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

Продвинутые методы [ править ]

Метки линий [ править ]

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

Включает [ редактировать ]

Большинство БЕЙСИКОВ той эпохи позволяют LISTкоманде отправлять исходный код на принтер или другое устройство. Atari BASIC также включает ENTERкоманду, которая считывает исходный код с устройства и объединяет его обратно в программу, как если бы пользователь ввел его. Это позволяет сохранять программы в разделах, считывая их, используя ENTERдля объединения или замены существующих. код. Тщательно используя блоки номеров строк, которые не перекрываются, программисты могут создавать библиотеки подпрограмм и при необходимости объединять их в новые программы.

Встроенный машинный язык [ править ]

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

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

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

Производительность [ править ]

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

По двум широко используемым тестам того времени, Sieve of Eratosthenes из журнала Byte и тесту Creative Computing, написанному Дэвидом Х. Алем , Atari финишировала почти в конце списка с точки зрения производительности и была намного медленнее, чем современный Apple II. или Коммодор ПЭТ , [24] , несмотря на наличие один и тот же процессор , но работает на его примерно в два раза скорость либо. Он финишировал позади относительно медленных машин, таких как Sinclair ZX81, и даже некоторых программируемых калькуляторов. [25]

По большей части медлительность языка проистекает из трех проблем. [23]

Во-первых, математические процедуры с плавающей запятой были плохо оптимизированы. В тесте Ahl операция с одной экспонентой, которая внутренне перебирает функцию медленного умножения, во многом была причиной плохих результатов машины. [23]

Помимо медленного выполнения большинства математических операций, преобразование между внутренним форматом с плавающей запятой и 16-битными целыми числами, используемыми в некоторых частях языка, было относительно медленным. Внутри эти целые числа использовались для номеров строк и индексации массивов, а также для некоторых других задач, но числа в токенизированной программе всегда хранились в двоично-десятичном формате (BCD). [26] Каждый раз, когда встречается одно из них, например, в номере строки in GOTO 100, токенизированное значение BCD должно быть преобразовано в целое число, что может занять до 3500 микросекунд. [27] Другие BASIC избегали этой задержки за счет специального регистра преобразования чисел, которые могли быть только целыми числами, например, номер строки, следующий заGOTO, переключение на специальный код ASCII-to-integer для повышения производительности.

Другая проблема связана с тем, как Atari BASIC реализовала ветки. Чтобы выполнить переход в GOTOили GOSUB, интерпретатор просматривает всю программу в поисках соответствующего номера строки, который ему нужен. [28] Одним из незначительных улучшений, обнаруженных в большинстве основанных на Microsoft BASIC, является сравнение номера целевой строки с текущим номером строки и поиск вперед от этой точки, если он больше, или запуск сверху, если меньше. Это улучшение отсутствовало в Atari BASIC. [23]

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

Несколько BASIC для Atari решили некоторые или все эти проблемы, что привело к значительному увеличению производительности. BASIC XL сократил время выполнения теста Byte с 194 до 58 секунд [23], что более чем в три раза быстрее. Это было достигнуто путем кэширования местоположения FOR/NEXTциклов, как и в других BASIC, а также использовался тот же самый кеш для выполнения GOTOи GOSUBпоиска строк для дальнейших улучшений. Turbo-Basic XL включал другое решение проблемы поиска строк, а также переписанную высокопроизводительную библиотеку с плавающей запятой. В тесте Ahl Atari BASIC потребовалось 405 секунд, в то время как точно такой же код в Turbo BASIC занял 41,6 секунды, что на порядок больше. [29]

Отличия от Microsoft BASIC [ править ]

  • Следующие ключевые слова не в Atari BASIC: INKEY$, CLS, DEF FN, TAB, ELSE.
  • Все массивы должны иметь размеры перед использованием, в то время как Microsoft BASIC по умолчанию устанавливает размер массива из 10 элементов, если размер не измеряется.
  • Строковые переменные обрабатываются как массивы, и перед использованием их необходимо измерить.
  • Atari BASIC не позволяет использовать массивы строк или конкатенацию строк.
  • Целочисленные переменные не поддерживаются.
  • Побитовых операторов нет.
  • Имена переменных могут иметь произвольную длину.
  • INPUT не может включать подсказку.
  • PRINTможет быть сокращено, как ?в Microsoft BASIC, но Atari BASIC не токенизирует его в PRINT. LIST-при запуске программы по-прежнему отображается вопросительный знак.
  • Целью GOTOи GOSUBможет быть переменная или выражение.
  • FOR..NEXTциклы в Atari BASIC должны иметь имя переменной, на которую ссылается NEXTоператор, в то время как Microsoft BASIC этого не требует.
  • Использование нескольких переменных в NEXTоператорах не допускается, как в Microsoft BASIC (например, NEXT X,Y).
  • LIST использует запятую для разделения диапазона вместо знака минус.

Ключевые слова [ править ]

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

  • BASIC A + , BASIC XL, BASIC XE - Расширенные BASIC для Atari от Optimized Systems Software
  • Turbo-Basic XL - Бесплатная программа BASIC, совместимая с Atari BASIC, также доступна с компилятором для большей скорости и дополнительных команд.

Заметки [ править ]

  1. ^ AppleSoft BASIC занимала ячейки памяти от $ D000 до $ F7FF, всего 10240 байт.
  2. ^ Хотя дерево синтаксического анализа реализовано в виде набора таблиц, что на самом деле является деталью реализации.
  3. ^ Хотя на самом деле 0 здесь явно запрещен BASIC, предполагая, что это ошибка кодирования, не так ли?
  4. ^ Это причина того, что MS-basics имеет только две значащие буквы в именах переменных, они хранятся в списке только с двумя байтами ASCII для имени в другом, чтобы сократить время поиска.

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

Цитата [ править ]

  1. ^ Лоренцо, Марк (2017). Бесконечный цикл: история языка программирования BASIC . Филадельфия: SE Books. п. 106. ISBN 978-1974-27707-0.
  2. Перейти ↑ Wilkinson, O'Brien & Laughton, 1983 .
  3. ^ Decuir 2004 .
  4. ^ Б с д е е Wilkinson 1982 , с. ix.
  5. ^ Steil, Майкл (20 октября 2008). «Создайте свою собственную версию Microsoft BASIC для 6502» . Требуется некоторая сборка .
  6. Перейти ↑ Wilkinson 1982 , pp. Iv-v.
  7. ^ Cromemco 1978 .
  8. ^ Лоренцо, Марк (2017). Бесконечный цикл: история языка программирования BASIC . Филадельфия: SE Books. п. 106. ISBN 978-1974-27707-0.
  9. ^ a b Уилкинсон 1982 , стр. v.
  10. ^ a b Уилкинсон 1982 , стр. Икс.
  11. ^ Черри, Чарльз (июнь 1987). "БАЗОВЫЙ БОНАНЗА" . Античный .
  12. Перейти ↑ Wilkinson 1982 , p. vi.
  13. ^ a b «Ошибки Atari BASIC» . Вычислить! . Июль 1986 г. с. 10.
  14. ^ a b Рэдклифф, Мэтью (сентябрь 1995 г.). «Конвертер редакции C» . Античный .
  15. ^ а б в г Чедвик 1985 , стр. 230.
  16. Перейти ↑ Chadwick 1985 , pp. 250-251.
  17. Харди, Боб (февраль 1993 г.). «Получатель кода ключа» . Классика Atari . п. 18.
  18. Руководство 1980 , Приложение B.
  19. Перейти ↑ Crawford 1982 , p. 10.3.
  20. Перейти ↑ Wilkinson, O'Brien & Laughton 1983 , p. 5.
  21. Руководство 1980 , стр. 54.
  22. ^ "ATR: раздел 15: Списки отображения" .
  23. ^ Б с д е е Wilkinson , 1985 , с. 139.
  24. Ахль, Дэвид (ноябрь 1983 г.). «Сравнительный тест» . Творческие вычисления . С. 259–260.
  25. Перейти ↑ Ahl, David (январь 1984). «Тест творческих вычислений» . Творческие вычисления . п. 12.
  26. Перейти ↑ Wilkinson, O'Brien & Laughton 1983 , p. 17.
  27. Перейти ↑ Crawford 1982 , p. 8.45.
  28. Перейти ↑ Winner, Lane (1982). «De Re Atari, Глава 10: Atari BASIC» . Atari, Inc.
  29. ^ "Тест Аля?" . 28 ноября 2007 г.

Библиография [ править ]

  • Справочное руководство ATARI BASIC . Atari Inc. 1980. Архивировано из оригинала на 1 мая 2005 года.
  • Чедвик, Ян (1985). Отображение Atari . Вычислить! Публикации. ISBN 0-87455-004-1.
  • Кроуфорд, Крис (1982). De Re Atari . Обмен программами Atari.
  • Cromemco l6K Extended BASIC (PDF) . Cromemco. 1978 г.
  • Уилкинсон, Билл (1982). Внутри Atari DOS . Оптимизированное системное программное обеспечение, Inc. ISBN 0-942386-02-7. Проверено 4 апреля 2009 .
  • Декюр, Джо (30 декабря 2004 г.). 3 поколения архитектуры игровых автоматов (речь). Classic Gaming Expo 2004. Конференц-центр Сан-Хосе.
  • Уилкинсон, Билл; О'Брайен, Кэтлин; Лотон, Пол (1983). Справочник по Atari BASIC . Вычислить! Книги. ISBN 0-942386-15-9.
  • Уилкинсон, Билл (февраль 1985 г.). «INSIGHT: Atari» . Творческие вычисления . С. 139–140.

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

  • Atari BASIC, хорошее, плохое и уродливое
  • Альбрехт, Боб; Финкель, Лерой; Браун, Джеральд Р. (1979). Atari Basic - самообучающееся руководство . Проверено 29 июня 2013 года .
  • Альбрехт, Боб; Финкель, Лерой; Браун, Джеральд Р. (1985). Atari Basic - XL Edition . Проверено 29 июня 2013 года .