Коммодор БЕЙСИК - Commodore BASIC

Commodore BASIC
Разработано Microsoft
Разработчик Microsoft
Впервые появился 1977 ; 44 года назад ( 1977 )
Платформа ПЭТ к C128

Commodore BASIC , также известный как ПЭТ BASIC или CBM-BASIC , является диалектом на BASIC языка программирования , используемого в Commodore International «s 8-битной домашней компьютерной линии, простирающейся от ПЭТ 1977 до C128 1985.

Ядро основано на 6502 Microsoft BASIC , и поэтому оно имеет много общих характеристик с другими 6502 BASIC того времени, такими как Applesoft BASIC . Commodore лицензировал BASIC у Microsoft в 1977 году на основе принципа «плати один раз, без роялти» после того, как Джек Трамиэль отклонил предложение Билла Гейтса о плате за единицу в 3 доллара, заявив: «Я уже женат», и заплатил не более 25000 долларов. для бессрочной лицензии.

Исходная версия PET была очень похожа на исходную реализацию Microsoft с небольшими изменениями. BASIC 2.0 на C64 также был похож, и его также видели на некоторых C128 и других моделях. В более поздних версиях PET появился BASIC 4.0, аналогичный оригиналу, но с добавлением ряда команд для работы с дискетами .

BASIC 3.5 был первым, кто действительно отклонился, добавив ряд команд для поддержки графики и звука на C16 и Plus / 4. BASIC 7.0 был включен в Commodore 128 и включал команды структурированного программирования из BASIC 3.5 Plus / 4, а также ключевые слова, разработанные специально для использования преимуществ новых возможностей машины. Добавлены редактор спрайтов и монитор машинного языка. Последний, BASIC 10.0, был частью неизданного Commodore 65 .

История

Commodore взяла исходный код BASIC с фиксированной оплатой и доработала его для всех своих других 8-битных домашних компьютеров. Уведомление об авторских правах Microsoft появилось только в Commodore 128 (с V7.0). Однако Microsoft встроила «пасхалку» в версию 2 или «обновленную» Commodore Basic, которая доказала свое происхождение: ввод (непонятной) команды WAIT 6502, 1приводил к Microsoft!появлению на экране. (Пасхальное яйцо было хорошо запутано - сообщение не отображалось ни в одной разборке интерпретатора.)

Популярный Commodore 64 поставлялся с BASIC v2.0 в ПЗУ, несмотря на то, что компьютер был выпущен после серии PET / CBM с версией 4.0, потому что 64 был задуман как домашний компьютер, а серия PET / CBM была нацелена на использование в бизнесе и образовании. где предполагалось, что их встроенный язык программирования будет использоваться более активно. Это сэкономило производственные затраты, так как V2 поместился в меньшие по размеру ПЗУ.

Технические подробности

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

Удобной особенностью коммодора ROM -resident BASIC интерпретатор и Kernal был редактором полноэкранный . Хотя на клавиатуре Commodore есть только две клавиши курсора, направление которых менялось при удерживании клавиши Shift, редактор экрана позволял пользователям вводить прямые команды или вводить и редактировать строки программы из любого места на экране. Если перед строкой был указан номер строки, она была размечена и сохранена в программной памяти. Строки, не начинающиеся с номера, выполнялись нажатием RETURNклавиши всякий раз, когда курсор оказывался на строке. Это ознаменовало собой значительное обновление интерфейсов ввода программ по сравнению с другими распространенными в то время BASIC домашними компьютерами, которые обычно использовали строковые редакторы , вызываемые отдельной EDITкомандой, или «копирующий курсор», который обрезал строку в позиции курсора.

Он также имел возможность сохранять именованные файлы на любое устройство, включая кассету - популярное запоминающее устройство во времена ПЭТ, которое использовалось на протяжении всего срока службы 8-битных Commodore в качестве недорогой формы массовой памяти. . Большинство систем поддерживают только имена файлов на дискетах , что затрудняет сохранение нескольких файлов на других устройствах. Пользователь одной из этих других систем должен был обратить внимание на отображение счетчика диктофона в месте расположения файла, но это было неточно и подвержено ошибкам. С помощью PET (и BASIC 2.0) файлы с кассет можно было запрашивать по имени. Устройство будет искать имя файла, последовательно считывая данные, игнорируя любые несовпадающие имена файлов. Файловая система также поддерживалась мощной структурой записи, которую можно было загружать или сохранять в файлы. Данные кассеты Commodore записывались в цифровом виде, а не менее дорогими (и менее надежными) аналоговыми методами, используемыми другими производителями. Поэтому требовался специализированный набор данных, а не стандартный магнитофон. Были доступны адаптеры, в которых использовался аналого-цифровой преобразователь, позволяющий использовать стандартный рекордер, но они стоили лишь немного меньше, чем набор данных.

Команда LOAD может использоваться с необязательным параметром 1, который загружает программу по адресу памяти, содержащемуся в первых двух байтах файла (эти байты отбрасываются и не сохраняются в памяти). Если параметр , 1 не используется, программа загрузится в начало программной области BASIC, которая сильно различается между машинами. Поставлялись некоторые варианты Commodore BASIC BLOADи BSAVEкоманды, которые работали так же, как их аналоги в Applesoft BASIC , загружая или сохраняя растровые изображения из указанных ячеек памяти.

PET не поддерживает перемещаемые программы, и команда LOAD всегда загружает первые два байта, содержащиеся в файле программы. Это создавало проблему при попытке загрузить программы BASIC, сохраненные на других компьютерах Commodore, поскольку они загружались по более высокому адресу, чем ожидалось от программы PET BASIC, существовали обходные пути для «перемещения» программ в нужное место. Если программа была сохранена на машине CBM-II , единственный способ загрузить ее на PET - это изменить первые два байта с помощью редактора секторов диска, поскольку у серии CBM-II их программная область BASIC была равна 0, что привело бы к в ПЭТ пытается загрузить нулевую страницу и блокируется.

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

В наборе символов по умолчанию только в верхнем регистре смещенные символы отображаются как графический символ; например, команда,, GOTOможет быть сокращена G{Shift-O}(которая похожа на экранную). Большинство таких команд состояло из двух букв, но в некоторых случаях они были длиннее. В подобных случаях возникала двусмысленность, поэтому требовалось больше несмещенных букв команды, например ( ) для . У некоторых команд не было сокращенной формы либо из-за краткости, либо из-за двусмысленности с другими командами. Например, у команды не было аббревиатуры, потому что ее написание противоречило отдельному ключевому слову, которое располагалось ближе к началу таблицы поиска ключевых слов . Часто используемая команда имела один ярлык, как это часто бывает в большинстве диалектов Microsoft BASIC. Сокращение команд со смещенными буквами является уникальным для Commodore BASIC. GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

В этом методе токенизации был сбой, так что если бы один из них включал REM(оператор BASIC для добавления комментария к коду), за которым следует a {Shift-L}, при попытке просмотреть листинг программы, интерпретатор BASIC немедленно прервал бы листинг, отобразил ?SYNTAX ERRORи вернется к READY.незамедлительный. Этот сбой был использован для некоторого эффекта программистами, которые хотели попытаться защитить свою работу, хотя его было довольно легко обойти.

Сокращая ключевые слова, можно было разместить больше кода в одной строке программы (которая могла занимать две строки экрана на дисплеях с 40 столбцами, например, C64 или PET, или четыре строки на дисплее VIC-20 с 22 столбцами). Это позволило немного сэкономить на накладных расходах на хранение необходимых в противном случае дополнительных строк программы, но не более того. Все команды BASIC были токенизированы и занимали 1 байт (или два, в случае нескольких команд BASIC 7 или BASIC 10) в памяти независимо от того, каким образом они были введены. Редактировать такие длинные строки было неудобно. Команда LISTотображала полное ключевое слово команды - расширение строки программы за пределы 2 или 4 строк экрана, которые можно было ввести в память программы.

Представление

