Commodore BASIC

редактировать
Commodore BASIC
Разработано Microsoft
Developer Microsoft
Первое появление1977; 43 года назад (1977) от
платформы PET до C128

Commodore BASIC, также известного как PET BASIC или CBM-BASIC, это диалект языка программирования BASIC , используемого в Commodore International 8-bit линия домашнего компьютера, простирающаяся от PET 1977 года до C128 1985 года.

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

Исходная версия PET была очень похожа на исходную реализацию Microsoft с небольшими изменениями. BASIC 2.0 на C64 также был похож, и его также видели на некоторых C128s и других моделях. В более поздних версиях PET появился BASIC 4.0, аналогичный оригиналу, но с добавлением ряда команд для работы с гибкими дисками. BASIC 3.5 был первым, кто действительно отклонился, добавив ряд команд для поддержки графики и звука на C16 и Plus / 4. Несколько более поздних версий были основаны на 3.5, но мало использовались. Последний, BASIC 10.0, был частью неизданного Commodore 65.

Содержание
  • 1 История
  • 2 Технические детали
  • 3 Использование в качестве пользовательского интерфейса
  • 4 Версии и функции
    • 4.1 Выпущенные версии
    • 4.2 Невыпущенные версии
  • 5 Известные пакеты расширений
  • 6 Ссылки
  • 7 Источники
История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Строки программы могут состоять из 80 символов на большинстве машин, но машины с текстом из 40 столбцов заставили бы строку переходить на следующую строку на экране, а на VIC-20, у которого было 22 столбца дисплея, программные строки могли занимать до четырех. BASIC 7.0 на Commodore 128 увеличил лимит строки программы до 160 символов (четыре строки из 40 столбцов или две строки из 80 столбцов). Используя такие сокращения, как ?вместо PRINT, можно разместить на строке еще больше. BASIC 7.0 отображает ошибку ? STRING TOO LONG, если пользователь вводит строку программы длиной более 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.

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

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

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

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

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

Как и в большинстве других версий 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 памяти), отрицательное количество свободных Будет отображена ОСНОВНАЯ память (добавление 65535 к сообщаемому числу даст правильный объем свободной памяти). У PET и VIC-20 для BASIC никогда не было более 32 КБ общей памяти, поэтому это ограничение не проявлялось до тех пор, пока не был разработан C64. Функция FRE в BASIC 3.5 и 7.0 исправила эту проблему, а FRE в BASIC 7.0 также был «разделен» на две функции: одна для отображения свободной текстовой памяти программы BASIC, а другая для отображения свободной памяти переменных.

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

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

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

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

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

С точки зрения современного программирования, более ранние версии 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 и встроенная Datassette (исходный PET)
    • массивы с ограничением до 256 элементов
    • Команда PEEK явно отключена для ячеек BASIC ROM выше $ C000
  • V2.0 (первая версия): PET 2001 с полнофункциональной клавиатурой и обновленными ПЗУ
    • add IEEE-488 support
    • улучшена сборка мусора
    • исправить ошибку массива
    • пасхальное яйцо - ввод WAIT6502, [число ]отображает MICROSOFT!произвольное количество раз
  • V4.0: серия PET / CBM 4000/8000 (и последняя версия PET 2001s)
    • дисковые операции : DLOAD, DSAVE, COPY, SCRATCH,и т. Д. (Всего 15)
    • переменные канала ошибки диска: DS, DS $
    • значительно улучшили производительность сборки мусора
  • V2.0 (второй выпуск, после 4.0): ВИК-20 ; C64
  • V4 +: CBM-II серия (также известная как B, P range)
    • управление памятью: BANK
    • дополнительные операции с диском : BLOAD, BSAVE, DCLEAR
    • форматированная печать: PRINT USING, PUDEF
    • перехват ошибок: DISPOSE
    • альтернативное ветвление: ELSE
    • динамическая ошибка обработка: TRAP, RESUME, ERR $ ()
    • гибкая ДАННЫЕчтение: RESTORE [lnumber ]
    • функция поиска строки: INSTR
  • V3.5: C16 / 116, Plus / 4
    • звуковые и графические команды
    • джойстик ввод: JOY
    • десятичныйшестнадцатеричное преобразование: DEC (), HEX $ ()
    • структурированный цикл: DO, LOOP, WHILE, UNTIL, EXIT
    • назначение функциональной клавиши: KEY( также прямой режим)
    • ввод / редактирование программы: AUTO, DELETE, RENUMBER
    • отладка (трассировка): TRON, TROFF
    • MLM команда ввода: МОНИТОР
    • C (1) 16, Plus / 4 Пасхальное яйцо - введите SYS 52650
  • V7.0: C128
    • больше звука и графические команды, в том числе обработка спрайта
    • встроенный редактор спрайтов: SPRDEF
    • блоки с несколькими операторами для IF THEN ELSEструктур: BEGIN, BEND
    • paddle, lightpen ввод: POT, PEN
    • эксклюзивный или функция: XOR
    • получить адрес переменной: POINTER
    • текстовый режим управление окнами: WINDOW
    • управляемая задержка времени: SLEEP
    • управление памятью: SWAP, FETCH, STASH, FRE (1)
    • используется переключение банков из 128 хранить программный код отдельно от переменных. Значения переменных будут сохраняться во время выполнения программы, если программа была запущена с помощью команды GOTO.
    • дополнительные дисковые операции : BOOT, DVERIFY
    • Регулировка скорости процессора: FAST, SLOW(2 против 1 МГц)
    • войти в режим C64: GO64
    • недокументировано, работает: RREG(читать регистры ЦП после нереализованных команд SYS)
    • : ВЫКЛ, ВЫЙТИ
    • Пасхальное яйцо 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) утилита: TYPE
    • редактирование программы: FIND, CHANGE
    • управление памятью: DMA, FRE (2)
    • нереализация команды ed: PAINT, LOCATE, SCALE, WIDTH, SET, VIEWPORT, PASTE, CUT
Известные пакеты расширения
Ссылки
Исходники
Последняя правка сделана 2021-05-15 07:05:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте