Введение
Commodore BASIC, также известный как PET BASIC или CBM BASIC, — это диалект языка программирования BASIC, использовавшийся в 8-битных домашних компьютерах Commodore International, начиная с PET (1977) и заканчивая Commodore 128 (1985). Ядро основано на 6502 Microsoft BASIC, и поэтому он имеет много общих черт с другими 6502 BASIC того времени, такими как Applesoft BASIC. Commodore лицензировал BASIC у Microsoft в 1977 году на условиях единовременной оплаты без выплаты роялти, после того как Джек Трамиэль отклонил предложение Билла Гейтса о плате за каждую единицу, заявив: "Я уже женат" и согласившись заплатить только за бессрочную лицензию. Оригинальная версия PET была очень похожа на исходную реализацию Microsoft с незначительными изменениями. BASIC 2.0 на C64 также был похож и встречался на C128 (в режиме C64) и других моделях. Более поздние модели 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, also known as PET BASIC or CBM BASIC, is the dialect of the BASIC programming language used in Commodore International's 8 bit home computer line, stretching from the PET (1977) to the Commodore 128 (1985). The core is based on 6502 Microsoft BASIC, and as such it shares many characteristics with other 6502 BASICs of the time, such as Applesoft BASIC. Commodore licensed BASIC from Microsoft in 1977 on a "pay once, no royalties" basis after Jack Tramiel turned down Bill Gates' offer of a per unit fee, stating, "I'm already married," and would pay no more than for a perpetual license. The original PET version was very similar to the original Microsoft implementation with few modifications. BASIC 2.0 on the C64 was also similar, and was also seen on C128s (in C64 mode) and other models. Later PETs featured BASIC 4.0, similar to the original but adding a number of commands for working with floppy disks. BASIC 3.5 was the first to really deviate, adding a number of commands for graphics and sound support on the C16 and Plus/4. BASIC 7.0 was included with the Commodore 128, and included structured programming commands from the Plus/4's BASIC 3.5, as well as keywords designed specifically to take advantage of the machine's new capabilities. A sprite editor and machine language monitor were added. The last, BASIC 10.0, was part of the unreleased 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. Это объясняется тем, что Commodore 64 позиционировался как домашний компьютер, а серия PET/CBM была ориентирована на бизнес и образование, где встроенный язык программирования, как предполагалось, использовался более интенсивно. Это позволило снизить производственные затраты, так как V2 помещалась в ПЗУ меньшего размера.
Редактирование программы
Удобной особенностью интерпретатора BASIC и KERNAL для Commodore была полноэкранная программа редактирования. Несмотря на то, что клавиатуры Commodore имели всего два курсорных ключа, менявших направление при нажатии клавиши Shift, редактор экрана позволял пользователям вводить прямые команды или вводить и редактировать строки программы из любой точки экрана. Если строка начиналась с номера строки, она токенизировалась и сохранялась в памяти программы. Строки, не начинающиеся с номера, выполнялись при нажатии клавиши, когда курсор находился на этой строке. Это было значительным улучшением интерфейса ввода программ по сравнению с другими распространенными домашними компьютерами BASIC того времени, которые обычно использовали редакторы строк, вызываемые отдельной командой EDIT, или "курсор копирования", обрезавший строку в позиции курсора. Также была возможность сохранять именованные файлы на любое устройство, включая кассету – популярное устройство хранения во времена PET и которое оставалось в использовании на протяжении всего жизненного цикла 8-битных Commodore как недорогой способ массового хранения. Большинство систем поддерживали только имена файлов на дискетах, что затрудняло сохранение нескольких файлов на других устройствах. Пользователю этих систем приходилось запоминать показания счетчика магнитофона в месте расположения файла, но это было неточно и подвержено ошибкам. С PET (и BASIC 2.0) файлы с кассет можно было запрашивать по имени. Устройство искало имя файла, последовательно считывая данные и игнорируя несовпадающие имена. Файловая система также поддерживалась мощной структурой записей, которые можно было загружать или сохранять в файлы. Данные на кассетах Commodore записывались в цифровом виде, а не менее дорогими (и менее надежными) аналоговыми методами, используемыми другими производителями. Поэтому требовался специализированный Datasette, а не обычный магнитофон. Существовали адаптеры, использующие аналого-цифровой преобразователь для работы со стандартным магнитофоном, но они стоили лишь немного дешевле Datasette. Команда может использоваться с необязательным параметром, который загрузит программу в адрес памяти, содержащийся в первых двух байтах файла (эти байты отбрасываются и не сохраняются в памяти). Если параметр не указан, программа загружается в начало области программы BASIC, которая сильно различается на разных машинах. Некоторые варианты Commodore BASIC поставлялись с командами BLOAD и BSAVE, которые работали аналогично своим аналогам в Applesoft BASIC, загружая или сохраняя растровые изображения из указанных областей памяти. PET не поддерживает перемещаемые программы, и команда всегда загружается, начиная с первых двух байтов, содержащихся в файле программы. Это создавало проблему при попытке загрузить программы BASIC, сохраненные на других машинах Commodore, поскольку они загружались по более высокому адресу, чем ожидала BASIC PET, и требовало обходных путей для "перемещения" программ в нужное место. Если программа была сохранена на машине CBM II, единственный способ загрузить ее на PET заключался в изменении первых двух байтов с помощью редактора секторов диска, поскольку серия CBM II имела область программы BASIC по адресу $0, что приводило бы к попытке PET загрузить нулевую страницу и зависанию. Ключевые слова Commodore BASIC можно было сокращать, сначала вводя немодифицированный символ, а затем модифицированный символ следующей буквы. Это устанавливало старший бит, заставляя интерпретатор прекращать чтение и разбирать выражение в соответствии с таблицей поиска. Это означало, что выражение до старшего бита принималось как замена полного ввода команды. Однако, поскольку все ключевые слова BASIC хранились в памяти как однобайтовые токены, это было удобством для ввода выражений, а не оптимизацией. В наборе символов, содержащем только прописные буквы, модифицированные символы отображаются как графические символы; например, команда GOTO можно было сократить до G{Shift O} (которая на экране выглядела как GΓ). Большинство таких команд состояли из двух букв, но в некоторых случаях они были длиннее. В таких случаях возникала неоднозначность, поэтому требовалось больше немодифицированных букв команды, например, GO{Shift S} (GO♥) для GOSUB. Некоторые команды не имели сокращенной формы из-за краткости или неоднозначности с другими командами. Например, команда INPUT не имела сокращения, поскольку ее написание совпадало с отдельным ключевым словом INPUT#, которое находилось ближе к началу таблицы ключевых слов. Часто используемая команда PRINT имела сокращение ?, как и в большинстве диалектов Microsoft BASIC. Сокращение команд с помощью модифицированных букв уникально для Commodore BASIC. Этот метод токенизации имел ошибку: если включать REM (оператор BASIC для добавления комментария к коду), за которым следовал {Shift L}, при попытке просмотреть листинг программы интерпретатор BASIC немедленно прерывал листинг, отображал ?SYNTAX ERROR и возвращался к подсказке READY. Программисты использовали эту ошибку для защиты своей работы, хотя ее было довольно легко обойти. Сокращая ключевые слова, можно было поместить больше кода на одной строке программы (которая могла занимать две строки экрана на дисплеях с 40 столбцами, т. е. C64 или PET, или четыре строки на 22-столбцовом дисплее VIC 20). Это позволяло немного сэкономить на накладных расходах на хранение дополнительных строк программы, но не более того. Все команды BASIC токенизировались и занимали 1 байт (или два, в случае нескольких команд BASIC 7 или BASIC 10) в памяти, независимо от способа ввода. Такие длинные строки было неудобно редактировать. Команда LIST отображала все ключевое слово команды, расширяя строку программы за пределы 2 или 4 строк экрана, которые можно было ввести в память программы.
Выступление
Как и оригинальный интерпретатор Microsoft BASIC, Commodore BASIC работает медленнее, чем машинный код. Результаты тестов показали, что копирование 16 килобайт из ПЗУ в ОЗУ занимает менее секунды в машинном коде, по сравнению с более чем минутой в BASIC. Чтобы ускорить выполнение программ, программисты начали использовать различные техники. Одной из них было хранение часто используемых чисел с плавающей точкой в переменных, а не использование литералов, так как интерпретация имени переменной была быстрее, чем интерпретация числового литерала. Поскольку тип с плавающей точкой является типом по умолчанию для всех команд, использование чисел с плавающей точкой в качестве аргументов быстрее, чем целых чисел. Когда скорость была критична, некоторые программисты переводили части программ BASIC на ассемблер 6502 или 6510, который загружался отдельно из файла или записывался в память из инструкций DATA в конце программы BASIC, а затем выполнялся из BASIC с помощью команды SYS, либо в прямом режиме, либо из самой программы. Если скорость машинного кода была слишком высокой, например, в играх или при ожидании ввода пользователя, программисты могли выполнять опрос, считывая выбранные ячейки памяти (например, для 64 или для 128, обозначающие размер буфера клавиатуры), чтобы замедлить или остановить выполнение. Уникальной особенностью Commodore BASIC является использование управляющих кодов для выполнения задач, таких как очистка экрана или позиционирование курсора в программе. Их можно вызвать либо с помощью команды, где X соответствует коду управления (например, является кодом управления для очистки экрана), либо нажатием соответствующей клавиши в кавычках. Например, нажатие после кавычки заставит BASIC отобразить визуальное представление управляющего кода (в данном случае, перевернутое сердце), которое будет выполнено при запуске программы (прямая печать управляющих кодов использует меньше памяти и выполняется быстрее, чем вызов функции). Это отличается от других реализаций BASIC, которые обычно имеют отдельные команды для очистки экрана или перемещения курсора. BASIC 3.5 и более поздние версии имеют специальные команды для очистки экрана и перемещения курсора. В Commodore BASIC строки программ не требуют пробелов (но команда всегда отображает один пробел между номером строки и оператором), например, , и было принято писать программы без пробелов. Эта функция была добавлена для экономии памяти, поскольку токенайзер не удаляет пробелы между ключевыми словами: наличие пробелов приводит к дополнительным 0x20 байтам в токенизированной программе, которые просто пропускаются при выполнении. Токенайзер удаляет пробелы между номером строки и оператором программы. На большинстве машин строки программы могут содержать до 80 символов, но машины с 40-колонковым текстом переносили строку на следующую строку на экране, а на VIC 20, с 22-колонковым дисплеем, строки программы могли занимать до четырех строк. BASIC 7.0 на Commodore 128 увеличил лимит строки программы до 160 символов (четыре строки по 40 символов или две строки по 80 символов). Используя сокращения, такие как вместо , можно поместить больше кода в строку. BASIC 7.0 выдает ошибку, если пользователь вводит строку программы длиной более 160 символов. В более ранних версиях ошибка не выдается, а просто отображается запрос READY на две строки ниже, если длина строки превышена. Номер строки учитывается в общем количестве символов в строке программы, поэтому пятизначный номер строки уменьшает допустимое количество символов на четыре. Порядок выполнения строк Commodore BASIC не определялся нумерацией строк; вместо этого он следовал порядку, в котором строки были связаны в памяти. Строки программы хранились в памяти в виде односвязного списка с указателем (содержащим адрес начала следующей строки программы), номером строки и затем токенизированным кодом строки. Во время ввода программы BASIC постоянно переупорядочивал строки программы в памяти, чтобы номера строк и указатели были в порядке возрастания. Однако после ввода программы ручное изменение номеров строк и указателей с помощью команд POKE могло привести к выполнению строк в неправильном порядке или даже присвоить всем строкам один и тот же номер строки. В ранние годы, когда BASIC использовался в коммерческих целях, это был метод защиты программного обеспечения от несанкционированных изменений. Номера строк могут быть от 0 до 65520 и занимают пять байт для хранения, независимо от количества цифр в номере строки, хотя выполнение происходит быстрее, если номер строки содержит меньше цифр. Размещение нескольких операторов в одной строке позволяет сэкономить память и ускорить выполнение. Операторы и будут искать строку с указанным номером вниз от текущей строки, если выполняется прямой переход, а в случае обратного перехода вернутся к началу программы для поиска. Это замедляет выполнение больших программ, поэтому желательно размещать часто используемые подпрограммы в начале программы. Имена переменных учитываются только первые два символа; таким образом, имена переменных VARIABLE1, VARIABLE2 и VA относятся к одной и той же переменной. Commodore BASIC также поддерживает побитовые операторы , и , хотя эта функция была частью основного кода Microsoft 6502 BASIC, она часто отсутствовала в других реализациях, таких как Applesoft BASIC. Собственный формат чисел в Commodore BASIC, как и в его родительском MS BASIC, — это числа с плавающей точкой. Большинство современных реализаций BASIC использовали один байт для мантиссы (экспоненты) и три байта для мантиссы. Точность числа с плавающей точкой с трехбайтовой мантиссой составляет около 6,5 десятичных знаков, и округление является распространенной проблемой. 6502 реализации Microsoft BASIC использовали 40-битную арифметику с плавающей точкой, что означает, что переменные занимали пять байт для хранения (четырехбайтовая мантисса и один байт для экспоненты), в отличие от 32-битной арифметики с плавающей точкой в BASIC 80. В то время как 8080/Z80 реализации Microsoft BASIC поддерживали целочисленные и переменные двойной точности, 6502 реализации поддерживали только числа с плавающей точкой. Хотя Commodore BASIC поддерживает целочисленные переменные со знаком (обозначаются знаком процента) в диапазоне от -32768 до 32767, на практике они используются только для переменных массивов и служат для экономии памяти, ограничивая элементы массива двумя байтами каждый (массив из 2000 элементов займет 10 000 байт, если он объявлен как массив чисел с плавающей точкой, но только 4000 байт, если он объявлен как целочисленный массив). Объявление любой переменной как целочисленной просто приводит к тому, что BASIC преобразует ее обратно в число с плавающей точкой, замедляя выполнение программы и тратя память, поскольку каждый знак процента занимает один дополнительный байт для хранения (поскольку это также относится к целочисленным массивам, программисту следует избегать их использования, если только не используются очень большие массивы, которые превысили бы доступную память, если бы они хранились как числа с плавающей точкой). Кроме того, невозможно с помощью или получить доступ к ячейкам памяти выше 32767 с адресом, определенным как целочисленная переменная. Точку (.) можно использовать вместо числа 0 (например, вместо или вместо ), что приведет к немного более быстрому выполнению. Оператор, используемый для запуска программ на машинном коде, был добавлен Commodore и отсутствовал в оригинальном коде Microsoft BASIC, который содержал только функцию USR для вызова подпрограмм на машинном коде. Он автоматически загружает регистры процессора значениями из (C64, варьируется на других машинах), что можно использовать для передачи данных в подпрограммы на машинном коде или в качестве средства вызова функций ядра из BASIC (например, очищает экран). Поскольку 8-битные компьютеры Commodore, отличные от C128, не могут автоматически загружать дисковое программное обеспечение, обычно используется базовая заглушка, такая как , для начала выполнения программы. Можно автоматически запускать программное обеспечение после загрузки, не требуя от пользователя ввода оператора , это делается путем перехвата вектора "ready" BASIC по адресу .
Как и в большинстве других версий Microsoft BASIC, если массив не объявлен с помощью оператора , он автоматически устанавливается в десять элементов...
As with most other versions of Microsoft BASIC, if an array is not declared with a statement, it is automatically set to ten elements (in practice 11 since array elements are counted from 0). Larger arrays must be declared or BASIC will display an error when the program is run and an array cannot be re dimensioned in a program unless all variables are wiped via a CLR statement. Numeric arrays are automatically filled with zeros when they are created, there may be a momentary delay in program execution if a large array is dimensioned. String variables are represented by tagging the variable name with a dollar sign. Thus, the variables AA$, AA, and AA% would each be understood as distinct. Array variables are also considered distinct from simple variables, thus and do not refer to the same variable. The size of a string array merely refers to how many strings are stored in the array, not the size of each element, which is allocated dynamically. Unlike some other implementations of Microsoft BASIC, Commodore BASIC does not require string space to be reserved at the start of a program. Unlike other 8 bit machines such as the Apple II, Commodore's machines all have a built in clock that is initialized to 0 at power on and updated with every tick of the PIA/VIA/TED/CIA timer, thus 60 times per second. It is assigned two system variables in BASIC, and , which both contain the current time. TI is read only and cannot be modified; doing so will result in a Syntax Error message. may be used to set the time via a six number string (an error results from using a string other than six numbers). The clock is not a very reliable method of timekeeping since it stops whenever interrupts are turned off (done by some kernal routines) and accessing the IEC (or IEEE port on the PET) port will slow the clock update by a few ticks. The function in Commodore BASIC can use the clock to generate random numbers; this is accomplished by , however it is of relatively limited use as only numbers between 0 and 255 are returned. Otherwise, works the same as other implementations of Microsoft BASIC in that a pseudo random sequence is used via a fixed 5 byte seed value stored at power on in memory locations on the C64 (the location differs on other machines). with any number higher than 0 will generate a random number amalgamated from the value included with the function and the seed value, which is updated by 1 each time an RND function is executed. with a negative number goes to a point in the sequence of the current seed value specified by the number. Since true random number generation is impossible with the statement, it is more typical on the C64 and C128 to utilize the SID chip's white noise channel for random numbers. BASIC 2.0 notoriously suffered from extremely slow garbage collection of strings. Garbage collection is automatically invoked any time a function is executed and if there are many string variables and arrays that have been manipulated over the course of a program, clearing them can take more than an hour under the worst conditions. It is also not possible to abort garbage collection as BASIC does not scan the RUN/STOP key while performing this routine. BASIC 4.0 introduced an improved garbage collection system with back pointers and all later implementations of Commodore BASIC also have it. The function in BASIC 2.0 suffered from another technical flaw in that it cannot handle signed numbers over 32768, thus if the function is invoked on a C64 (38k BASIC memory), a negative amount of free BASIC memory will be displayed (adding 65535 to the reported number will obtain the correct amount of free memory). The PET and VIC 20 never had more than 32k of total memory available to BASIC, so this limitation did not become apparent until the C64 was developed. The function on BASIC 3.5 and 7.0 corrected this problem and on BASIC 7.0 was also "split" into two functions, one to display free BASIC program text memory and the other to display free variable memory.
Альтернативы
Многие расширения BASIC были выпущены для Commodore 64 из-за относительно ограниченных возможностей его встроенного BASIC 2.0. Одним из самых популярных расширений был DOS Wedge, который поставлялся с Commodore 1541 Test/Demo Disk. Это расширение BASIC размером 1 КБ добавило ряд команд, связанных с диском, включая возможность чтения каталога диска без уничтожения программы в памяти. Его функции впоследствии были включены в различные сторонние расширения, такие как популярный картридж Epyx FastLoad. Другие расширения BASIC добавили дополнительные ключевые слова для упрощения кодирования спрайтов, звука и графики высокого разрешения, например Simons' BASIC (1983) и Vision BASIC (2022). Хотя отсутствие звуковых или графических функций в BASIC 2.0 расстраивало многих пользователей, некоторые критики утверждали, что это в конечном итоге было полезно, поскольку заставляло пользователя изучать машинный язык. Ограничения BASIC 2.0 на C64 привели к использованию встроенного в ПЗУ машинного языка из BASIC. Для загрузки файла в указанное местоположение памяти имя файла, диск и номер устройства считывались с помощью вызова: ; местоположение указывалось в регистрах X и Y: ; и вызывалась подпрограмма загрузки: Дисковый журнал для C64, Loadstar, был площадкой для программистов-любителей, которые делились коллекциями протоколов команд для BASIC, вызываемых командой. С точки зрения современного программирования, ранние версии Commodore BASIC представляли собой множество опасных ловушек для программиста. Поскольку большинство этих проблем были унаследованы от Microsoft BASIC, практически каждый домашний компьютер BASIC той эпохи страдал от подобных недостатков. Каждой строке программы Microsoft BASIC присваивался номер строки программистом. Обычно номера увеличивали на определенное значение (5, 10 или 100), чтобы упростить вставку строк во время редактирования или отладки программы, но плохое планирование означало, что вставка больших разделов в программу часто требовала реструктуризации всего кода. Распространенной техникой было начинать программу с небольшого номера строки с таблицей переходов, а тело программы структурировалось на разделы, начинающиеся с определенного номера строки, например 1000, 2000 и так далее. Если нужно было добавить большой раздел, ему можно было просто присвоить следующий доступный номер главной строки и вставить его в таблицу переходов. Кроме того, все переменные рассматриваются как глобальные переменные. Четко определенные циклы, отличные от конструкции FOR NEXT, сложно создавать, что часто заставляло программиста полагаться на команду (это было исправлено позже в BASIC 3.5 с добавлением команд и). Для выполнения определенных задач часто требовалось создавать переменные-флаги. Более поздние версии BASIC на Commodore и других платформах включали команды и, а также команду автоматической нумерации строк AUTO, которая автоматически выбирала и вставляла номера строк в соответствии с выбранным шагом. Ранние версии BASIC от Commodore также не имели команд отладки, что затрудняло обнаружение ошибок и неиспользуемых переменных. Структуры, стандартная часть Z80 Microsoft BASIC, были добавлены в BASIC 3.5 после того, как они были недоступны в более ранних версиях Commodore BASIC.
A disk magazine for the C64, Loadstar, was a venue for hobbyist programmers, who shared collections of proto commands for BASIC, called with the command. From a modern programming point of view, the earlier versions of Commodore BASIC presented a host of bad programming traps for the programmer. As most of these issues derived from Microsoft BASIC, virtually every home computer BASIC of the era suffered from similar deficiencies. Every line of a Microsoft BASIC program was assigned a line number by the programmer. It was common practice to increment numbers by some value (5, 10 or 100) to make inserting lines during program editing or debugging easier, but bad planning meant that inserting large sections into a program often required restructuring the entire code. A common technique was to start a program at some low line number with an jump table, with the body of the program structured into sections starting at a designated line number like 1000, 2000, and so on. If a large section needed to be added, it could just be assigned the next available major line number and inserted to the jump table. In addition, all variables are treated as global variables. Clearly defined loops beyond the FOR NEXT construct are hard to create, often causing the programmer to rely on the command (this was later rectified in BASIC 3.5 with the addition of the , and commands). Flag variables often needed to be created to perform certain tasks. Later BASIC versions on Commodore and other platforms included a and command, as well as an AUTO line numbering command that would automatically select and insert line numbers according to a selected increment. Earlier BASICs from Commodore also lack debugging commands, meaning that bugs and unused variables are hard to trap. structures, a standard part of Z80 Microsoft BASICs, were added to BASIC 3.5 after being unavailable in earlier versions of 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, которая по умолчанию работала с кассетой. Другим недостатком BASIC 2.0 в Commodore 64 была отсутствие команды DIRECTORY для отображения содержимого диска без очистки основной памяти. На Commodore 64 просмотр файлов на диске осуществлялся путем загрузки "программы", которая при выводе на экран отображала каталог в виде псевдо-BASIC программы, где размер блока файла служил номером строки. Это приводило к перезаписи текущей программы. Дополнения, такие как DOS Wedge, решали эту проблему, выводя список каталогов непосредственно в видеопамять.