Коммодор БЕЙСИК
Разработано | Майкрософт |
---|---|
Разработчик | Майкрософт |
Впервые появился | 1977 год |
Стабильная версия | Версия 7.0 / 1985 |
Предварительный выпуск | Версия 10.0 / 1991 |
Язык реализации | Сборка ( 6502 ) |
Платформа | ПЭТ для Commodore 128 |
Commodore BASIC , также известный как PET BASIC или CBM-BASIC , — это диалект языка BASIC, программирования используемый в International Commodore линейке 8-битных домашних компьютеров , простирающейся от PET (1977 г.) до Commodore 128 (1985 г.).
Ядро основано на 6502 Microsoft BASIC и поэтому имеет много общих характеристик с другими 6502 BASIC того времени, такими как Applesoft BASIC . Commodore лицензировала BASIC у Microsoft в 1977 году по принципу «оплата один раз, без гонораров » после того, как Джек Трэмиел отклонил Билла Гейтса предложение о гонораре в размере 3 долларов за единицу, заявив: «Я уже женат», и будет платить не более 25 000 долларов. за бессрочную лицензию. [1]
Исходная версия 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 и доработала его для всех остальных 8-битных домашних компьютеров. Только в Commodore 128 (с версией V7.0) появилось уведомление об авторских правах Microsoft. Однако Microsoft встроила пасхальное яйцо в версию 2 или «обновление» Commodore Basic, доказавшее ее происхождение: набрав (неизвестную) команду WAIT 6502, 1
приведет к Microsoft!
появляющийся на экране. (Пасхалка была хорошо запутана — сообщение не появилось ни при какой дизассемблере интерпретатора.) [2]
Популярный Commodore 64 поставлялся с BASIC v2.0 в ПЗУ, хотя компьютер был выпущен после серии PET/CBM с версией 4.0, поскольку 64 был задуман как домашний компьютер, а серия PET/CBM была ориентирована на бизнес и образование. использовать там, где предполагалось, что их встроенный язык программирования будет использоваться более интенсивно. Это позволило сэкономить производственные затраты, поскольку V2 помещался в ПЗУ меньшего размера.
Технические детали
[ редактировать ]![]() | В этом разделе есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Редактирование программы
[ редактировать ]Удобной особенностью в ПЗУ резидентного интерпретатора BASIC и KERNAL компании Commodore был полноэкранный редактор . [3] [4] Хотя на клавиатурах Commodore есть только две клавиши курсора , направление которых менялось на противоположное при удерживании клавиши Shift, редактор экрана позволял пользователям вводить прямые команды или вводить и редактировать строки программы из любого места экрана. Если перед строкой стоял номер строки, она маркировалась и сохранялась в памяти программы. Строки, не начинающиеся с цифры, выполнялись нажатием кнопки RETURN клавишу всякий раз, когда курсор оказывался на строке. Это ознаменовало собой значительное обновление интерфейсов ввода программ по сравнению с другими обычными BASICами для домашних компьютеров того времени, в которых обычно использовались строковые редакторы , вызываемые отдельной программой. EDIT
команда или «курсор копирования», который обрезает строку в позиции курсора.
Он также имел возможность сохранять именованные файлы на любом устройстве, включая кассету — популярное устройство хранения данных во времена PET, которое использовалось на протяжении всего срока службы 8-битных Commodores в качестве недорогой формы запоминающего устройства большой емкости. . Большинство систем поддерживали имена файлов только на дискете , что затрудняло сохранение нескольких файлов на других устройствах. Пользователь одной из этих других систем должен был отметить отображение счетчика рекордера в месте расположения файла, но это было неточно и подвержено ошибкам. В PET (и BASIC 2.0) файлы с кассет можно было запрашивать по имени. Устройство будет искать имя файла, последовательно считывая данные, игнорируя любые несовпадающие имена файлов. Файловая система также поддерживалась мощной структурой записей , которую можно было загружать или сохранять в файлы. Данные на кассете Commodore записывались в цифровом формате, а не менее дорогими (и менее надежными) аналоговыми методами, используемыми другими производителями. Поэтому требовался специализированный набор данных , а не стандартный магнитофон. Были доступны адаптеры, в которых использовался аналого-цифровой преобразователь, позволяющий использовать стандартный рекордер, но он стоит лишь немного дешевле, чем Datasette.
The Команда LOAD может использоваться с необязательным параметром ,1 , который загрузит программу по адресу памяти, содержащемуся в первых двух байтах файла (эти байты отбрасываются и не сохраняются в памяти). Если ,1 параметр не используется, программа загружается в начало программной области 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, или четыре строки на дисплее VIC-20 с 22 столбцами). Это позволило немного сэкономить на хранении необходимых в противном случае дополнительных строк программы, но не более того. Все команды BASIC были токенизированы и занимали в памяти 1 байт (или два, в случае нескольких команд BASIC 7 или BASIC 10), независимо от того, каким способом они были введены. Такие длинные строки было неудобно редактировать. LIST
Команда отображала все ключевое слово команды, расширяя строку программы за пределы 2 или 4 строк экрана, которые можно было ввести в память программы.
Производительность
[ редактировать ]Как и оригинальный Microsoft BASIC интерпретатор , Commodore BASIC работает медленнее, чем собственный машинный код . Результаты испытаний показали, что копирование 16 килобайт из ПЗУ в ОЗУ занимает менее секунды в машинном коде по сравнению с более чем минутой в BASIC. [ нужна ссылка ] Чтобы работать быстрее, чем интерпретатор, программисты начали использовать различные методы ускорения выполнения. Один из них заключался в том, чтобы хранить часто используемые значения с плавающей запятой в переменных, а не использовать литеральные значения, поскольку интерпретация имени переменной была быстрее, чем интерпретация буквального числа. Поскольку плавающая запятая является типом по умолчанию для всех команд, в качестве аргументов быстрее использовать числа с плавающей запятой, а не целые числа. Когда скорость была важна, некоторые программисты преобразовывали разделы программ BASIC в язык ассемблера 6502 или 6510 , который загружался отдельно из файла или помещался в память из операторов DATA в конце программы BASIC и выполнялся из BASIC с использованием SYS
команду либо из прямого режима , либо из самой программы . Когда скорость выполнения машинного языка была слишком велика, например, в игре или при ожидании пользовательского ввода, программисты могли опросить , читая выбранные ячейки памяти (например, $C6
[5] для 64 или $D0
[6] для 128, обозначающего размер очереди клавиатуры), чтобы задержать или остановить выполнение.
Уникальной особенностью 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 отображает ?СТРОКА СЛИШКОМ ДЛИННАЯ ошибка, если пользователь вводит строку программы длиной более 160 символов. Более ранние версии не выдавали ошибок и просто отображали приглашение READY двумя строками ниже, если длина строки превышена. Номер строки учитывается по количеству символов в строке программы, поэтому пятизначный номер строки приведет к тому, что будет разрешено на четыре символа меньше, чем однозначное число.
Порядок выполнения строк Commodore BASIC не определялся нумерацией строк; вместо этого он следовал порядку, в котором строки были связаны в памяти. [7] Строки программы хранились в памяти в виде односвязного списка с указателем (содержащим адрес начала следующей строки программы), номером строки, а затем токенизированным кодом строки. Во время ввода программы BASIC постоянно менял порядок строк программы в памяти, чтобы номера строк и указатели располагались в порядке возрастания. Однако после входа в программу ручное изменение номеров строк и указателей с помощью команд POKE может привести к неупорядоченному выполнению или даже дать каждой строке одинаковый номер строки. На заре, когда BASIC использовался в коммерческих целях, это был метод защиты программного обеспечения , предотвращающий случайную модификацию программы.
Номера строк могут находиться в диапазоне от 0 до 65520, и для их хранения требуется пять байтов, независимо от того, сколько цифр содержится в номере строки, хотя выполнение тем быстрее, чем меньше цифр. Размещение нескольких операторов в строке будет использовать меньше памяти и выполняться быстрее.
ПЕРЕЙТИ К и Операторы GOSUB будут выполнять поиск вниз от текущей строки, чтобы найти номер строки, если выполняется переход вперед, в случае перехода назад они возвращаются к началу программы, чтобы начать поиск. Это замедлит работу больших программ, поэтому предпочтительно размещать часто используемые подпрограммы в начале программы.
Имена переменных имеют значение только до двух символов; таким образом, имена переменных VARIABLE1
, VARIABLE2
, и VA
все относятся к одной и той же переменной.
Commodore BASIC также поддерживает побитовые операторы — И, ИЛИ и 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 преобразует ее обратно в число с плавающей запятой, замедляя выполнение программы и тратя память, поскольку для хранения каждого знака процента требуется один дополнительный байт (поскольку это также относится к целочисленным массивам, программисту следует избегать их использования, если только это не очень важно). используются большие массивы, которые превысили бы доступную память, если бы они хранились в формате с плавающей запятой). Также невозможно ПОК или Ячейки памяти PEEK выше 32767 с адресом, определяемым как целое число со знаком.
Вместо числа 0 можно использовать точку (.) (таким образом 10 A=.
вместо 10 A=0
или 10 FOR A=. TO 100
вместо 10 FOR A=0 to 100
), это будет выполняться немного быстрее.
The Оператор 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(1) не относятся к одной и той же переменной. Размер массива строк просто относится к количеству строк, хранящихся в массиве, а не к размеру каждого элемента, который выделяется динамически. В отличие от некоторых других реализаций Microsoft BASIC, Commodore BASIC не требует резервирования строкового пространства в начале программы.
В отличие от других 8-битных машин, таких как Apple II, все машины Commodore имеют встроенные часы, которые инициализируются до 0 при включении питания и обновляются с каждым тактом таймера PIA/VIA/TED/CIA, то есть 60 раз в секунду. . В BASIC ему присвоены две системные переменные: ТИ и TI$ , оба из которых содержат текущее время. TI доступен только для чтения и не может быть изменен; это приведет к появлению сообщения о синтаксической ошибке. TI$ можно использовать для установки времени с помощью строки из шести цифр (при использовании строки, отличной от шести цифр, возникает ошибка). Часы не являются очень надежным методом измерения времени, поскольку они останавливаются всякий раз, когда отключаются прерывания (выполняемые некоторыми процедурами ядра), а доступ к порту IEC (или порту IEEE на PET) замедлит обновление часов на несколько тактов.
The Функция 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 также имеют ее.
The Функция FRE в BASIC 2.0 страдает еще одним техническим недостатком, заключающимся в том, что она не может обрабатывать числа со знаком, превышающие 32768, поэтому, если функция вызывается на C64 (память BASIC 38 КБ), будет отображаться отрицательный объем свободной памяти BASIC (добавление 65535 к сообщенный номер получит правильный объем свободной памяти). PET и VIC-20 никогда не имели более 32 КБ общей памяти, доступной для BASIC, поэтому это ограничение не стало очевидным до тех пор, пока не был разработан C64. Функция FRE в BASIC 3.5 и 7.0 исправила эту проблему и FRE в BASIC 7.0 также был «разделен» на две функции: одна для отображения свободной текстовой памяти программы BASIC, а другая для отображения свободной памяти переменных.
Альтернативы
[ редактировать ]
Многие расширения BASIC были выпущены для Commodore 64 из-за относительно ограниченных возможностей родного BASIC 2.0. Одним из самых популярных расширений было DOS Wedge , которое было включено в тестовый/демонстрационный диск Commodore 1541. Это расширение BASIC размером 1 КБ добавило ряд команд, связанных с диском, включая возможность чтения каталога диска без разрушения программы в памяти. Его функции впоследствии были включены в различные сторонние расширения, такие как популярный картридж Epyx FastLoad . В другие расширения BASIC добавлены дополнительные ключевые слова, упрощающие кодирование спрайтов, звука и графики высокого разрешения, например BASIC Саймонса (1983 г.) и Vision BASIC (2022 г.).
Хотя отсутствие в BASIC 2.0 звуковых и графических функций расстраивало многих пользователей, некоторые критики [ ВОЗ? ] утверждал, что в конечном итоге это было выгодно, поскольку заставляло пользователя изучать машинный язык.
Ограничения BASIC 2.0 на C64 привели к использованию встроенного в ПЗУ машинного языка BASIC. Чтобы загрузить файл в назначенную ячейку памяти, имя файла, диск и номер устройства будут считаны вызовом: SYS57812"filename",8
; [8] местоположение будет указано в регистрах X и Y: POKE780,0:POKE781,0:POKE782,192
; [9] и процедура загрузки будет называться: SYS65493
. [10]
Дисковый журнал для C64, Loadstar , был местом встречи программистов-любителей, которые делились коллекциями протокоманд для BASIC, называемых SYS address + offset
команда. [ нужна ссылка ]
С точки зрения современного программирования, более ранние версии Commodore BASIC представляли собой множество ловушек для программиста. Поскольку большинство этих проблем возникло из-за Microsoft BASIC , практически каждый домашний компьютер BASIC той эпохи страдал аналогичными недостатками. [11] Каждой строке программы Microsoft BASIC присвоил номер строки программист . Обычной практикой было увеличение чисел на определенное значение (5, 10 или 100), чтобы упростить вставку строк во время редактирования или отладки программы, но плохое планирование означало, что вставка больших разделов в программу часто требовала реструктуризации всего кода. Распространенным методом был запуск программы с небольшого номера строки с помощью ON...GOSUB Таблица переходов , в которой тело программы разбито на разделы, начинающиеся с определенного номера строки, например 1000, 2000 и т. д. Если необходимо добавить большой раздел, ему можно просто присвоить следующий доступный основной номер строки и вставить его в таблицу переходов.
Кроме того, все переменные рассматриваются как глобальные переменные. Четко определенные циклы, выходящие за рамки конструкции FOR...NEXT, создать сложно, поэтому программисту часто приходится полагаться на Команда GOTO (позже это было исправлено в BASIC 3.5 с добавлением команды DO, LOOP, WHILE, UNTIL и команды ВЫХОД ). Переменные флагов часто приходилось создавать для выполнения определенных задач.
Более поздние версии BASIC для Commodore и других платформ включали УДАЛИТЬ и Команда RENUMBER , а также команда нумерации строк AUTO, которая автоматически выбирает и вставляет номера строк в соответствии с выбранным шагом. В более ранних версиях BASIC от Commodore также отсутствуют команды отладки, а это означает, что ошибки и неиспользуемые переменные трудно обнаружить. Структуры IF...THEN...ELSE , стандартная часть Z80 Microsoft BASIC, были добавлены в BASIC 3.5 после того, как они были недоступны в более ранних версиях Commodore BASIC.
Использовать в качестве пользовательского интерфейса
[ редактировать ]Как и другие домашние компьютеры , машины Commodore загружались непосредственно в интерпретатор BASIC. Файлы BASIC и команды программирования можно было вводить в прямом режиме для загрузки и выполнения программного обеспечения. Если выполнение программы было остановлено с помощью клавиши RUN/STOP, значения переменных будут сохранены в оперативной памяти и могут быть распечатаны для отладки. Модель 128 даже выделила свой второй банк размером 64 КБ под переменное хранилище, позволяя значениям сохраняться до тех пор, пока они не будут сохранены. NEW
или RUN
была отдана команда. Это, наряду с расширенным экранным редактором, включенным в Commodore BASIC, придало среде программирования ощущение, подобное REPL ; программисты могли вставлять и редактировать строки программы в любом месте экрана, создавая программу в интерактивном режиме. [12] В этом отличие от бизнес-ориентированных операционных систем того времени, таких как CP/M или MS-DOS , которые обычно загружались с интерфейсом командной строки . Если на этих платформах требовался язык программирования, его приходилось загружать отдельно.
Хотя некоторые версии Commodore BASIC включали специфичные для диска DLOAD
и DSAVE
команды, в версии, встроенной в Commodore 64, их не было, и пользователю требовалось указать номер устройства дисковода (обычно 8 или 9) в соответствии со стандартом. LOAD
команда, которая в противном случае по умолчанию использовала ленту. Еще одним упущением в BASIC 2.0 для Commodore 64 был DIRECTORY
команда для отображения содержимого диска без очистки оперативной памяти. В версии 64 просмотр файлов на диске был реализован как загрузка «программы», которая при указании отображала каталог как псевдо-BASIC-программу с размером блока файла в качестве номера строки. Это привело к перезаписи загруженной в данный момент программы. Такие дополнения, как DOS Wedge, преодолели эту проблему, отображая список каталогов непосредственно в памяти экрана.
Версии и возможности
[ редактировать ]Список версий CBM BASIC в хронологическом порядке с последовательно добавляемыми функциями:
Выпущенные версии
[ редактировать ]- V1.0: PET 2001 с клавиатурой Chiclet и встроенным набором данных (оригинальный PET)
- массивы ограничены 256 элементами
- Команда PEEK явно отключена в папках BASIC ROM выше $C000.
- V2.0 (первая версия): PET 2001 с полноприводной клавиатурой и обновленными ПЗУ.
- V4.0: серия ПЭТ/МУП 4000/8000 (и поздняя версия ПЭТ 2001 г.)
- дисковые операции : ЗАГРУЗИТЬ, DSAVE, КОПИРОВАТЬ, ПОцарапать и т. д. (всего 15)
- переменные канала ошибок диска: ДС,ДС$
- значительно улучшена производительность сборки мусора [13]
- V2.0 (второй выпуск после 4.0): VIC-20 ; С64
- Версия 2.2 C64GS (1990 г.)
- V4+: серия CBM-II (также известная как диапазон B, P)
- управление памятью: БАНК
- дополнительные дисковые операции : ЗАГРУЗКА , BSAVE , DCLEAR
- форматированная печать: ПЕЧАТЬ С ИСПОЛЬЗОВАНИЕМ PUDEF
- перехват ошибок: УТИЛИЗИРОВАТЬ
- альтернативное ветвление: ЕЩЕ
- динамическая обработка ошибок: ЛОВУШКА,ВОЗОБНОВИТЬ,ОШИБКА$()
- гибкий ДАННЫЕ читать:
RESTORE [line number]
- функция поиска строки: ИНСТР
- V3.5: C16/116 , Плюс/4
- звуковые и графические команды
- ввод джойстика : РАДОСТЬ
- десятичное ↔ шестнадцатеричное преобразование: ДЕК(),ШЕСТН$()
- структурированный цикл: ДЕЛАТЬ, ПЕТЛЯ, ПОКА, ПОКА, ВЫХОД
- Назначение функциональных клавиш: KEY (также прямой режим)
- ввод/редактирование программы: АВТО, УДАЛЕНИЕ, ПЕРЕНУРОВАНИЕ
- отладка (трассировка): ТРОН , ТРофф
- Команда входа в МЛМ : МОНИТОР
- C(1)16, Пасхальное яйцо Plus/4 – войти SYS 52650
- Версия 7.0: C128
- больше звуковых и графических команд, включая спрайтов обработку
- встроенный редактор спрайтов: СПРДЕФ
- блоки с несколькими операторами для IF THEN ELSE структуры: НАЧАЛО, ИЗГИБАТЬ
- весло , вход световой ручки : МОЖЕТ, РУЧКА
- эксклюзивный или функциональный: БЕСПЛАТНО
- получить адрес переменной: УКАЗАТЕЛЬ
- текстовый режим окна: ОКНО
- контролируемая задержка времени: СПАТЬ
- управление памятью: ЗАМЕНА, ПРИБЫТИЕ, ТАЙНИК, БЕСПЛАТНО(1)
- 128 использовал переключение банка для хранения программного кода отдельно от переменных. Значения переменных сохранялись бы при выполнении программы, если бы программа запускалась с помощью команды GOTO.
- дополнительные дисковые операции : БОТИНОК,ДВЕРИФ.
- Регулировка скорости процессора: БЫСТРЫЙ,МЕДЛЕННЫЙ (2 против 1 МГц)
- войдите в режим C64: ГО64
- без документов, работает: RREG (чтение регистров ЦП после СИС )
- нереализованные команды: ВЫКЛ, ВЫХОД
- C128 Пасхальное яйцо – вход SYS 32800,123,45,6
Неизданные версии
[ редактировать ]- V3.6: Commodore LCD (неизданный прототип). Практически идентичен V7.0, со следующими отличиями: [14]
- ОБЪЕМ вместо ОБЪЕМ
- ВЫХОД вместо ПОКИДАТЬ
- Команды FAST, SLOW отсутствуют.
- Дополнительная команда: Всплывающие окна
- V10: Commodore 65 (неизданный прототип)
- графические/видео команды: ПАЛИТРА,ГЕНЛОК
- мыши : ввод МЫШЬ, RМЫШЬ
- текстовый файл ( SEQ ) утилита: ТИП
- редактирование программы: НАЙТИ, ИЗМЕНИТЬ
- управление памятью: ДМА, БЕСПЛАТНО(2)
- нереализованные команды: ПОКРАСКА, НАЙТИ, МАСШТАБ, ШИРИНА, УСТАНОВИТЬ, ВИДОВОЕ ОБРАЗЕ, ВСТАВИТЬ, ВЫРЕЗАТЬ
Известные пакеты расширений
[ редактировать ]- Super Expander (VIC-20; поставляется на картридже ПЗУ ) (Commodore)
- Super Expander 64 (C64; картридж) (Commodore)
- Simons' BASIC (C64; картридж) (Commodore)
- Графика BASIC (C64; дискета) ( Hesware )
- BASIC 8 (C128; дискета и дополнительный внутренний чип ПЗУ) ( Walrusoft )
- Vision BASIC (C64; дискета) (Деннис Осборн)
Ссылки
[ редактировать ]- ^ Заявлено Джеком Трэмиэлом на праздновании 25-летия Commodore 64 в Музее истории компьютеров 10 декабря 2007 г. [1] Архивировано 11 декабря 2008 г. в Wayback Machine [2] Архивировано 3 октября 2017 г. в Wayback Machine [3] .
- ^ «Личные пасхальные яйца Билла Гейтса на 8-битном BASIC — pagetable.com» . www.pagetable.com . Проверено 8 августа 2018 г.
- ^ «Клавиатура и редактор экрана» . Июль 1985 года.
- ^ «Байт, июль 1983 г.» (PDF) . Архивировано из оригинала (PDF) 24 августа 2017 г. Проверено 1 мая 2015 г.
- ^ Лимон, Шелдон (1987). Сопоставление Commodore 64 и 64C . ВЫЧИСЛИТЕ! Публикации. п. 37. ИСБН 9780874550825 . Проверено 25 марта 2018 г.
- ^ Каупер, Оттис Р. (1986). Картирование Коммодора 128 . ВЫЧИСЛИТЕ! Публикации. п. 66 . ISBN 9780874550603 .
- ^ «Сопоставление C64» . www.unusedino.de . Проверено 21 августа 2023 г.
- ^ Лимон, Шелдон (1987). Сопоставление Commodore 64 и 64C . ВЫЧИСЛИТЕ! Публикации. п. 209. ИСБН 9780874550825 . Проверено 25 марта 2018 г.
- ^ Лимон, Шелдон (1987). Сопоставление Commodore 64 и 64C . ВЫЧИСЛИТЕ! Публикации. п. 71. ИСБН 9780874550825 . Проверено 25 марта 2018 г.
- ^ Лимон, Шелдон (1987). Сопоставление Commodore 64 и 64C . ВЫЧИСЛИТЕ! Публикации. п. 231. ИСБН 9780874550825 . Проверено 25 марта 2018 г.
- ^ «Первая книга Comput! об Atari» . www.atariarchives.org . Проверено 21 августа 2023 г.
- ^ Скримшоу, Северная Каролина (11 ноября 2013 г.). Введение в Commodore 64: приключения в программировании . Биркхойзер. ISBN 9781489967879 .
- ↑ Перейти обратно: Перейти обратно: а б «Карта памяти BASIC 4.0» . zimmers.net . Проверено 21 августа 2023 г.
- ^ «Майк Набережный — Прошивка ЖК-дисплея Commodore» . mikenaberezny.com . Проверено 8 августа 2018 г.
Источники
[ редактировать ]- Хронология базовой версии Commodore/Microsoft
- Персональные пасхальные яйца Билла Гейтса на 8-битном языке BASIC , pagetable.com
- БЕЙСИК 2.0
- Ангерхаузен и др. (1983). Анатомия Commodore 64 (полную информацию см. в статье C64 ).
- БАЗОВЫЙ 3.5
- Джеррард, Питер; Бергин, Кевин (1985). Полная разборка ПЗУ COMMODORE 16 . Джеральд Дакворт и Ко. Лтд. ISBN 0-7156-2004-5 .
- БЕЙСИК 7.0
- Джарвис, Деннис; Спрингер, Джим Д. (1987). Внутреннее устройство BASIC 7.0 . Гранд-Рапидс, Мичиган: Abacus Software, Inc. ISBN 0-916439-71-2 .
- БЕЙСИК 10.0