Commodore BASIC - Commodore BASIC

Commodore BASIC
Navrhl Microsoft
Vývojář Microsoft
Poprvé se objevil 1977 ; Před 44 lety ( 1977 )
Plošina PET na C128

Commodore BASIC , také známý jako PET BASIC nebo CBM-Basic , je dialekt ze základního programovacího jazyka používaného v Commodore International ‚s 8-bitové domácí počítače linie, táhnoucí se od PET 1977 do C128 roku 1985.

Jádro je založeno na 6502 Microsoft BASIC a jako takové sdílí mnoho vlastností s dalšími 6502 BASICmi té doby, jako je například Applesoft BASIC . Commodore licencoval BASIC od společnosti Microsoft v roce 1977 na základě „zaplať jednou, bez licenčních poplatků“ poté, co Jack Tramiel odmítl nabídku Billa Gatese na poplatek 3 $ za jednotku s prohlášením „už jsem ženatý“ a zaplatil bych maximálně 25 000 $ za trvalou licenci.

Původní verze PET byla velmi podobná původní implementaci Microsoftu s několika úpravami. BASIC 2.0 na C64 byl také podobný a byl také viděn na některých C128 a dalších modelech. Později PETs představoval BASIC 4.0, podobný originálu, ale přidal řadu příkazů pro práci s disketami .

Jako první se skutečně odchýlil BASIC 3.5, který na C16 a Plus/4 přidal řadu příkazů pro podporu grafiky a zvuku. BASIC 7.0 byl součástí Commodore 128 a obsahoval strukturované programovací příkazy z BASIC 3.5 Plus/4, stejně jako klíčová slova navržená speciálně pro využití výhod nových schopností stroje. Byl přidán editor sprite a monitor jazyka stroje. Poslední, BASIC 10.0, byl součástí nevydaného Commodore 65 .

Dějiny

Commodore vzal zdrojový kód paušálního BASIC a dále jej interně vyvinul pro všechny své další 8bitové domácí počítače. Až Commodore 128 (s V7.0) zobrazil oznámení o autorských právech společnosti Microsoft. Microsoft však do verze 2 zabudoval velikonoční vajíčko nebo „upgradoval“ Commodore Basic, což prokázalo jeho původ: zadání příkazu (nejasný) WAIT 6502, 1by vedlo k Microsoft!zobrazení na obrazovce. (Velikonoční vajíčko bylo dobře zahaleno-zpráva se neobjevila při žádné demontáži tlumočníka.)

Populární Commodore 64 přišel s BASIC v2.0 v ROM navzdory vydání počítače po sérii PET/CBM, která měla verzi 4.0, protože 64 byl určen jako domácí počítač, zatímco řada PET/CBM byla zaměřena na obchodní a vzdělávací využití kde se předpokládalo, že jejich vestavěný programovací jazyk bude více používán. Tím se ušetřily výrobní náklady, protože V2 se vešel do menších ROM.

Technické údaje

Editace programu

Vhodným rysem Commodore je ROM -resident BASIC interpret a kernal byl editor přes celou obrazovku . Ačkoli klávesnice Commodore mají pouze dvě kurzorové klávesy, které se při podržení klávesy Shift střídaly, editor obrazovky umožňoval uživatelům zadávat přímé příkazy nebo zadávat a upravovat programové řádky odkudkoli na obrazovce. Pokud byl řádek označen číslem řádku, byl tokenizován a uložen do paměti programu. Řádky, které nezačínají číslem, byly provedeny stisknutím RETURNklávesy, kdykoli byl kurzor na řádku. To znamenalo značný upgrade v programových vstupních rozhraních ve srovnání s jinými běžnými domácími počítačovými BASIC v té době, které obvykle používaly řádkové editory , vyvolávané samostatným EDITpříkazem, nebo „kopírovací kurzor“, který zkrátil řádek na pozici kurzoru.

Měl také schopnost ukládat pojmenované soubory na jakékoli zařízení, včetně kazety -populární paměťové zařízení v dobách PET a které se používalo po celou dobu životnosti 8bitových Commodores jako levná forma velkokapacitního úložiště . Většina systémů podporovala pouze názvy souborů na disketě , což ztížilo ukládání více souborů na jiná zařízení. Uživatel jednoho z těchto dalších systémů si musel všimnout zobrazení čítače rekordéru v místě souboru, ale to bylo nepřesné a náchylné k chybám. U PET (a BASIC 2.0) bylo možné požadovat soubory z kazet podle názvu. Zařízení by hledalo název souboru postupným čtením dat, přičemž by ignorovalo veškerá nesouhlasná jména souborů. Systém souborů byl také podporován silnou strukturou záznamů, kterou bylo možné načíst nebo uložit do souborů. Data z kazet Commodore byla zaznamenávána digitálně, spíše než levnější (a méně spolehlivé) analogové metody používané jinými výrobci. Proto byl vyžadován specializovaný datový balíček spíše než standardní magnetofon. Byly k dispozici adaptéry, které používaly analogově-digitální převodník, který umožňoval použití standardního rekordéru, ale ty stály jen o málo méně než datový balíček.

Příkaz LOAD lze použít s volitelným parametrem 1, který načte program do adresy paměti obsažené v prvních dvou bajtech souboru (tyto bajty jsou zahozeny a nejsou zachovány v paměti). Pokud není použit parametr 1 , program se načte na začátek programové oblasti ZÁKLADNÍ, která se mezi stroji značně liší. Dodány některé varianty Commodore BASIC BLOADa BSAVEpříkazy, které fungovaly jako jejich protějšky v Applesoft BASIC , načítání nebo ukládání bitmap ze zadaných paměťových míst.

PET nepodporuje přemístitelné programy a příkaz LOAD se vždy načte v prvních dvou bajtech obsažených v souboru programu. To způsobilo problém při pokusu o načtení BASIC programů uložených na jiných strojích Commodore, protože by se načítaly na vyšší adresu, než kde BASIC PET očekával, že program bude, existovala řešení, jak „přesunout“ programy na správné místo. Pokud byl program uložen na stroji CBM-II , jediný způsob, jak jej načíst na PET, bylo upravit první dva bajty pomocí editoru sektorů disku, protože řada CBM-II měla oblast svého programu BASIC na 0 $, což by mělo za následek v PET, který se pokouší načíst na nulovou stránku a zamknout.

Klíčová slova Commodore BASIC lze zkrátit zadáním nejprve neposunutého stisknutí klávesy a poté posunutého stisknutí dalšího písmene. Tím byl nastaven vysoký bit , což způsobilo, že tlumočník přestane číst a analyzovat příkaz podle vyhledávací tabulky. To znamenalo, že příkaz až tam, kde byl nastaven vysoký bit, byl přijat jako náhrada za vypsání celého příkazu. Protože však byla všechna klíčová klíčová slova BASIC uložena v paměti jako jednobajtové tokeny, byla to spíše výhoda pro zadávání příkazů než optimalizace.

Ve výchozí znakové sadě pouze pro velká písmena se posunuté znaky zobrazují jako grafický symbol; např. příkaz,, GOTOmohl být zkrácen G{Shift-O}(což připomínalo obrazovku). Většina takových příkazů byla dlouhá dvě písmena, ale v některých případech byla delší. V takových případech došlo k nejednoznačnosti, takže bylo zapotřebí více neposunutých písmen příkazu, jako například ( ) . Některé příkazy neměly žádnou zkrácenou podobu, ať už kvůli stručnosti nebo nejednoznačnosti s jinými příkazy. Například příkaz neměl žádnou zkratku, protože jeho pravopis kolidoval se samostatným klíčovým slovem, které se nacházelo blíže k začátku vyhledávací tabulky klíčových slov . Silně používaný příkaz měl jedinou zkratku, jak bylo běžné ve většině dialektů Microsoft BASIC. Zkratka příkazů s posunutými písmeny je pro Commodore BASIC jedinečná. GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

Tato metoda tokenizace měla takovou závadu, že pokud by jedna zahrnovala REM(BASIC prohlášení pro přidání komentáře ke kódu) následované a {Shift-L}, při pokusu o zobrazení výpisu programu by interpret BASIC okamžitě zrušil výpis, zobrazil a ?SYNTAX ERRORa vrátil se do READY.výzva. Tuto závadu do určité míry použili programátoři, kteří se chtěli pokusit chránit svou práci, i když to bylo docela snadné obejít.

Zkrácením klíčových slov bylo možné vložit více kódu na jeden programový řádek (který mohl zabírat dva řádky obrazovky na 40-sloupcových displejích-tj. C64 nebo PET, nebo čtyři řádky na 22-sloupcovém displeji VIC-20). To umožnilo mírnou úsporu režie pro uložení jinak nezbytných extra programových řádků, ale nic víc. Všechny příkazy BASIC byly tokenizovány a zabíraly 1 bajt (nebo dva, v případě několika příkazů BASIC 7 nebo BASIC 10) v paměti bez ohledu na to, jakým způsobem byly zadány. Takové dlouhé řádky byly obtížnou úpravou. LISTPříkaz zobrazen kompletní příkazový klíčové slovo - prodloužení čáru programu překračující 2 nebo 4 linek obrazovky, které by mohly být zadány do programové paměti.

Výkon

Stejně jako původní interpret Microsoft BASIC je Commodore BASIC pomalejší než nativní strojový kód . Výsledky testů ukázaly, že kopírování 16 kilobajtů z ROM do RAM trvá méně než jednu sekundu ve strojovém kódu, ve srovnání s více než minutou v BASICu. Aby mohli programátoři spouštět rychleji než tlumočník, začali k urychlení provádění používat různé techniky. Jedním z nich bylo ukládat často používané hodnoty s plovoucí desetinnou čárkou do proměnných místo použití doslovných hodnot, protože interpretace názvu proměnné byla rychlejší než interpretace doslovného čísla. Vzhledem k tomu, že plovoucí desetinná čárka je výchozím typem pro všechny příkazy, je rychlejší použít jako argumenty čísla s plovoucí desetinnou čárkou než celá čísla. Když byla důležitá rychlost, někteří programátoři převedli sekce programů BASIC do sestavovacího jazyka 6502 nebo 6510, který byl načten odděleně od souboru nebo POKEd do paměti z příkazů DATA na konci programu BASIC a spuštěn z BASIC pomocí příkazu, a to buď z přímém režimu nebo ze samotného programu . Když byla rychlost provádění strojového jazyka příliš velká, například pro hru nebo při čekání na vstup uživatele, mohli programátoři hlasovat čtením vybraných paměťových míst (například $ C6 pro 64 nebo $ D0 pro 128, udávající velikost fronta klávesnice) pro zpoždění nebo zastavení provádění. SYS


Jedinečnou vlastností Commodore BASIC je použití řídicích kódů k provádění úkolů, jako je vymazání obrazovky nebo umístění kurzoru v programu; tyto lze vyvolat buď zadáním příkazu, kde X odpovídá řídicímu kódu, který má být vydán (například je to kontrolní kód pro vymazání obrazovky), nebo stisknutím příslušné klávesy mezi uvozovkami, tedy stisknutím + za uvozovkou způsobí, že BASIC zobrazí vizuální reprezentaci řídicího kódu (v tomto případě obráceného srdce), na který se poté působí při spuštění programu (přímý tisk řídicích kódů využívá méně paměti a provádí se rychleji než vyvolání funkce CHR $ ). To je ve srovnání s jinými implementacemi BASIC, které obvykle mají vyhrazené příkazy pro vymazání obrazovky nebo přesunutí kurzoru. PRINT CHR$(X)PRINT CHR$(147)⇧ ShiftCLR HOME

BASIC 3.5 a vyšší mají správné příkazy pro čištění obrazovky a pohyb kurzoru.

Programové řádky v Commodore BASIC nevyžadují mezery kdekoli (ale příkaz LIST vždy zobrazí jeden mezi číslem řádku a příkazem), např. , A bylo běžné psát programy bez mezer. Tato funkce byla přidána, aby šetřila paměť, protože tokenizer nikdy neodstraní žádný prostor vložený mezi klíčová slova: přítomnost mezer má za následek další bajty v tokenizovaném programu, které se během provádění pouze přeskakují. Mezery mezi číslem řádku a programovým příkazem jsou tokenizerem odstraněny. 100 IFA=5THENPRINT"YES":GOTO1600x20

Programové řádky mohou mít na většině počítačů celkem 80 znaků, ale stroje se 40 sloupcovým textem by způsobily, že by se řádek zalomil na další řádek na obrazovce, a na VIC-20, který měl zobrazení 22 sloupců, mohly programové řádky zabírat až čtyři. BASIC 7.0 na Commodore 128 zvýšil limit programového řádku na 160 znaků (čtyři řádky se 40 sloupci nebo dva řádky s 80 sloupci). Použitím zkratek, jako je ?místo PRINT, je možné na řádek vejít ještě více. BASIC 7.0 zobrazuje a? STRING příliš dlouhochyba, pokud uživatel zadá řádek programu delší než 160 znaků. Dřívější verze nevytváří chybu a při překročení délky řádku jednoduše zobrazí výzvu READY o dva řádky níže. Číslo řádku se počítá v počtu znaků na řádku programu, takže pětimístné číslo řádku bude mít za následek o čtyři méně povolených znaků než jednociferné číslo.

Pořadí provedení řádků Commodore BASIC nebylo určeno číslováním řádků; místo toho sledoval pořadí, ve kterém byly řádky propojeny v paměti. Programové řádky byly uloženy do paměti jako jednotlivě propojený seznam s ukazatelem (obsahujícím adresu začátku dalšího programového řádku), číslem řádku a poté tokenizovaným kódem pro řádek. Během zadávání programu by BASIC neustále přeskupoval programové řádky v paměti, aby čísla řádků a ukazatele byly ve vzestupném pořadí. Po zadání programu však ruční změna čísel řádků a ukazatelů pomocí příkazů POKE mohla umožnit spuštění mimo pořadí nebo dokonce každému řádku dát stejné číslo řádku. V počátcích, kdy byl BASIC komerčně používán, se jednalo o techniku softwarové ochrany, která odrazovala od příležitostných úprav programu.

Čísla řádků se mohou pohybovat od 0 do 65520 a jejich uložení může trvat pět bajtů bez ohledu na to, kolik číslic je v čísle řádku, přestože provedení je rychlejší, tím méně číslic je. Uvedení více příkazů na řádek spotřebuje méně paměti a provede se rychleji.

Příkazy GOTO a GOSUB budou vyhledávat směrem dolů z aktuálního řádku, aby našli číslo řádku, pokud je proveden skok vpřed, v případě zpětného skoku se vrátí na začátek programu a zahájí vyhledávání. To zpomalí větší programy, takže je vhodnější umístit běžně používané podprogramy blízko začátku programu.

Názvy proměnných jsou významné pouze pro 2 znaky; Takto názvy proměnných VARIABLE1, VARIABLE2a VAvšichni se odkazují na stejné proměnné.

Commodore BASIC také podporuje bitové operátory - AND, OR a XOR , přestože tato funkce byla součástí základního kódu Microsoft 6502 BASIC, v jiných implementacích, jako je například Applesoft BASIC , byla obvykle vynechána .

Nativní formát čísla Commodore BASIC, stejně jako jeho mateřský MS BASIC , byl s plovoucí desetinnou čárkou . Většina současných implementací BASIC používala jeden bajt pro charakteristiku ( exponent ) a tři bajty pro mantisu . Přesnost čísla s plovoucí desetinnou čárkou pomocí tříbajtové mantisy je jen asi 6,5 desetinných míst a chyba zaokrouhlování je běžná. 6502 implementací Microsoft BASIC využilo 40bitovou aritmetiku s pohyblivou řádovou čárkou, což znamená, že na rozdíl od 32bitové plovoucí čárky nalezené v BASIC-80 trvalo uložení proměnných pět bajtů (čtyři bajtové mantisy a jeden bajt pro exponent).

Zatímco implementace 8080/Z80 systému Microsoft BASIC podporovaly celočíselné a dvojnásobné proměnné přesnosti, 6502 implementací bylo pouze s plovoucí desetinnou čárkou.

Ačkoli Commodore BASIC podporuje celočíselné proměnné se znaménkem (označené procentem) v rozsahu -32768 až 32767, v praxi se používají pouze pro proměnné pole a slouží k zachování paměti omezením prvků pole na dva bajty každý (řada 2000 prvků zabere 10 000 bajtů, pokud je deklarováno jako pole s plovoucí desetinnou čárkou, ale pouze 4000, pokud je deklarováno jako celočíselné pole). Označení libovolné proměnné jako celého čísla jednoduše způsobí, že BASIC převede zpět na plovoucí desetinnou čárku, zpomalí provádění programu a plýtvá pamětí, protože každý znak procenta ukládá jeden další bajt k uložení (protože to platí i pro celočíselná pole, programátor by se měl jejich používání vyhnout, pokud používají se velká pole, která by překročila dostupnou paměť, pokud by byla uložena jako plovoucí desetinná čárka). Rovněž není možné ukládat do paměti POKE nebo PEEK nad 32767 s adresou definovanou jako celé číslo se znaménkem.

Místo čísla 0 lze použít tečku (.) (Tedy místo nebo místo ), provede se to o něco rychleji. 10 A=.10 A=010 FOR A=. TO 10010 FOR A=0 to 100

Příkaz SYS , používaný ke spouštění programů strojového jazyka, přidal Commodore a nebyl v původním kódu Microsoft BASIC, který uváděl pouze funkci USR pro vyvolání rutin strojového jazyka. Automaticky načte registry CPU s hodnotami v $ 30C-$ 30F (C64, liší se na jiných strojích) -to lze použít k přenosu dat do rutin jazyků strojů nebo jako prostředek pro volání funkcí kernalu ze BASIC (jako příklad , smaže obrazovku). POKE 780,147:SYS 65490

Vzhledem k tomu, že 8bitové počítače Commodore jiné než C128 nemohou automaticky spouštět software disku, je obvyklou technikou zahrnutí ZÁKLADNÍHO stubu, jako je spuštění programu. Je možné automaticky spouštět software po načtení a nevyžadovat, aby uživatel zadával příkaz RUN , to se děje tak, že máte kus kódu, který spojí základní vektor „ready“ za 0302 $ . 10 SYS 2048

Stejně jako u většiny ostatních verzí Microsoft BASIC , pokud pole není deklarováno pomocí příkazu DIM , je automaticky nastaveno na deset prvků (v praxi 11, protože prvky pole se počítají od 0). Větší pole musí být deklarována, nebo BASIC zobrazí chybu, když je program spuštěn a pole nelze v programu znovu dimenzovat, pokud nejsou všechny proměnné vymazány pomocí příkazu CLR. Numerická pole jsou při vytváření automaticky vyplněna nulami, pokud je dimenzováno velké pole, může dojít ke chvilkovému zpoždění při provádění programu.

Řetězcové proměnné jsou reprezentovány označením názvu proměnné znakem dolaru. Proměnné AA$, AAa, AA%by tedy byly chápány jako odlišné. Proměnné pole jsou také považovány za odlišné od jednoduchých proměnných, takže A a A (1) se nevztahují na stejnou proměnnou. Velikost pole řetězců pouze odkazuje na počet řetězců uložených v poli, nikoli na velikost každého prvku, který je přidělován dynamicky. Na rozdíl od některých jiných implementací Microsoft BASIC, Commodore BASIC nevyžaduje, aby byl na začátku programu vyhrazen prostor pro řetězce.

Na rozdíl od jiných 8bitových počítačů, jako je Apple II, všechny počítače Commodore mají vestavěné hodiny, které jsou při zapnutí inicializovány na 0 a aktualizovány každým zatržením časovače PIA/VIA/TED/CIA, tedy 60krát za sekundu . Jsou mu přiřazeny dvě systémové proměnné v BASIC, TI a TI $ , které obě obsahují aktuální čas. TI je jen pro čtení a nelze jej měnit; bude to mít za následek chybovou zprávu syntaxe. TI $ lze použít k nastavení času pomocí šesti číselného řetězce (chyba je způsobena použitím jiného řetězce než šesti čísel). Hodiny nejsou příliš spolehlivou metodou měření času, protože se zastaví vždy, když jsou vypnuta přerušení (prováděná některými kernálními rutinami) a přístup na port IEC (nebo IEEE port na PET) zpomalí aktualizaci hodin několika zatržítky.

Funkce RND v Commodore BASIC může používat hodiny ke generování náhodných čísel; toho je dosaženo pomocí RND (0) , ale má relativně omezené použití, protože jsou vrácena pouze čísla mezi 0 a 255. Jinak RND funguje stejně jako ostatní implementace Microsoft BASIC v tom, že je použita pseudonáhodná sekvence prostřednictvím pevné 5-bajtové počáteční hodnoty uložené při zapnutí v paměťových místech $ 8B-$ 8F na C64 (umístění se liší na jiných stroje). RND s libovolným číslem vyšším než 0 vygeneruje náhodné číslo sloučené z hodnoty zahrnuté ve funkci RND a počáteční hodnoty, která se aktualizuje o 1 při každém spuštění funkce RND. RND se záporným číslem přejde do bodu v pořadí aktuální počáteční hodnoty určené číslem.

Protože generování skutečných náhodných čísel je pomocí příkazu RND nemožné , je pro C64 a C128 typičtější využívat kanál bílého šumu čipu SID pro náhodná čísla.

BASIC 2.0 notoricky trpěl extrémně pomalým odpadkovým sběrem řetězců. Sběr odpadků se automaticky vyvolá při každém spuštění funkce FRE a pokud existuje mnoho řetězcových proměnných a polí, se kterými bylo v průběhu programu manipulováno, jejich vymazání může za nejhorších podmínek trvat déle než hodinu. Sbírání odpadků také není možné přerušit, protože BASIC při provádění této rutiny nekontroluje klíč RUN/STOP. BASIC 4.0 představil vylepšený systém sběru odpadků se zpětnými ukazateli a všechny pozdější implementace Commodore BASIC to také mají.

Funkce FRE v BASIC 2.0 trpěla další technickou chybou v tom, že nedokáže zpracovat podepsaná čísla nad 32768, takže pokud je funkce vyvolána na C64 (38k základní paměť), zobrazí se záporné množství volné základní paměti (přidání 65535 do nahlášené číslo získá správné množství volné paměti). PET a VIC-20 nikdy neměly k dispozici více než 32 kB celkové paměti pro BASIC, takže toto omezení se ukázalo až po vývoji C64. Funkce FRE na BASIC 3.5 a 7.0 tento problém napravila a FRE na BASIC 7.0 byl také „rozdělen“ na dvě funkce, jednu pro zobrazení volné paměti textu programu BASIC a druhou pro zobrazení volné proměnné paměti.

Alternativy

ZÁKLADNÍ úvodní obrazovka Simons

Pro Commodore 64 bylo vydáno mnoho BASIC rozšíření, kvůli relativně omezeným možnostem jeho nativního BASIC 2.0. Jedním z nejpopulárnějších rozšíření byl DOS Wedge , který byl součástí testovacího/demo disku Commodore 1541 . Toto 1 kB rozšíření do BASIC přidalo řadu příkazů souvisejících s diskem, včetně možnosti číst adresář disku, aniž by došlo ke zničení programu v paměti. Jeho funkce byly následně začleněny do různých rozšíření třetích stran, například do populární kazety Epyx FastLoad . Další rozšíření BASIC přidala další klíčová slova, která usnadňují kódování skřítků, zvuku a grafiky ve vysokém rozlišení, jako je Simonsův BASIC .

Ačkoli nedostatek základních nebo grafických funkcí BASIC 2.0 byl pro mnoho uživatelů frustrující, někteří kritici tvrdili, že to bylo nakonec prospěšné, protože to nutilo uživatele naučit se strojový jazyk.

Omezení BASIC 2.0 na C64 vedlo k použití vestavěného strojového jazyka ROM od BASIC. Chcete -li načíst soubor do určeného paměťového umístění, název souboru, jednotka a číslo zařízení budou načteny voláním :; umístění bude uvedeno v X a Y registry: ; a zatížení rutina by byl nazýván: . SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

Diskový časopis pro C64, Loadstar , byl dějištěm nadšených programátorů, kteří sdíleli sbírky proto-příkazů pro BASIC, nazývaných s SYS address + offsetpříkazem.

Z hlediska moderního programování představovaly dřívější verze Commodore BASIC pro programátora řadu špatných programovacích pastí. Protože většina těchto problémů pochází z Microsoft BASIC , podobnými nedostatky trpěl prakticky každý základní počítač té doby. Každému řádku programu Microsoft BASIC programátor přidělil číslo řádku . Běžnou praxí bylo zvyšovat čísla o nějakou hodnotu (5, 10 nebo 100), aby bylo vkládání řádků během editace programu nebo ladění snazší, ale špatné plánování znamenalo, že vkládání velkých sekcí do programu často vyžadovalo restrukturalizaci celého kódu. Běžnou technikou bylo spustit program na nějakém nízkém čísle řádku pomocí skokového stolu ON ... GOSUB , přičemž tělo programu bylo strukturováno do sekcí začínajících na určeném čísle řádku, jako je 1000, 2000 atd. Pokud bylo potřeba přidat velkou sekci, mohlo by jí být pouze přiřazeno další dostupné hlavní číslo řádku a vloženo do skokové tabulky.

Pozdější verze BASIC na Commodore a dalších platformách obsahovaly příkaz DELETE a RENUMBER a také příkaz AUTO numbering line, který by automaticky vybral a vložil čísla řádků podle zvoleného přírůstku. Kromě toho jsou všechny proměnné považovány za globální proměnné. Jasně definované smyčky je těžké vytvořit, což často způsobuje, že se programátor spoléhá na příkaz GOTO (to bylo později opraveno v BASIC 3.5 přidáním příkazů DO, LOOP, WHILE, UNTIL a EXIT ). K provádění určitých úkolů je často nutné vytvořit proměnné příznaku. Dřívější BASIC od Commodore také postrádají ladicí příkazy, což znamená, že chyby a nepoužívané proměnné je těžké zachytit. IF ... THEN ... ELSE , standardní součást Z80 Microsoft BASIC, byly přidány do BASIC 3.5 poté, co nebyly k dispozici v dřívějších verzích Commodore BASIC.

Použijte jako uživatelské rozhraní

Stejně jako u jiných domácích počítačů se počítače Commodore zaváděly přímo do interpret BASIC. Příkazy pro soubor a programování BASICu lze zadávat v přímém režimu pro načítání a spouštění softwaru. Pokud by bylo spuštění programu zastaveno pomocí klávesy RUN/STOP, hodnoty proměnných by byly zachovány v RAM a mohly by být vytištěny pro ladění. 128 dokonce věnovala svou druhou 64k banku variabilnímu úložišti, což umožňuje hodnotám přetrvávat, dokud nebyl vydán příkaz NEWnebo RUN. To spolu s pokročilým editorem obrazovky, který je součástí Commodore BASIC, dodávalo programovacímu prostředí pocit podobný REPL ; programátoři mohli vkládat a upravovat programové řádky na libovolném místě obrazovky, interaktivně vytvářet program. To je v kontrastu s obchodně orientovanými operačními systémy té doby, jako je CP/M nebo MS-DOS , které se obvykle zavádějí do rozhraní příkazového řádku . Pokud byl na těchto platformách vyžadován programovací jazyk, musel být načten samostatně.

Zatímco některé verze Commodore BASIC obsahovaly příkazy specifické pro disk DLOADa DSAVEpříkazy, verze integrovaná v Commodore 64 tyto postrádala, což vyžadovalo, aby uživatel zadal číslo zařízení na diskové jednotce (obvykle 8 nebo 9) standardnímu LOADpříkazu, který byl jinak implicitně nastaven na pásku. Dalším vynecháním Commodore 64s BASIC 2.0 byl DIRECTORYpříkaz k zobrazení obsahu disku bez vymazání hlavní paměti. Na 64, prohlížení souborů na disku bylo implementováno jako načítání "programu", který když byl uveden, ukázal adresář jako pseudo BASIC program, s velikostí bloku souboru jako číslem řádku. To mělo za následek přepsání aktuálně načteného programu. Doplňky jako DOS Wedge to překonaly vykreslením seznamu adresářů přímo do paměti obrazovky.

Verze a funkce

Seznam verzí CBM BASIC v chronologickém pořadí s postupně přidanými funkcemi:

Vydané verze

  • V1.0: PET 2001 s chicletovou klávesnicí a vestavěnou datovou sadou (původní PET)
    • pole omezená na 256 prvků
    • Příkaz PEEK je výslovně zakázán v BASIC ROM umístěních nad $ C000
  • V2.0 (první vydání): PET 2001 s plně cestovní klávesnicí a aktualizačními ROMy
    • přidat podporu IEEE-488
    • vylepšil sběr odpadků
    • opravit chybu pole
    • Velikonoční vajíčko - zadání WAIT6502,[číslo] zobrazí MICROSOFT!libovolný počet opakování
  • V4.0: PET/CBM 4000/8000 series (and late version PET 2001s)
    • operace na disku : DLOAD,DSAVE,COPY,SCRATCH,atd. (celkem 15)
    • proměnné kanálu chybového kanálu: DS,DS$
    • výrazně zlepšil výkon sběru odpadků
  • V2.0 (druhé vydání, po 4.0): VIC-20 ; C64
  • V4+: řada CBM-II (alias řada B, P)
    • správa paměti: BANK
    • více operací na disku :BLOAD, BSAVE,DCLEAR
    • formátovaný tisk: PRINT USING,PUDEF
    • odchyt chyb: DISPOSE
    • alternativní větvení: ELSE
    • dynamické zpracování chyb: TRAP,RESUME,ERR$()
    • flexibilní DATAčtení: RESTORE [počet řádků]
    • funkce vyhledávání řetězců: INSTR
  • V3.5: C16/116 , Plus/4
    • zvukové a grafické příkazy
    • vstup joysticku :JOY
    • desetinnýhexadecimální převod:DEC(),HEX$()
    • strukturovaná smyčka: DO,LOOP,WHILE,UNTIL,EXIT
    • přiřazení funkčních kláves: KEY(také přímý režim)
    • vstup/úprava programu: AUTO,DELETE,RENUMBER
    • ladění (trasování):TRON, TROFF
    • Vstupní příkaz MLM :MONITOR
    • C (1) 16, Plus/4 velikonoční vajíčko - vstupte SYS 52650
  • V7.0: C128
    • více zvukových a grafických příkazů, včetně ovládání spritu
    • vestavěný editor sprite: SPRDEF
    • vícepříkazové bloky pro IF THEN ELSEstruktury:BEGIN,BEND
    • pádlo , vstup lehkého pera :POT,PEN
    • exkluzivní nebo funkce:XOR
    • získat proměnnou adresu: POINTER
    • okna v textovém režimu: WINDOW
    • řízené časové zpoždění: SLEEP
    • správa paměti: SWAP,FETCH,STASH,FRE(1)
    • použil přepínání bank 128 k ukládání programového kódu odděleně od proměnných. Proměnné hodnoty by byly zachovány napříč spuštěním programu, pokud by byl program spuštěn příkazem GOTO.
    • více operací na disku :BOOT,DVERIFY
    • Nastavení rychlosti CPU: FAST,SLOW(2 vs 1 MHz)
    • vstup do režimu C64: GO64
    • nedokumentováno, funkční: RREG(číst registry CPU po a SYS)
    • neimplementované příkazy: OFF,QUIT
    • C128 Velikonoční vajíčko - vstupte SYS 32800,123,45,6

Nevydané verze

  • V3.6: Commodore LCD (nevydaný prototyp). Téměř identický s V7.0, s následujícími rozdíly:
    • VOLUME namísto VOL
    • EXIT namísto QUIT
    • FAST,SLOW příkazy nejsou k dispozici
    • Doplňkový příkaz: POPUPS
  • V10: Commodore 65 (nevydaný prototyp)
    • grafické/video příkazy: PALETTE,GENLOCK
    • vstup myši :MOUSE,RMOUSE
    • SEQnástroj textový soubor ( ):TYPE
    • editace programu: FIND,CHANGE
    • správa paměti: DMA,FRE(2)
    • neimplementované příkazy: PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT,PASTE,CUT

Pozoruhodné balíčky rozšíření

Reference

Prameny

ZÁKLADNÍ 2.0
  • Angerhausen a kol. (1983). Anatomie Commodore 64 (úplný odkaz najdete v článku C64 ).
ZÁKLADNÍ 3.5
  • Gerrard, Peter; Bergin, Kevin (1985). Kompletní demontáž ROM ROM COMMODORE 16 . Gerald Duckworth & Co.Ltd. ISBN  0-7156-2004-5 .
ZÁKLADNÍ 7.0
  • Jarvis, Dennis; Springer, Jim D. (1987). BASIC 7.0 Interní . Grand Rapids, Michigan: Abacus Software, Inc. ISBN  0-916439-71-2 .
ZÁKLADNÍ 10.0