Как и оригинальный интерпретатор Microsoft BASIC , Commodore BASIC работает медленнее, чем собственный машинный код . Результаты тестирования показали, что копирование 16 килобайт из ПЗУ в ОЗУ занимает меньше секунды в машинном коде по сравнению с более чем одной минутой в BASIC. Чтобы работать быстрее, чем интерпретатор, программисты начали использовать различные методы для ускорения выполнения. Один заключался в том, чтобы хранить часто используемые значения с плавающей запятой в переменных, а не использовать буквальные значения, поскольку интерпретация имени переменной была быстрее, чем интерпретация буквального числа. Поскольку плавающая точка является типом по умолчанию для всех команд, быстрее использовать в качестве аргументов числа с плавающей запятой, а не целые числа. Когда скорость была важна, некоторые программисты преобразовывали разделы программ BASIC в язык ассемблера 6502 или 6510, которые загружались отдельно из файла или записывались в память из операторов DATA в конце программы BASIC и выполнялись из BASIC с помощью команды, либо из в прямом режиме или из самой программы . Когда скорость выполнения машинного языка была слишком велика, например, для игры или при ожидании ввода пользователя, программисты могли опрашивать , считывая выбранные ячейки памяти (например, $ C6 для 64 или $ D0 для 128, что означает размер очередь клавиатуры), чтобы отложить или остановить выполнение. SYS


Уникальной особенностью Commodore BASIC является использование управляющих кодов для выполнения таких задач, как очистка экрана или установка курсора в программе; они могут быть вызваны либо путем выдачи команды, где X соответствует управляющему коду, который должен быть выдан (например, это управляющий код для очистки экрана), либо путем нажатия соответствующей клавиши между кавычками, таким образом, нажав + после кавычки заставит BASIC отобразить визуальное представление управляющего кода (в данном случае перевернутое сердце), которое затем будет обработано при выполнении программы (прямая печать управляющих кодов использует меньше памяти и выполняется быстрее, чем вызов функции CHR $ ). Это по сравнению с другими реализациями BASIC, которые обычно имеют специальные команды для очистки экрана или перемещения курсора. PRINT CHR$(X)PRINT CHR$(147)⇧ ShiftCLR HOME

BASIC 3.5 и выше содержат соответствующие команды для очистки экрана и перемещения курсора.

Строки программы в Commodore BASIC нигде не требуют пробелов (но команда LIST всегда будет отображать единицу между номером строки и оператором), например,, и было обычным делом писать программы без пробелов. Эта функция была добавлена ​​для экономии памяти, поскольку токенизатор никогда не удаляет пробелы, вставленные между ключевыми словами: наличие пробелов приводит к лишним байтам в токенизированной программе, которые просто пропускаются во время выполнения. Пробелы между номером строки и оператором программы удаляются токенизатором. 100 IFA=5THENPRINT"YES":GOTO1600x20

Строки программы могут состоять из 80 символов на большинстве машин, но машины с текстом в 40 столбцов заставили бы строку переходить на следующую строку на экране, а на VIC-20, который имел дисплей из 22 столбцов, строки программы могли занимать целых четыре. BASIC 7.0 на Commodore 128 увеличил лимит строки программы до 160 символов (четыре строки по 40 столбцов или две строки по 80 столбцов). Используя такие сокращения, как ?вместо PRINT, можно уместить в строке еще больше. BASIC 7.0 отображает? СЛИШКОМ ДЛИННАЯ СТРОКАошибка, если пользователь вводит строку программы длиной более 160 символов. Более ранние версии не выдают ошибки и просто отображают приглашение READY на две строки вниз, если длина строки превышена. Номер строки считается числом символов в строке программы, поэтому пятизначный номер строки приведет к разрешению на четыре символа меньше, чем однозначное число.

Порядок выполнения строк Commodore BASIC не определялся нумерацией строк; вместо этого он следовал порядку, в котором строки были связаны в памяти. Строки программы хранились в памяти в виде односвязного списка с указателем (содержащим адрес начала следующей строки программы), номером строки и затем размеченным кодом для строки. Во время ввода программы BASIC постоянно менял порядок строк программы в памяти, чтобы номера строк и указатели располагались в порядке возрастания. Однако после того, как программа была введена, ручное изменение номеров строк и указателей с помощью команд POKE могло позволить выполнение вне очереди или даже дать каждой строке один и тот же номер строки. В первые дни, когда BASIC использовался в коммерческих целях, это был метод защиты программного обеспечения , препятствующий случайному изменению программы.

Номера строк могут находиться в диапазоне от 0 до 65520 и занимают пять байтов для хранения независимо от того, сколько цифр в номере строки, хотя выполнение тем быстрее, чем меньше цифр. Размещение нескольких операторов в строке будет использовать меньше памяти и выполняться быстрее.

Операторы GOTO и GOSUB будут искать вниз от текущей строки, чтобы найти номер строки, если выполняется переход вперед, в случае перехода назад они вернутся в начало программы, чтобы начать поиск. Это замедлит работу более крупных программ, поэтому рекомендуется размещать часто используемые подпрограммы в начале программы.

Имена переменных имеют значение только 2 символа; Таким образом , имена переменных VARIABLE1, VARIABLE2и VAвсе они относятся к одной и той же переменной.

Commodore BASIC также поддерживает побитовые операторы - AND, OR и XOR , хотя эта функция была частью основного кода Microsoft 6502 BASIC, она обычно опускалась в других реализациях, таких как Applesoft BASIC .

Собственный формат чисел Commodore BASIC, как и его родительский MS BASIC , был с плавающей точкой . Большинство современных реализаций BASIC использовали один байт для характеристики ( экспоненты ) и три байта для мантиссы . Точность числа с плавающей запятой с использованием трехбайтовой мантиссы составляет всего около 6,5 десятичных цифр, и часто встречается ошибка округления . В реализациях Microsoft BASIC 6502 использовалась 40-битная арифметика с плавающей запятой, что означало, что переменным требовалось пять байтов для хранения (четыре байта мантиссы и один байт для экспоненты), в отличие от 32-битной плавающей запятой, найденной в BASIC-80.

В то время как реализации Microsoft BASIC 8080 / Z80 поддерживали целочисленные переменные и переменные с двойной точностью, реализации 6502 были только с плавающей запятой.

Хотя Commodore BASIC поддерживает целочисленные переменные со знаком (обозначенные знаком процента) в диапазоне от -32768 до 32767, на практике они используются только для переменных массива и служат для сохранения памяти, ограничивая элементы массива двумя байтами каждый (массив из 2000 элементов будут занимать 10 000 байт, если они объявлены как массив с плавающей запятой, но только 4000, если они объявлены как целочисленный массив). Обозначение любой переменной как целого числа просто приводит к тому, что BASIC преобразует ее обратно в число с плавающей запятой, замедляя выполнение программы и тратя впустую память, поскольку каждый знак процента требует для хранения одного дополнительного байта (поскольку это также относится к целочисленным массивам, программист должен избегать их использования, за исключением случаев, когда используются большие массивы, которые превышают доступную память при хранении с плавающей запятой). Кроме того, невозможно выполнить POKE или PEEK ячейки памяти выше 32767 с адресом, определенным как целое число со знаком.

Точку (.) Можно использовать вместо числа 0 (таким образом, вместо или вместо ), это будет выполняться немного быстрее. 10 A=.10 A=010 FOR A=. TO 10010 FOR A=0 to 100

Оператор SYS , используемый для запуска программ на машинном языке, был добавлен Commodore и отсутствовал в исходном коде Microsoft BASIC, который содержал только функцию USR для вызова подпрограмм на машинном языке. Он автоматически загружает регистры ЦП со значениями в $ 30C- $ 30F (C64, зависит от других машин) - это можно использовать для передачи данных в подпрограммы машинного языка или как средство вызова функций ядра из BASIC (в качестве примера , очищает экран). POKE 780,147:SYS 65490

Поскольку 8-битные машины Commodore, отличные от C128, не могут автоматически загружать программное обеспечение с диска, обычным методом является включение заглушки BASIC, например, для начала выполнения программы. Можно автоматически запускать программное обеспечение после загрузки и не требовать от пользователя ввода оператора RUN , это делается с помощью фрагмента кода, который перехватывает BASIC "готовый" вектор на $ 0302 . 10 SYS 2048

Как и в большинстве других версий Microsoft BASIC , если массив не объявлен с помощью оператора DIM , он автоматически устанавливается на десять элементов (на практике 11, поскольку элементы массива отсчитываются от 0). Необходимо объявлять массивы большего размера, иначе BASIC отобразит ошибку при запуске программы, и нельзя будет изменить размер массива в программе, если все переменные не будут удалены с помощью оператора CLR. Числовые массивы автоматически заполняются нулями при их создании, может возникнуть кратковременная задержка выполнения программы, если размерный массив имеет большой размер.

Строковые переменные представлены пометкой имени переменной знаком доллара. Таким образом, переменные AA$, AAи AA%будут пониматься как отдельные. Переменные массива также считаются отличными от простых переменных, поэтому A и A (1) не относятся к одной и той же переменной. Размер массива строк просто относится к тому, сколько строк хранится в массиве, а не к размеру каждого элемента, который выделяется динамически. В отличие от некоторых других реализаций Microsoft BASIC, Commodore BASIC не требует резервирования строкового пространства в начале программы.

В отличие от других 8-битных машин, таких как Apple II, все машины Commodore имеют встроенные часы, которые инициализируются на 0 при включении и обновляются с каждым тиком таймера PIA / VIA / TED / CIA, то есть 60 раз в секунду. . В BASIC ему присваиваются две системные переменные, TI и TI $ , каждая из которых содержит текущее время. TI доступен только для чтения и не может быть изменен; это приведет к появлению сообщения об ошибке синтаксиса. TI $ может использоваться для установки времени с помощью строки из шести чисел (ошибка возникает из-за использования строки, отличной от шести чисел). Часы - не очень надежный метод измерения времени, поскольку они останавливаются всякий раз, когда прерывания выключаются (выполняются некоторыми подпрограммами ядра), а доступ к порту IEC (или порту IEEE на PET) замедляет обновление часов на несколько тактов.

Функция RND в Commodore BASIC может использовать часы для генерации случайных чисел; это выполняется с помощью RND (0) , однако его использование относительно ограничено, поскольку возвращаются только числа от 0 до 255. В остальном RND работает так же, как и другие реализации Microsoft BASIC, в том, что псевдослучайная последовательность используется через фиксированное 5-байтовое начальное значение, сохраняемое при включении в ячейках памяти $ 8B- $ 8F на C64 (расположение отличается на других машины). RND с любым числом больше 0 будет генерировать случайное число, объединенное из значения, включенного в функцию RND, и начального значения, которое обновляется на 1 каждый раз, когда выполняется функция RND. RND с отрицательным числом переходит в точку в последовательности текущего начального значения, заданного числом.

Поскольку генерация истинных случайных чисел невозможна с помощью оператора RND , для C64 и C128 более типично использовать канал белого шума микросхемы SID для случайных чисел.

BASIC 2.0, как известно, страдал от чрезвычайно медленной сборки мусора строк. Сборка мусора автоматически запускается каждый раз, когда выполняется функция FRE, и если в ходе выполнения программы использовалось много строковых переменных и массивов, их очистка может занять более часа в худших условиях. Также невозможно прервать сборку мусора, поскольку BASIC не сканирует клавишу RUN / STOP при выполнении этой процедуры. BASIC 4.0 представил улучшенную систему сбора мусора с обратными указателями, и все более поздние реализации Commodore BASIC также имеют ее.

Функция FRE в BASIC 2.0 страдает еще одним техническим недостатком, заключающимся в том, что она не может обрабатывать подписанные числа более 32768, поэтому, если функция вызывается на C64 (38k BASIC памяти), будет отображаться отрицательный объем свободной BASIC памяти (добавление 65535 к сообщенный номер получит правильный объем свободной памяти). У PET и VIC-20 для BASIC никогда не было более 32 КБ общей памяти, поэтому это ограничение не проявлялось до тех пор, пока не был разработан C64. Функция FRE в BASIC 3.5 и 7.0 исправила эту проблему, и FRE в BASIC 7.0 также был «разделен» на две функции: одна для отображения свободной текстовой памяти программы BASIC, а другая для отображения свободной памяти переменных.

Альтернативы

Стартовый экран Simons 'BASIC

Для Commodore 64 было выпущено множество расширений BASIC из-за относительно ограниченных возможностей его родного BASIC 2.0. Одним из самых популярных расширений был DOS Wedge , который был включен на тестовый / демонстрационный диск Commodore 1541 . Это расширение на 1 КБ для BASIC добавило ряд команд, связанных с диском, включая возможность чтения каталога диска без разрушения программы в памяти. Впоследствии его функции были включены в различные сторонние расширения, такие как популярный картридж Epyx FastLoad . Другие расширения BASIC добавили дополнительные ключевые слова, чтобы упростить кодирование спрайтов, звука и графики с высоким разрешением, например BASIC Саймонса .

Хотя отсутствие в BASIC 2.0 звуковых или графических функций расстраивало многих пользователей, некоторые критики утверждали, что в конечном итоге это было выгодно, поскольку заставляло пользователя изучать машинный язык.

Ограничения BASIC 2.0 на C64 привели к использованию встроенного машинного языка ROM от BASIC. Чтобы загрузить файл в указанную ячейку памяти, имя файла, диск и номер устройства будут считаны вызовом :; место будет указано в регистрах X и Y: ; и процедура загрузки будет называться: . SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

Дисковый журнал для C64, Loadstar , был местом для программистов-любителей, которые делились коллекциями прото-команд для BASIC, вызываемых с SYS address + offsetкомандой.

С точки зрения современного программирования, более ранние версии Commodore BASIC представляли для программиста множество ловушек для плохого программирования. Поскольку большинство этих проблем возникло из Microsoft BASIC , практически каждый домашний компьютер BASIC той эпохи страдал от подобных недостатков. Каждой строке программы Microsoft BASIC программист присвоил номер строки . Обычной практикой было увеличивать числа на некоторое значение (5, 10 или 100), чтобы упростить вставку строк во время редактирования или отладки программы, но плохое планирование означало, что вставка больших разделов в программу часто требовала реструктуризации всего кода. Общий метод должны был начать программу в некоторых странах с низким номером строки с ON ... GOSUB таблицей переходов , с телом программы структурировано по разделам , начиная с назначенным номером строки , как 1000, 2000 и так далее. Если необходимо добавить большой раздел, ему можно просто присвоить следующий доступный основной номер строки и вставить в таблицу переходов.

Более поздние версии BASIC на Commodore и других платформах включали команды DELETE и RENUMBER , а также команду автоматической нумерации строк, которая автоматически выбирала и вставляла номера строк в соответствии с выбранным приращением. Кроме того, все переменные рассматриваются как глобальные переменные. Трудно создать четко определенные циклы, часто заставляя программиста полагаться на команду GOTO (позже это было исправлено в BASIC 3.5 с добавлением команд DO, LOOP, WHILE, UNTIL и EXIT ). Переменные-флажки часто приходилось создавать для выполнения определенных задач. В более ранних версиях BASIC от Commodore также отсутствуют команды отладки, а это означает, что ошибки и неиспользуемые переменные трудно отловить. ЕСЛИ ... ТО ... структуры ELSE , стандартная часть Z80 Microsoft BASIC, были добавлены в BASIC 3.5 после того, как были недоступны в более ранних версиях Commodore BASIC.

Использовать как пользовательский интерфейс

Как и другие домашние компьютеры , машины Commodore загружались непосредственно в интерпретатор BASIC. Файлы и команды программирования BASIC могут быть введены в прямом режиме для загрузки и выполнения программного обеспечения. Если выполнение программы было остановлено с помощью клавиши RUN / STOP, значения переменных будут сохранены в ОЗУ и могут быть распечатаны для отладки. 128 даже выделил свой второй банк размером 64 КБ для хранения переменных, позволяя значениям сохраняться до тех пор, пока не будет введена команда NEWили RUN. Это, наряду с расширенным редактором экрана, включенным в Commodore BASIC, придало среде программирования ощущение REPL ; программисты могли вставлять и редактировать строки программы в любом месте экрана, создавая программу в интерактивном режиме. Это контрастирует с бизнес-ориентированными операционными системами того времени, такими как CP / M или MS-DOS , которые обычно загружались в интерфейс командной строки . Если на этих платформах требовался язык программирования, его нужно было загружать отдельно.

В то время как некоторые версии Commodore BASIC входят диск-специфичные DLOADи DSAVEкоманды, версию встроенной в Commodore 64 не хватали их, требуя от пользователя указать номер устройства дисковода ( как правило , 8 или 9) к стандартной LOADкоманде, которые в противном случае дефолта на магнитную ленту. Еще одним упущением в Commodore 64s BASIC 2.0 была DIRECTORYкоманда для отображения содержимого диска без очистки основной памяти. На 64-й версии просмотр файлов на диске был реализован как загрузка «программы», которая при перечислении показывала каталог как псевдо-BASIC-программу с размером блока файла в качестве номера строки. Это привело к перезаписи текущей загруженной программы. Такие надстройки, как DOS Wedge, преодолели это, отображая список каталогов прямо в экранной памяти.

Версии и особенности

Список версий CBM BASIC в хронологическом порядке с последовательно добавленными функциями:

Выпущенные версии

  • V1.0: PET 2001 с клавиатурой chiclet и встроенной датассетой (оригинальный PET)
    • массивы ограничены 256 элементами
    • Команда
    PEEK явно отключена для ячеек BASIC ROM выше $ C000
  • V2.0 (первая версия): PET 2001 с полнофункциональной клавиатурой и обновленными ПЗУ
    • добавить поддержку IEEE-488
    • улучшена сборка мусора
    • исправить ошибку массива
    • Пасхальное яйцо - ввод WAIT6502,[число] отображается MICROSOFT!произвольное количество раз.
  • V4.0: серия PET / CBM 4000/8000 (и последняя версия PET 2001s)
    • дисковые операции : и DLOAD,DSAVE,COPY,SCRATCH,т.д. (15 всего)
    • переменные канала ошибки диска: DS,DS$
    • значительно улучшена производительность сборки мусора
  • V2.0 (второй выпуск, после 4.0): VIC-20 ; C64
  • V4 +: серия CBM-II (также известная как серия B, P)
    • управление памятью: BANK
    • больше дисковых операций :BLOAD, BSAVE,DCLEAR
    • форматная печать: PRINT USING,PUDEF
    • ловушка ошибок: DISPOSE
    • альтернативное ветвление: ELSE
    • динамическая обработка ошибок: TRAP,RESUME,ERR$()
    • гибкое DATAчтение: RESTORE [льняной номер]
    • функция поиска строки: INSTR
  • V3.5: C16 / 116 , плюс / 4
    • звуковые и графические команды
    • вход джойстика :JOY
    • десятичноешестнадцатеричное преобразование:DEC(),HEX$()
    • структурированный цикл: DO,LOOP,WHILE,UNTIL,EXIT
    • назначение функциональных клавиш: KEY(также прямой режим)
    • ввод / редактирование программы: AUTO,DELETE,RENUMBER
    • отладка (трассировка):TRON, TROFF
    • Команда входа в MLM :MONITOR
    • C (1) 16, Plus / 4 Пасхальное яйцо - введите SYS 52650
  • V7.0: C128
    • больше звуковых и графических команд, включая обработку спрайтов
    • встроенный редактор спрайтов: SPRDEF
    • блоки с несколькими операторами для IF THEN ELSEструктур:BEGIN,BEND
    • весло , вход светового пера :POT,PEN
    • исключительная функция или :XOR
    • получить адрес переменной: POINTER
    • окно в текстовом режиме: WINDOW
    • контролируемая выдержка времени: SLEEP
    • управление памятью: SWAP,FETCH,STASH,FRE(1)
    • использовал переключение банков 128 для хранения программного кода отдельно от переменных. Значения переменных будут сохраняться во время выполнения программы, если программа была запущена с помощью команды GOTO.
    • больше дисковых операций :BOOT,DVERIFY
    • Регулировка частоты процессора: FAST,SLOW(2 против 1 МГц)
    • войдите в режим C64: GO64
    • недокументированный, рабочий: RREG(читать регистры ЦП после а SYS)
    • нереализованные команды: OFF,QUIT
    • C128 Пасхальное яйцо - введите SYS 32800,123,45,6
  • Невыпущенные версии

    • V3.6: Commodore LCD (неизданный прототип). Практически идентичен V7.0, со следующими отличиями:
      • VOLUME вместо того VOL
      • EXIT вместо того QUIT
      • FAST,SLOW команды отсутствуют
      • Дополнительная команда: POPUPS
    • V10: Commodore 65 (неизданный прототип)
      • графические / видео команды: PALETTE,GENLOCK
      • ввод с помощью мыши :MOUSE,RMOUSE
      • SEQутилита text file ( ):TYPE
      • редактирование программы: FIND,CHANGE
      • управление памятью: DMA,FRE(2)
      • нереализованные команды: PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT,PASTE,CUT

    Известные пакеты расширения

    использованная литература

    Источники

    БАЗОВЫЙ 2.0
    • Angerhausen et al. (1983). Анатомия Commodore 64 (полную информацию см. В статье C64 ).
    БАЗОВЫЙ 3.5
    • Джеррард, Питер; Бергин, Кевин (1985). Полная разборка COMMODORE 16 ROM . Джеральд Дакворт и Ко. Ltd. ISBN  0-7156-2004-5 .
    ОСНОВНОЙ 7.0
    • Джарвис, Деннис; Спрингер, Джим Д. (1987). BASIC 7.0 Внутреннее устройство . Гранд-Рапидс, Мичиган: ISBN  Abacus Software, Inc. 0-916439-71-2 .
    ОСНОВНОЙ 10.0