Кіріспе
BASIC бағдарламалау тілінің диалектісі
Commodore BASIC, сондай-ақ PET BASIC немесе CBM BASIC деп те аталады, Commodore International компаниясының PET (1977) моделінен бастап Commodore 128 (1985) дейінгі 8-биттік үй компьютерлерінде қолданылған BASIC бағдарламалау тілінің диалектісі болып табылады. Оның негізі 6502 Microsoft BASIC-ке негізделген, сондықтан ол сол кездегі басқа 6502 BASIC түрлерімен, мысалы Applesoft BASIC-пен көптеген ортақ белгілеріне ие. Commodore 1977 жылы Microsoft-тан BASIC лицензиясын "бір рет төле, роялти жоқ" шартымен алды, себебі Джек Трамиел Билл Гейтстің бірлік бағасын ұсынғаннан бас тартты, "Мен бұрыннан үйленгенмін" деп мәлімдеді және мәңгілік лицензия үшін бір рет төлеуге дайын болды. PET-тің бастапқы нұсқасы Microsoft-тың бастапқы нұсқасына өте ұқсас болды, тек аз ғана өзгерістер енгізілді. C64-тегі BASIC 2.0 да ұқсас болды және C128 (C64 режимінде) және басқа модельдерде де қолданылды. Кейінгі PET модельдерінде BASIC 4.0 нұсқасы болды, ол түпнұсқаға ұқсас болғанмен, дискетамен жұмыс істеуге арналған бірнеше командалар қосылды. BASIC 3.5 алғаш рет C16 және Plus/4 компьютерлерінде графика мен дыбыс қолдауын қамтамасыз ететін бірқатар командаларды қосып, едәуір өзгерістерге ұшырады. BASIC 7.0 Commodore 128 жиынтығына енгізілді және Plus/4 BASIC 3.5 құрылымдық бағдарламалау командаларын, сондай-ақ машинаның жаңа мүмкіндіктерін толық пайдалануға арналған кілт сөздерді қамтыды. Сприт редакторы және машина тілі мониторы қосылды. Соңғы нұсқа, BASIC 10.0, шығарылмаған Commodore 65 құрамына кірді.
Тарих
Commodore біржолғы төлемге алынған BASIC-тің бастапқы кодын алды және оны басқа барлық 8 биттік үй компьютерлері үшін ішкі түрде одан әрі дамытты. Microsoft авторлық құқығы туралы ескерту тек Commodore 128 (V7.0 нұсқасымен) компьютерінде ғана көрсетілді. Дегенмен, Microsoft Commodore Basic 2-ші нұсқасына немесе "жаңартуына" бір құпия мүмкіндік (easter egg) енгізді, ол оның шығу тегін растады: (сирек қолданылатын) WAIT 6502, 1 командасын теру нәтижесінде экранда Microsoft! деген жазу пайда болды. (Бұл құпия мүмкіндік жақсы жасырылған – хабар интерпретатордың ешбір дисасемблиясында көрінбеді.) Көп танымал Commodore 64 компьютері BASIC v2.0 нұсқасымен ROM-да келді, тіпті компьютер 4.0 нұсқасы бар PET/CBM сериясынан кейін шығарылса да, себебі 64 үй компьютері ретінде жоспарланған, ал PET/CBM сериясы бизнес және білім беру салаларында қолдануға арналған, онда олардың кіріктірілген бағдарламалау тілі жиі қолданылатыны болжамдалды. Бұл өндіріс шығындарын азайтты, өйткені V2 кішкентай ROM-ға сыйып қана қоймай, арзанға түсті.
Бағдарламаны өңдеу
Commodore ROM-ның BASIC интерпретаторы мен KERNAL-дың ыңғайлы ерекшелігі – толық экрандық редактор болды. Commodore пернетақталарында тек екі курсор пернесі болғанмен, олар Shift пернесін ұстағанда бағытын өзгертетін, экран редакторы пайдаланушыларға тікелей командаларды енгізуге немесе экранның кез келген жерінен бағдарлама жолдарын енгізуге және өңдеуге мүмкіндік берді. Егер жолдың басында жол нөмірі тұрса, ол токенделіп, бағдарлама жадында сақталады. Санмен басталмайтын жолдар, курсор сол жолда тұрғанда перне басу арқылы орындалады. Бұл сол кездегі басқа үй компьютерлерінің BASIC-терімен салыстырғанда бағдарламаға кіру интерфейсінде маңызды жаңару болды, себебі олар әдетте жеке EDIT командасымен шақырылатын жол редакторларын немесе курсор орнында жолды қысқартатын «көшірме курсорды» пайдаланды. Сонымен қатар, ол атаулы файлдарды кез келген құрылғыға, соның ішінде кассетаға сақтау мүмкіндігін ұсынды – PET дәуірінде танымал сақтау құрылғысы және 8 биттік Commodore компьютерлерінің өмір бойында қолданылып келген арзан массалық сақтау құралы. Көптеген жүйелер дискетадағы файл атауларын ғана қолдады, бұл басқа құрылғыларда бірнеше файлды сақтауды қиындатты. Басқа жүйенің пайдаланушысы файл орналасқан жердегі магнитофонның сандық көрсеткішін жазып алуы керек еді, бірақ бұл дәл болмады және қатеге бейім болды. PET (және BASIC 2.0) көмегімен кассетадан файлдарды атау бойынша сұрауға болады. Құрылғы файл атауын жүйелі түрде оқып, сәйкес келмейтін файл атауларын елемейтін түрде іздейді. Файл жүйесі файлдарға жүктеуге немесе сақтауға болатын қуатты жазба құрылымымен де қамтамасыз етілді. Commodore кассеталарындағы деректер басқа өндірушілер қолданған аналогты әдістердің орнына цифрлық түрде жазылды. Сондықтан стандартты магнитофонға емес, арнайы Datasette қажет болды. Стандартты магнитофонды пайдалану үшін аналогты цифрлық түрлендіргішті қолданатын адаптерлер болды, бірақ олар Datasette-тен сәл ғана арзан болды. Команданы файлдың алғашқы екі байтындағы жад адресіне бағдарламаны жүктейтін (бұл байттар жадтан шығарылады және сақталмайды) параметрмен бірге қолдануға болады. Егер параметр қолданылмаса, бағдарлама BASIC бағдарламалық аймағының басында жүктеледі, ол әртүрлі машиналарда әртүрлі болады. Кейбір Commodore BASIC нұсқалары BLOAD және BSAVE командаларын ұсынды, олар Applesoft BASIC-тегі әріптестеріне ұқсас жұмыс істеді, белгіленген жад орындарынан биттік суреттерді жүктейді немесе сақтайды. PET жылжытылатын бағдарламаларды қолдамайды және команда әрқашан бағдарлама файлындағы алғашқы екі байтқа жүктеледі. Бұл басқа Commodore машиналарында сақталған BASIC бағдарламаларын жүктеуге тырысқанда проблема туды, себебі олар PET BASIC бағдарламасының күтілетін орнынан жоғарырақ мекенжайда жүктеледі. Бағдарламаларды дұрыс жерге «ауыстыру» үшін айналма жолдар болды. Егер бағдарлама CBM II машинасына сақталса, оны PET-ке жүктеудің жалғыз жолы алғашқы екі байтты дискілік сектор редакторымен өзгерту болды, себебі CBM II сериясының BASIC бағдарламалық аймағы $0 мекенжайында орналасқан, бұл PET-тің нөлдік бетке жүктеуге тырысуына және тоқтауына себеп болар еді. Commodore BASIC кілт сөздерін алдымен ауыспалы емес пернені, содан кейін келесі әріптің ауыспалы пернені басу арқылы қысқартуға болады. Бұл жоғары битті орнатады, содан кейін интерпретатор оқуды тоқтатып, сөйлемді іздеу кестесіне сәйкес талдайды. Бұл сөйлемнің жоғары бит орнатылған жеріне дейінгі бөлігінің команданы толық жазудың орнына қабылданғанын білдіреді. Алайда, барлық BASIC кілт сөздері жадыда бір байттық белгілер ретінде сақталғандықтан, бұл оптимизация емес, нұсқаулық енгізуге ыңғайлы болды. Әдепкі тек үлкен әріптер жиынтығында ауысқан таңбалар графикалық символ ретінде көрінеді; мысалы, GOTO командасын G{Shift O} деп қысқартуға болады (ол экранда GΓ сияқты көрінеді). Мұндай командалардың көпшілігі екі әріптен тұрады, бірақ кейде одан да ұзын болады. Мұндай жағдайларда екіұштылық туындайды, сондықтан команданың ауыспалы емес әріптері қажет болады, мысалы GOSUB үшін GO{Shift S} (GO♥) қажет. Кейбір командалардың қысқартылған түрі жоқ, себебі олар қысқа немесе басқа командалармен шатасқан. Мысалы, 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 командаларының бірнешесі үшін 2 байт) алады, олар қалай енгізілгеніне қарамастан. Мұндай ұзын жолдарды өңдеу қиын. LIST командасы бағдарлама жадына енгізілген 2 немесе 4 экрандық жолдан асып түсетін команда кілт сөзінің барлық бөлігін көрсетті.
Өнер көрсету
Microsoft BASIC интерпретаторлары сияқты, Commodore BASIC те машиналық кодтан баяу жұмыс істейді. Тест нәтижелері 16 килобайтты ROM-нан RAM-ға көшіру машиналық кодта бір секундтан кем уақыт алады, ал BASIC-те бір минуттан асады. Интерпретатордан жылдам орындау үшін бағдарламашылар түрлі техникаларды қолдана бастады. Бірі – жиі қолданылатын қалқыма нүктелік мәндерді әртүрлі сандарға аударудың орнына айнымалыларға сақтау. Барлық командалар үшін қалқыма нүкте әдепкі тип болғандықтан, аргумент ретінде бүтін сандар емес, қалқыма нүкте сандарын пайдалану жылдам. Жылдамдық маңызды болғанда, кейбір бағдарламашылар BASIC бағдарламаларының бөлімдерін 6502 немесе 6510 тіліне аударды, олар файлдан бөлек жүктелді немесе BASIC бағдарламасының соңындағы DATA операторларынан жадыға POKEd енгізілді, содан кейін SYS командасын пайдаланып BASIC-тен орындалды, тікелей режимнен немесе бағдарламаның өзінен. Машиналық кодтың орындалу жылдамдығы тым жоғары болған кезде, мысалы, ойын кезінде немесе пайдаланушының кірісін күту кезінде, бағдарламашылар орындалуды кешіктіру немесе тоқтату үшін таңдалған жад орындарын (мысалы, 64 немесе 128 үшін, пернетақта кезекшесінің мөлшерін көрсететін) оқып, сұрау салуға болады. Commodore BASIC-тің ерекшелігі – экранды тазалау немесе курсорды бағдарлама ішінде орналастыру сияқты тапсырмаларды орындау үшін басқару кодтарын пайдалану; оларды X басқару кодына сәйкес келетін команданы беру арқылы (мысалы, экранды тазалау үшін басқару коды) немесе цитаталар арасында сұрақталған пернелерді басып, BASIC-ті басқару кодының визуалды бейнесін (бұл жағдайда кері жүрек) бағдарлама орындалғанда әрекет етуге итермелейді (басқаша айтқанда, басқару кодтарын тікелей басып шығару жадыны аз пайдаланады және функцияларды шақырудан жылдам орындалады). Бұл экранды тазалау немесе курсорды жылжыту үшін арнайы командалары бар BASIC-тің басқа нұсқаларымен салыстырылады. BASIC 3.5 және одан жоғары нұсқаларында экранды тазалау және курсорды жылжыту үшін арнайы командалар бар. Commodore BASIC-тегі бағдарлама жолдарына ешқандай жерде бос орын қажет емес (бірақ команда әрқашан жол нөмірі мен оператордың арасында біреуін көрсетеді), мысалы, , және бағдарламаларды бос орынсыз жазу әдеттегі нәрсе. Бұл мүмкіндік жадты үнемдеу үшін қосылды, өйткені токендеуші кілт сөздер арасында енгізілген бос орындарды ешқашан алып тастамайды: бос орындардың болуы токенделген бағдарламада қосымша 0x20 байтқа әкеледі, олар орындалу кезінде өткізіледі. Жол нөмірі мен бағдарлама операторы арасындағы бос орындар токендеушімен жойылады. Бағдарлама жолдарының көпшілігінде 80 таңбаға дейін болуы мүмкін, бірақ 40 бағандық мәтін бар машиналар жолды экранның келесі жолына дейін орауға әкеледі, ал 22 бағандық дисплейі бар VIC 20-да бағдарлама жолдары төрт таңбаға дейін ие бола алады. Commodore 128 бағдарламасында BASIC 7.0 бағдарлама жолының шегін 160 таңбаға дейін арттырды (төрт 40 бағандық жол немесе екі 80 бағандық жол). Бұндай қысқартуларды қолдану арқылы сызыққа одан да көп орын беруге болады. BASIC 7.0 бағдарламасының бір жолын 160 таңбадан артық жазғанда қате пайда болады. Бұрынғы нұсқаларда қате пайда болмайды және егер жол ұзындығы асып кетсе, READY шақыруын екі жол төмен қарай көрсетеді. Жол нөмірі бағдарлама жолындағы таңбалар санына есептеледі, сондықтан бес таңбалы жол нөмірі бір таңбалы санға қарағанда төрт таңбаға аз рұқсат етіледі. Commodore BASIC жолдарының орындалу реті жол нөмірлеумен анықталмайды; оның орнына, ол жолдардың жадыда байланысқан реті бойынша орындалады. Бағдарлама жолдары жадыда бір-бірімен байланыстырылған тізім ретінде, сілтемемен (келесі бағдарлама жолының басталу орны бар), жол нөмірімен, содан кейін жолдың белгіленген кодымен сақталады. Бағдарламаны енгізу кезінде BASIC бағдарлама жолдарының жадыда үнемі қайта реттеліп отыратын, сондықтан жол нөмірлері мен сілтемелер жоғарылайтын тәртіппен орналасатын. Алайда, бағдарлама енгізілгеннен кейін, POKE командаларымен жол нөмірлері мен сілтемелерді қолмен өзгерту тапсырыссыз орындауға мүмкіндік береді немесе тіпті әр жолға бірдей жол нөмірін береді. Бастапқыда BASIC коммерциялық мақсатта қолданылған кезде, бұл бағдарламаны кездейсоқ өзгертуді болдырмау үшін бағдарламалық қамтамасыз етуді қорғау әдісі болды. Жолдар саны 0-ден 65520-ға дейін болуы мүмкін және сақтау үшін бес байт қажет, жолдар саны қанша цифр болса да, бірақ орындалу саны аз болған сайын жылдам. Бірнеше операторды бір жолға орналастыру жадыны аз пайдаланады және жылдам орындалады. және операторлары ағымдағы жолдан төмен қарай іздейді, егер алға қарай секіру орындалса, ал кері секіру жағдайында бағдарламаның басына оралып, іздеуді бастайды. Бұл үлкен бағдарламаларды баяулатады, сондықтан бағдарламаның басына жиі қолданылатын кіші бағдарламаларды орналастыру қажет. Айырмалы атаулары 2 таңбаға дейін ғана маңызды; осылайша, АЙЫРМАЛЫ1, АЙЫРМАЛЫ2 және VA айнымалы атаулары бір айнымалыны білдіреді. Commodore BASIC сонымен қатар биттік операторларды , және қолдайды, бірақ бұл мүмкіндік Microsoft 6502 BASIC кодының бөлігі болғанымен, әдетте Applesoft BASIC сияқты басқа нұсқаларда қолданылмайды. Commodore BASIC-тің түпкілікті сан форматы, ата-аналық MS BASIC сияқты, қалқыма нүктелік болып табылады. Көптеген заманауи BASIC нұсқалары сипаттама үшін бір байтты (көрсеткіш) және мантисса үшін үш байтты пайдаланды. Үш байттық мантиссаны пайдаланатын қалқыма нүктелік санның дәлдігі шамамен 6.5 ондық таңбаны құрайды және дөңгелектеу қатесі жиі кездеседі. Microsoft BASIC-тің 6502 нұсқалары 40 биттік қалқыма нүктелік арифметиканы пайдаланды, яғни айнымалылар сақтау үшін бес байтты алды (төрт байттық мантисса және бір байттық көрсеткіш), BASIC 80-дегі 32 биттік қалқыма нүктеден өзгеше. 8080/Z80 Microsoft BASIC нұсқалары бүтін және қос дәлдікті айнымалыларды қолдағанмен, 6502 нұсқалары тек қалқыма нүктелік болды. Commodore BASIC қолдайтын бүтін санды айнымалылар (проценттік белгімен белгіленген) 32768-ден 32767-ге дейінгі диапазонда болғанымен, практикада олар тек массивтік айнымалылар үшін қолданылады және әрбір массивтік элементті екі байтқа дейін шектеу арқылы жадты үнемдеу функциясын атқарады (2000 элементтен тұратын массив қалқыма нүктелік массив ретінде жарияланса 10 000 байт алады, ал бүтін массив ретінде жарияланса 4000 байт алады). Кез келген айнымалыны бүтін деп белгілеу BASIC-ті оны қалқыма нүктеге қайта айналдыруға мәжбүр етеді, бағдарламаның орындалуын баяулатады және әрбір проценттік белгі сақтау үшін бір байтты қажет ететіндіктен жадты ысыраптайды (бұл бүтін массивлерге де қатысты, сондықтан бағдарламашы үлкен массивтер қолданылғанда ғана оларды пайдаланудан аулақ болуы керек, олар қалқыма нүктелік ретінде сақталғанда қол жетімді жадтан асып кетеді). Сондай-ақ, 32767-ден жоғары жад орындарын бүтін сан ретінде анықталған мекенжаймен сұрау мүмкін емес. Нөлді (0) көрсету үшін нүктені (.) пайдалануға болады (мысалы, орнына немесе орнына ), бұл сәл жылдам орындалады. Машиналық кодты бағдарламаларды бастау үшін қолданылатын оператор Commodore-мен қосылды және түпкілікті Microsoft BASIC кодында болмады, онда машиналық кодты шақыру үшін тек USR функциясы болды. Ол автоматты түрде процессор тіркегішін (C64, басқа машиналарда өзгереді) мәндермен жүктейді, бұл машиналық кодты шақыруларға деректерді жіберу немесе BASIC-тен кернел функцияларын шақыру құралы ретінде пайдаланылуы мүмкін (мысалы, экранды тазалау үшін ). Commodore 8 биттік машиналары C128-ден басқа дискілік бағдарламаны автоматты түрде іске қоса алмайды, сондықтан әдеттегі техника – бағдарлама орындалуын бастау үшін BASIC-тің кіріспе бөлігін қосу, мысалы . Бағдарламаны жүктегеннен кейін автоматты түрде бастауға және пайдаланушыға операторды енгізуді қажет етпеуге болады, бұл 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.
Баламалар
Commodore 64 үшін BASIC-тің көптеген кеңейтімдері шығарылды, өйткені оның BASIC 2.0 мүмкіндіктері шектеулі болды. Ең танымал кеңейтімдердің бірі DOS Wedge болды, ол Commodore 1541 Test/Demo Disk-ке енгізілді. Бұл 1 КБ-дық BASIC кеңейтуі дискіге қатысты бірқатар командаларды, соның ішінде дискідегі бағдарламаны жадыда жоймастан дискінің каталогын оқу мүмкіндігін қосты. Оның мүмкіндіктері кейіннен түрлі үшінші тарап кеңейтімдеріне, мысалы, танымал Epyx FastLoad картриджіне енгізілді. Басқа BASIC кеңейтімдері қосымша кілт сөздерді қосты, бұл кодтауды жеңілдету үшін спрайттар, дыбыс және жоғары ажыратымдылықтағы графикаларды жасауға мүмкіндік берді, мысалы, Simons' BASIC (1983) және Vision BASIC (2022). BASIC 2.0-дың дыбыс немесе графикалық мүмкіндіктерінің болмауы көптеген пайдаланушыларға қиындық туғызса да, кейбір сыншылар бұл пайдаланушыны машина тілін үйренуге мәжбүрлегендіктен, ақырында пайдалы болды деп мәлімдеді. C64-те BASIC 2.0-дың шектеулері BASIC-тен ROM машина тілін пайдалануға әкелді. Файлды белгіленген жад орнына жүктеу үшін файлдың атауы, диск және құрылғы нөмірі шақыру арқылы оқылады: ; орналасу орны 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 жол нөмірлеу командасын қамтыды. Commodore-дің ертерек BASIC-терінде де түзету командалары болмады, яғни қателер мен пайдаланылмаған айнымалыларды анықтау қиын болды. Z80 Microsoft BASIC-тің стандартты бөлігі болған құрылымдар Commodore BASIC-тің ертерек нұсқаларында болмағандықтан, BASIC 3.5-ке қосылды.
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 пернесі арқылы тоқтатылса, айнымалы шамалар RAM-да сақталады және түзету үшін PRINT арқылы көрсетілуі мүмкін. 128 моделі тіпті екінші 64кб жад бөлігін айнымалы шамаларды сақтауға арнады, бұл NEW немесе RUN командасы берілгенге дейін шамалардың сақталуын қамтамасыз етеді. Бұл, Commodore BASIC-ке енгізілген жетілдірілген экран редакторымен бірге бағдарламалау ортасына REPL сияқты сезім береді; бағдарламашылар кез келген экран орнында бағдарламалық жолдарды қосып, өңдей алады, бағдарламаны интерактивті түрде құрастырады. Бұл CP/M немесе MS DOS сияқты бизнеске бағытталған операциялық жүйелерден өзгеше, олар әдетте командалық жол интерфейсіне жүктеледі. Егер осы платформаларда бағдарламалау тілі қажет болса, оны жеке жүктеу қажет еді. Commodore BASIC-тің кейбір нұсқаларында дискіге арналған DLOAD және DSAVE командалары болғанымен, Commodore 64-ке енгізілген нұсқада олар жоқ еді, сондықтан пайдаланушы стандартты LOAD командасына дискінің құрылғы нөмірін (әдетте 8 немесе 9) көрсетуі керек, әйтпесе ол кассетамен жұмыс істейтін. Commodore 64-тің BASIC 2.0 нұсқасының тағы бір кемшілігі – диск мазмұнын негізгі жадты тазартпай көрсетуге арналған DIRECTORY командасы болмауы. 64-те дискідегі файлдарды қарау «бағдарламаны» жүктеу арқылы іске асырылды, оны тізімдегенде каталог псевдо-BASIC бағдарламасы ретінде көрсетілді, файлдың блок көлемі жол нөмірі ретінде пайда болды. Бұл қазіргі жүктеліп жатқан бағдарламаны жаңадан жазуға алып келді. DOS Wedge сияқты қосымшалар каталог тізімін тікелей экран жадына шығару арқылы бұл мәселені шешті.