close

Amiral TEMEL

Navigasyona git Aramaya git
Amiral TEMEL
Commodore BASIC V2 ile Commore 64 ana ekranı.
Geliştirici(ler)
microsoft
Genel bilgi
Ortaya çıkan 1977
Tarafından dizayn edilmiştir microsoft
En son kararlı sürüm V7.0 (1985)
UygulamalarPET'ten C128'e _ _
Lisans özel

PET BASIC veya CBM-BASIC olarak da bilinen Commodore BASIC , Commodore International'ın 1977 PET'ten 1985 C128'e uzanan 8 bitlik ev bilgisayarları serisinde kullanılan BASIC programlama dilinin lehçesidir .

Çekirdek Microsoft BASIC 6502'ye dayanmaktadır ve bu nedenle Applesoft BASIC gibi zamanın diğer BASIC 6502'leri ile birçok özelliği paylaşmaktadır . Commodore , 1977'de Jack Tramiel'in Bill Gates'in birim başına 3 $ (2022'de 13.42$) ücret teklifini "Ben zaten evliyim" diyerek reddetmesinden sonra Microsoft'tan BASIC'i "tek seferlik, telif ücretsiz" olarak lisansladı . ve kalıcı bir lisans için 25.000 ABD Dolarından (2022'de 111.793 ABD Doları) fazla ödemeyecektir. [ 1 ]

PET'in orijinal sürümü, birkaç değişiklikle orijinal Microsoft uygulamasına çok benziyordu. C64'teki BASIC 2.0 da benzerdi ve bazı C128'lerde ve diğer modellerde de görüldü. Daha sonra PET'ler, orijinaline benzer, ancak disketle çalışmak için bir dizi komut ekleyerek BASIC 4.0'ı uyguladı .

BASIC 3.5, C16 ve Plus/4'te grafik ve ses desteği için bir dizi komut ekleyerek gerçekten raydan çıkan ilk kişi oldu . BASIC 7.0, Commodore 128'e dahil edildi ve Plus/4'ün BASIC 3.5'ten yapılandırılmış programlama komutlarının yanı sıra, makinenin yeni özelliklerinden yararlanmak için özel olarak tasarlanmış anahtar sözcükleri içeriyordu. Sprite editörü ve makine dili monitörü eklendi. Sonuncusu, BASIC 10.0, yayınlanmamış Commodore 65'in bir parçasıydı.

Tarih

Commodore, BASIC'in kaynak kodunu aldı ve diğer tüm 8 bitlik ev bilgisayarları için kendi bünyesinde geliştirdi. Commodore 128'e (V7.0 ile) kadar bir Microsoft telif hakkı bildirimi görüntülenmedi. Ancak Microsoft , Commodore Basic'in 2. sürümüne, kaynağını kanıtlayan bir paskalya yumurtası inşa etmişti: (belirsiz) komutu yazmak , ekranda görünmesine WAIT 6502, 1neden olacaktı . (Paskalya yumurtası iyice karışmıştı: mesaj, herhangi bir tercüman sökme işlemindeMicrosoft! görünmüyordu .) [ 2 ]

Popüler Commodore 64 , bilgisayar PET/CBM serisi 4.0 sürümüne sahip olduktan sonra piyasaya sürülmesine rağmen, ROM'da BASIC v2.0'ı uyguladı, çünkü 64 bir ev bilgisayarı olarak tasarlanırken, PET/CBM serisi ticari ve eğitim amaçlıydı. yerleşik programlama dilinin en çok kullanılması gereken yerde kullanın. Bu, V2'nin daha küçük ROM'lara sığması nedeniyle üretim maliyetlerinden tasarruf sağladı.

Teknik detaylar

Programları düzenleme

ROM'da yerleşik BASIC yorumlayıcısının ve KERNAL'in kullanışlı bir özelliği tam ekran düzenleyicisiydi . [ 3 ] ​[ 4 ]​ Commodore klavyelerinde , shift tuşuna bastığınızda yön değiştiren yalnızca iki imleç tuşu olmasına rağmen, ekran düzenleyici, kullanıcıların ekranın herhangi bir yerinden doğrudan komutlar girmesine veya program satırlarını girip düzenlemesine izin verdi. Bir satıra satır numarası eklenmişse, " belirteçlenir " ve program belleğinde saklanır. Rakamla başlamayan satırlar, imleç satır üzerindeyken her seferinde RETURN tuşuna basılarak yürütüldü . Bu, genellikle ayrı bir komutla çağrılan bir satır düzenleyicisi veya imleç konumunda satırı kesen bir "imleç kopyala" komutu kullanan diğer yaygın ev bilgisayarı BASIC'lerine göre program giriş arayüzlerinde önemli bir gelişmeye işaret ediyordu .EDIT

Ayrıca , PET günlerinde popüler bir depolama aygıtı olan ve ucuz bir yığın depolama biçimi olarak 8-bit Commodores'un ömrü boyunca kullanımda kalan kaset de dahil olmak üzere, adlandırılmış dosyaları herhangi bir aygıta kaydetme yeteneğine sahipti. Çoğu sistem yalnızca disket dosya adlarını destekledi , bu da birden çok dosyayı diğer aygıtlara kaydetmeyi zorlaştırdı. Bu diğer sistemlerden birinin kullanıcısı, dosyanın konumunu kaydedicinin sayacına not etmek zorundaydı, ancak bu yanlış ve hataya açıktı. PET (ve BASIC 2.0) ile kaset dosyaları ismen istenebilir. Cihaz, eşleşmeyen dosya adlarını yok sayarak verileri sırayla okuyarak dosya adını arar. Dosya sistemi, dosyalara yüklenebilen veya kaydedilebilen güçlü bir kayıt yapısı tarafından da desteklendi . Commodore kasetindeki veriler, diğer üreticiler tarafından kullanılan daha ucuz (ve daha az güvenilir) analog yöntemler yerine dijital olarak kaydedildi. Bu nedenle, standart bir teyp kaydedici yerine özel Veri Kümesi gerekliydi. Standart bir teyp kaydedicinin kullanımına izin vermek için bir analogdan dijitale dönüştürücü kullanan adaptörler mevcuttu , ancak bunlar Dataset'ten sadece biraz daha düşük maliyetliydi.

LOAD komutu , dosyanın ilk iki baytında yer alan bellek adresinde bir program yükleyecek olan isteğe bağlı parametre ,1 ile kullanılabilir (bu baytlar atılır ve bellekte tutulmaz). ,1 parametresi kullanılmazsa , program makineler arasında büyük farklılıklar gösteren BASIC program alanının başlangıcında yüklenecektir. Commodore BASIC'in bazı türevleri komutlar sağladı BLOADve bu, Applesoft BASIC'tekiBSAVE benzerleri gibi çalıştı , bitmap'leri belirtilen bellek konumlarından yükler veya kaydederdi .

PET, yeri değiştirilebilen programları desteklemez ve LOAD komutu her zaman program dosyasında bulunan ilk iki baytı yükler. Bu, kaydedilmiş BASIC programlarını diğer Commodore makinelerinde yüklemeye çalışırken bir sorun yarattı, çünkü bunlar PET BASIC'in programın olmasını beklediği yerden daha yüksek bir adrese yükleneceklerdi, programları uygun konuma "taşımak" için geçici çözümler vardı. Bir program bir CBM-II makinesine kaydedilmişse, onu bir PET'e yüklemenin tek yolu, CBM-II serisinin BASIC program alanı 0 $ olarak ayarlandığından, ilk iki baytı bir disk sektörü düzenleyicisiyle değiştirmekti. PET'in sıfır sayfasında yüklenmeye çalışmasına ve çökmesine neden olur.

Commodore BASIC ayrılmış sözcükleri , önce değişmemiş bir tuş vuruşu ve ardından bir sonraki harfin değiştirilmiş tuş vuruşu girilerek kısaltılabilir. Bu , yorumlayıcının okumayı durdurmasına ve ifadeyi bir arama tablosuna göre ayrıştırmasına neden olan yüksek biti ayarlar . Bu, yüksek bitin ayarlandığı yere kadar olan ifadenin tam komutu yazmanın yerine kabul edildiği anlamına geliyordu. Ancak, tüm BASIC anahtar sözcükleri bellekte tek baytlık belirteçler olarak depolandığından, bu, bir optimizasyondan ziyade ifade girişi için bir kolaylıktı.

Varsayılan yalnızca büyük harf karakter kümesinde, kaydırılan karakterler bir grafik sembolü olarak görünür; örneğin, komutu GOTOkısaltılabilir ( ekranda G{Shift-O}göründüğü gibi ). Bu komutların çoğunda iki harf vardı, ancak bazı durumlarda daha uzunlardı. Bu gibi durumlarda, bir belirsizlik vardı, bu nedenle komuttan büyük harf kullanmadan ( ) için gerekenden daha fazla harfe ihtiyaç vardı . Bazı komutlar, kısalık veya diğer komutlarla olan belirsizlik nedeniyle kısaltılmamıştır. Örneğin, komutun kısaltması yoktu çünkü yazımı , karşılık tablosundaki anahtar kelimenin başlangıcına daha yakın olan ayrılmış anahtar kelimeyle çelişiyordu . Yaygın olarak kullanılan komutun , Microsoft BASIC'in çoğu lehçesinde yaygın olduğu gibi tek bir kısayolu vardı . Kayan harflerle komut kısaltması Commodore BASIC'e özgüdür. GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

Bu belirteçleştirme yönteminin , programların listesini görüntülemeye çalışırken REMbir (koda yorum eklemek için BASIC deyimi) ve ardından bir deyimi içermesi durumunda , BASIC yorumlayıcısının listeyi hemen iptal etmesi, a öğesini görüntülemesi ve mesaj . Bu kusur, atlatılması oldukça kolay olmasına rağmen, çalışmalarını test etmek ve korumak isteyen programcılar tarafından bir dereceye kadar kullanıldı. {Shift-L}?SYNTAX ERRORREADY.

Anahtar kelimeleri kısaltarak, tek bir program satırına daha fazla kod sığdırmak mümkündü (bu, 40 sütunlu ekranlarda, yani C64 veya PET'te iki satır veya VIC'nin 22 sütunlu ekranında dört satır alabilir) -yirmi). Bu, aksi takdirde ek satırlara ihtiyaç duyacak olan program satırlarını depolamak için küçük bir tasarruf sağladı. Tüm BASIC komutları tokenleştirildi ve nasıl girildiklerine bakılmaksızın bellekte 1 bayt (veya birden fazla BASIC 7 veya BASIC 10 komutu olması durumunda iki) işgal edildi. Uzun satırları düzenlemek çok zordu. Komut LIST, tam komut anahtar sözcüğünü görüntüleyerek program satırını program belleğine girilebilecek 2 veya 4 ekran satırının ötesine taşıyordu.

Performans

Microsoft BASIC yorumlayıcısı gibi , Commodore BASIC yerel makine kodundan daha yavaştır . Test sonuçları, 16 kilobayt ROM'un RAM'e kopyalanmasının , BASIC'te bir dakikadan fazla sürerken, makine kodunda bir saniyeden az sürdüğünü göstermiştir. [ alıntı gerekli ] Programcılar, yorumlayıcıdan daha hızlı yürütmek için yürütmeyi hızlandırmak için çeşitli teknikler kullanmaya başladılar. Biri, bir değişken adını ayrıştırmak, bir değişmez sayıyı ayrıştırmaktan daha hızlı olduğu için, sabit değerler kullanmak yerine sık kullanılan kayan nokta değerlerini değişkenlerde saklamaktı. Kayan nokta tüm komutlar için varsayılan tür olduğundan, bağımsız değişkenler olarak tamsayılar yerine kayan noktalı sayıları kullanmak daha hızlıdır. Hız önemli olduğunda, bazı programcılar BASIC programlarının bölümlerini, bir dosyadan ayrı olarak yüklenen veya BASIC programının sonunda DATA deyimlerinden belleğe alınan 6502 veya 6510 Assembly diline dönüştürdüler ve doğrudan mod veya programın kendisinden . Bir oyun için veya kullanıcı girişi beklendiği gibi makine dilinin yürütme hızı çok yüksek olduğunda, programcılar seçilen bellek konumlarını (64 için $C6 [ 5 ] veya $D0 [ 6 ] gibi) okuyarak yoklayabilirler 128 için, klavye kuyruğunun boyutunu belirtir) yürütmeyi geciktirmek veya durdurmak için. SYS

Commodore BASIC'in benzersiz bir özelliği, ekranı temizleme veya imleci konumlandırma gibi bir program içinde görevleri gerçekleştirmek için kontrol kodlarının kullanılmasıdır; bunlar, X'in verilecek kontrol koduna karşılık geldiği bir komut vererek (örneğin, ekranı temizlemek için kullanılan kontrol kodudur) veya söz konusu tuşa tırnak içinde basılarak ve ardından Shift + CLR HOME tuşlarına basılarak çağrılabilir. bir alıntı, BASIC kontrol kodunun (bu durumda, tersine çevrilmiş bir kalp) görsel temsilini görüntüler, bu daha sonra program yürütmede üzerinde hareket edilir (kontrol kodlarını doğrudan yazdırmak, daha az bellek kullanır ve bir CHR$ işlevini çağırmaktan daha hızlı çalışır ). Bu, tipik olarak ekranı temizlemek veya imleci hareket ettirmek için özel komutlara sahip olan diğer BASIC uygulamalarıyla karşılaştırılır. BASIC 3.5 ve sonraki sürümleri, ekranı temizlemek ve imleci hareket ettirmek için özel komutlara sahiptir. PRINT CHR$(X)PRINT CHR$(147)

Commodore BASIC'deki program satırları hiçbir yerde boşluk gerektirmez (ancak LIST komutu her zaman satır numarası ile bildirim arasında bir tane gösterecektir), örneğin , ve programları boşluksuz yazmak yaygındı. Belirteçleyici anahtar sözcükler arasına eklenen boşlukları hiçbir zaman kaldırmadığından, belleği korumak için bu işlev eklenmiştir: boşlukların varlığı , belirteçleştirilmiş programda yürütme sırasında basitçe atlanan fazladan baytlara neden olur. Belirteç, satır numarası ile program bildirimi arasındaki boşlukları kaldırır. 100 IFA=5THENPRINT "YES":GOTO1600x20

Program satırları çoğu makinede toplam 80 karakter uzunluğunda olabilir, ancak 40 sütun metnine sahip makinelerde satırın ekranda bir sonraki satıra gitmesi gerekir ve 22 sütunlu ekrana sahip VIC-20'de program hatlar dörde kadar yer kaplayabilir. Commodore 128'deki BASIC 7.0, bir program satırının sınırını 160 karaktere çıkardı (dört satır 40 sütun veya iki satır 80 sütun). ?Bunun yerine gibi kısaltmalar kullanarak PRINT, bir satıra daha da fazlasını eklemek mümkündür. BASIC 7.0 ?STRING TOO LONG, kullanıcı 160 karakterden uzun bir program satırı girerse (dize çok uzun) bir hata görüntüler. Önceki sürümler bir hata üretmedi ve satır uzunluğu aşıldığında iki satır aşağıda HAZIR mesajını görüntüledi. Satır numarası, program satırındaki karakter sayısı olarak sayılır, bu nedenle beş basamaklı bir satır numarası, tek basamaklı bir sayıdan dört karakter daha az izin verilmesine neden olur.

Commodore BASIC satırlarının yürütme sırası, satır numaralandırmasıyla belirlenmemiştir; bunun yerine, satırların bellekte bağlantılı olduğu sırayı izlediler. [ 7 ] Program satırları, bir işaretçi (bir sonraki program satırının başlangıcının adresini içeren), bir satır numarası ve ardından satır için belirtilmiş kod içeren tek bir bağlantılı liste olarak bellekte saklandı . Bir program girilirken, BASIC, programın satırlarını, satır numaraları ve işaretçilerin tümü artan sırada olacak şekilde sürekli olarak yeniden sıraladı. Ancak, bir programa girdikten sonra, POKE komutlarıyla satır numaralarını ve işaretçileri manuel olarak değiştirmek, sıra dışı yürütmeye izin verebilir ve hatta her satıra aynı satır numarasını verebilir. BASIC'in ticari olarak kullanıldığı ilk günlerde, bu, programın rastgele değiştirilmesini engellemek için bir yazılım koruma tekniğiydi.

Satır numaraları 0 ile 65520 arasında değişebilir ve satır numarasında kaç basamak olduğuna bakılmaksızın depolanması beş bayt alır, ancak daha az basamak olduğunda yürütme daha hızlı olur. Birden çok ifadeyi bir satıra koymak daha az bellek kullanır ve daha hızlı çalışır.

GOTO ve GOSUB , ileri atlama yapılırsa bir satır numarası bulmak için mevcut satırdan aşağı arama yapacaktır, ancak geri atlama durumunda, arama programın başından başlar. Bu, daha büyük programları yavaşlatacaktır, bu nedenle yaygın olarak kullanılan alt rutinleri başlangıca yakın yerleştirmek tercih edilir.

Değişken isimleri sadece 2 karakter için anlamlıdır; VARIABLE1bu nedenle , değişken isimleri VARIABLE2ve VAtümü aynı değişkene atıfta bulunur.

Commodore BASIC ayrıca bitsel AND , OR ve XOR operatörlerini de destekler ; Bu özellik Microsoft BASIC 6502'nin çekirdek kodunun bir parçası olmasına rağmen, genellikle Applesoft BASIC gibi diğer uygulamalardan çıkarılmıştır .

Commodore BASIC'in yerel sayı biçimi, ana MS BASIC'inki gibi, kayan noktaydı . Çoğu çağdaş BASIC uygulaması üs için bir bayt ve mantis için üç bayt kullanırdı . Üç baytlık bir mantis kullanan bir kayan noktalı sayının kesinliği yalnızca yaklaşık 6,5 ondalık basamaktır ve yuvarlama hatası yaygındır. Microsoft BASIC'in 6502 uygulamaları, 40 bit kayan nokta aritmetiği kullandı; bu, 32 bit kayan nokta yerine, değişkenlerin depolanması için beş bayt (mantis için dört bayt ve üs için bir bayt) gerektirdiği anlamına gelir. .

Microsoft BASIC'in 8080/Z80 uygulamaları çift kesinlik ve tamsayı değişkenlerini desteklerken, 6502 uygulamaları yalnızca kayan noktalıydı.

Commodore BASIC, -32768 ila 32767 aralığında işaretli tamsayı değişkenlerini (yüzde işaretiyle gösterilir) desteklese de, pratikte bunlar yalnızca dizi değişkenleri için kullanılır ve dizi öğelerini her biri iki bayt (bir dizi) ile sınırlayarak belleği koruma işlevi görür. 2.000 öğeden biri, kayan nokta dizisi olarak bildirilirse 10.000 bayt, tamsayı dizisi olarak bildirilirse yalnızca 4.000 bayt alır). Herhangi bir değişkeni bir tamsayı olarak belirtmek, BASIC'in onu tekrar kayan noktaya dönüştürmesine neden olur, bu da programın yürütülmesini yavaşlatır ve belleği boşa harcar, çünkü her yüzde işaretinin depolanması için fazladan bir bayt gerekir (bu aynı zamanda tamsayı dizileri için de geçerli olduğundan, programcı kayan nokta olarak saklanırsa kullanılabilir belleği aşacak çok büyük diziler kullanılmadıkça bunları kullanmaktan kaçının). Ayrıca, işaretli bir tamsayı olarak tanımlanan adres ile 32767'nin üzerindeki bellek konumlarını POKE veya PEEK yapmak mümkün değildir .

0 sayısı yerine nokta (.) kullanılabilir (yani yerine veya yerine ), bu biraz daha hızlı çalışacaktır. 10 A=.10 A=010 FOR A=.TO 10010 FOR A=0 to 100

Commodore , makine dili programlarını başlatmak için kullanılan SYS ifadesini ekledi ve bu, Microsoft'un yalnızca makine dili rutinlerini çağırmak için USR işlevini içeren orijinal BASIC kodunda yoktu. SYS ifadesi , CPU kayıtlarını 30C-$30F (C64, diğer makinelerde değişiklik gösterir) değerleriyle otomatik olarak yükler; bu, verileri makine dili rutinlerine iletmek için veya BASIC'ten çekirdek işlevlerini çağırmanın bir aracı olarak kullanılabilir (örneğin, ekranı temizler). POKE 780,147:SYS 65490

C128 olmayan 8-bit Commodore makineleri diskten yazılımı otomatik olarak başlatamadığından, genel teknik, program yürütmeyi başlatmak gibi bir BASIC saplaması eklemektir. Yüklemeden sonra yazılımı otomatik olarak başlatmak mümkündür ve kullanıcının bir RUN ifadesi yazmasını gerektirmez, bu, BASIC "hazır" vektörünü $0302'ye bağlayan bir kod parçacığı ile yapılır . 10 SYS 2048

Diğer Microsoft BASIC sürümlerinde olduğu gibi , bir dizi DIM deyimiyle bildirilmezse , otomatik olarak on öğeye ayarlanır (pratikte 11, çünkü dizi öğeleri 0'dan sayılır). Daha büyük diziler bildirilmelidir, yoksa program çalıştığında BASIC bir hata görüntüler ve tüm değişkenler bir CLR deyimi tarafından temizlenmedikçe bir dizi programda yeniden boyutlandırılamaz. Sayısal diziler oluşturulduklarında otomatik olarak sıfırlarla doldurulur, büyük bir dizi boyutlandırılırsa programın yürütülmesinde anlık bir gecikme olabilir.

Dize değişkenleri, değişken adını "$" işaretiyle etiketleyerek temsil edilir. Bu nedenle, değişkenler AA$, AAve AA%ayrı olarak anlaşılacaktır. Dizi değişkenlerinin de basit değişkenlerden farklı olduğu düşünülür, bu nedenle A ve A(1) aynı değişkene gönderme yapmaz. Bir dize dizisinin boyutu, dinamik olarak ayrılan her bir öğenin boyutunu değil, dizide kaç tane dizenin depolandığını gösterir. Microsoft BASIC'in diğer uygulamalarının aksine, Commodore BASIC, bir programın başlangıcında ayrılmış bir dizi alanı gerektirmez.

Apple II gibi diğer 8 bitlik makinelerin aksine, tüm Commodore makinelerinde, açılışta 0'a başlatılan ve her PIA/VIA/TED/CIA zamanlayıcı işaretiyle güncellenen, yani saniyede 60 kez yerleşik bir saat bulunur. BASIC, TI ve TI$ içinde geçerli saati içeren iki sistem değişkenine atanır. TI salt okunurdur ve değiştirilemez; yaparsanız, bir sözdizimi hata mesajı görünecektir. TI$ , altı sayıdan oluşan bir dizi aracılığıyla saati ayarlamak için kullanılabilir (altı sayıdan farklı bir dizi kullanıldığında bir hata oluşur). Saat, çok güvenilir bir zamanlama yöntemi değildir, çünkü kesintiler her devre dışı bırakıldığında (bazı çekirdek rutinleri tarafından gerçekleştirilir) durur ve IEC portuna (veya PET üzerindeki IEEE portuna) erişim, saat güncellemesini birkaç geciktirir. .

Commodore BASIC'teki RND işlevi , rastgele sayılar üretmek için saati kullanabilir; bu, RND(0) tarafından gerçekleştirilir , ancak yalnızca 0 ile 255 arasındaki sayılar döndürüldüğü için nispeten sınırlı bir kullanıma sahiptir.Aksi halde, RND , bir dizinin sabit bir 5 aracılığıyla sözde rasgele kullanıldığı diğer Microsoft BASIC uygulamalarıyla aynı şekilde çalışır. - Açılışta C64'te 8 Milyar Dolar - 8 F Dolarlık bellek konumlarında depolanan bayt tohum değeri ( konum diğer makinelerde farklıdır). 0'dan büyük herhangi bir sayıya sahip RND, RND işlevine dahil edilen değerden ve bir RND işlevi her yürütüldüğünde 1 güncellenen başlangıç ​​değerinden birleştirilmiş rasgele bir sayı üretecektir . Negatif bir sayı ile RND , sayı ile belirtilen mevcut tohum değerinin dizisindeki bir noktaya gider.

RND deyimiyle gerçek rastgele sayı üretimi imkansız olduğundan, C64 ve C128'de rasgele sayılar için SID yongasının beyaz gürültü kanalını kullanmak daha yaygındır.

BASIC 2.0, son derece yavaş çöp dizisi koleksiyonundan kötü bir şekilde etkilendi. Çöp toplama, bir FRE işlevi her yürütüldüğünde otomatik olarak çağrılır ve bir program sırasında manipüle edilmiş çok sayıda dize değişkeni ve dizi varsa, bunların temizlenmesi en kötü koşullarda bir saatten fazla sürebilir. BASIC bu yordamı gerçekleştirirken RUN/STOP anahtarını taramadığından çöp toplama işlemini iptal etmek de mümkün değildir. BASIC 4.0, geliştirilmiş bir geriye dönük işaretçi çöp toplama sistemini tanıttı ve sonraki tüm Commodore BASIC uygulamaları da buna sahip.

BASIC 2.0'daki FRE işlevi , 32768'den büyük işaretli sayıları işleyemediği için başka bir hatadan muzdaripti, bu nedenle işlev bir C64'te (38k BASIC belleği) çağrılırsa, negatif bir sayı görüntülenecektir. boş BASIC belleğinin (ekleme) Bildirilen numaraya 65535, size doğru miktarda boş bellek verecektir). PET ve VIC-20, BASIC için hiçbir zaman 32k'den fazla kullanılabilir toplam belleğe sahip değildi, bu nedenle bu sınırlama, C64 geliştirilinceye kadar belirginleşmedi. BASIC 3.5 ve 7.0'daki FRE işlevi bu sorunu düzeltti ve BASIC 7.0'daki FRE de iki işleve "bölündü", biri boş BASIC program metin belleğini ve diğeri boş değişken belleği görüntülemek için.

Alternatifler

Image
Simon'ların TEMEL ana ekranı.

Yerel BASIC 2.0'ın nispeten sınırlı yetenekleri nedeniyle Commodore 64 için birçok BASIC uzantısı yayınlandı. En popüler uzantılardan biri , Commodore 1541 Test/Demo Diskinde bulunan DOS Wedge idi . BASIC'in bu 1KB uzantısı, bellekteki programı bozmadan diskten bir dizini okuma yeteneği de dahil olmak üzere diskle ilgili bir dizi komut ekledi. Özellikleri daha sonra popüler Epyx Fast Load kartuşu gibi çeşitli üçüncü taraf uzantılarına dahil edildi . BASIC'in diğer uzantıları, Simons'un BASIC gibi yüksek çözünürlüklü grafikleri, sesleri ve sprite'ları kodlamayı kolaylaştırmak için ekstra anahtar kelimeler ekledi .

BASIC 2.0'ın ses veya grafik özelliklerinin eksikliği birçok kullanıcı için sinir bozucu olsa da, bazı eleştirmenler, kullanıcıyı makine dilini öğrenmeye zorladığı için sonuçta faydalı olduğunu savundu.

BASIC 2.0'ın C64 üzerindeki sınırlamaları, BASIC ROM'da yerleşik makine dilinin kullanılmasına yol açtı. Bir dosyayı belirlenmiş bir bellek konumuna yüklemek için, bir çağrı dosya adını, sürücüyü ve cihaz numarasını okur: ; [ 8 ]​ konum X ve Y kayıtlarında belirtilecektir: ; [ 9 ]​ ve önyükleme şu şekilde çağrılır: . [ 10 ] SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

C64 için bir disk dergisi olan Loadstar , BASIC için komutla çağrılan proto-komut koleksiyonlarını paylaşan amatör programcılar için bir buluşma yeriydi SYS dirección + desplazamiento.

Modern programlama bakış açısından, Commodore BASIC'in önceki sürümleri, programcı için bir dizi kötü programlama hilesi sunuyordu. Bu sorunların çoğu Microsoft BASIC'ten kaynaklandığından, o zamanın neredeyse tüm ev bilgisayarı BASIC'leri benzer eksikliklerden muzdaripti. [ 11 ] Programcı , bir Microsoft BASIC programının her satırına bir satır numarası atadı. Program düzenleme veya hata ayıklama sırasında satır eklemeyi kolaylaştırmak için sayıları bir değer (5, 10 veya 100) artırmak yaygın bir uygulamaydı, ancak yetersiz planlama, bir programa büyük bölümler eklemek için genellikle tüm kodun yeniden yapılandırılması gerektiği anlamına geliyordu. Yaygın bir teknik, programın gövdesi 1000, 2000, vb. gibi belirlenmiş bir satır numarasından başlayan bölümlerde yapılandırılmış olarak, atlama tablosu ON...GOSUB ile bazı düşük satır numaralarında bir program başlatmaktı. Büyük bir bölümün eklenmesi gerekiyorsa, bir sonraki uygun ana hat numarası atanabilir ve atlama tablosuna eklenebilir.

Commodore ve diğer platformlardaki sonraki BASIC sürümleri, bir DELETE ve RENUMBER komutunun yanı sıra, seçilen bir artışa göre satır numaralarını otomatik olarak seçip ekleyen bir AUTO satır numaralandırma komutunu içeriyordu. Ayrıca, tüm değişkenler global değişkenler olarak kabul edilir. Açıkça tanımlanmış döngülerin oluşturulması zordur ve genellikle programcının GOTO komutuna güvenmesine yol açar (bu daha sonra BASIC 3.5'te DO, LOOP, WHILE, UNTIL ve EXIT eklenerek düzeltilmiştir ). Belirli görevleri gerçekleştirmek için genellikle bayrak değişkenlerinin oluşturulması gerekiyordu. Daha önceki Commodore BASIC'lerinde hata ayıklama komutları da yoktur, bu da hataların ve kullanılmayan değişkenlerin bulunmasının zor olduğu anlamına gelir. Microsoft BASIC Z80'in standart bir parçası olan IF...THEN...ELSE yapıları , Commodore BASIC'in önceki sürümlerinde kullanılamaz hale geldikten sonra BASIC 3.5'e eklendi.

Kullanıcı arayüzü olarak kullan

Diğer ev bilgisayarları gibi , Commodore'un makineleri de doğrudan BASIC yorumlayıcısına önyüklendi. BASIC programlama ve dosya komutları, yazılımı yüklemek ve çalıştırmak için doğrudan modda girilebilir . RUN/STOP tuşu ile programın yürütülmesi durdurulmuş ise değişkenlerin değerleri RAM'de tutulacak ve hata ayıklama için PRINT komutu ile başvurulabilecektir. 128, ikinci 64k bankasını değişken depolamaya adadı ve değerlerin bir NEWveya komutu verilene kadar devam etmesine izin verdi RUN. Bu, Commodore BASIC'te bulunan gelişmiş ekran düzenleyici ile birlikte programlama ortamına REPL benzeri bir his verdi ; programcılar, program satırlarını ekranda herhangi bir yere ekleyebilir ve düzenleyebilir, programı etkileşimli olarak oluşturabilir. [ 12 ] Bu, tipik olarak bir komut satırı arabirimine önyüklenen CP/M veya MS-DOS gibi zamanın iş odaklı işletim sistemlerinin aksine . Bu platformlarda bir programlama dili gerekiyorsa, ayrı olarak yüklenmesi gerekiyordu.

Commodore BASIC'in bazı sürümlerinde diske özgü DLOADy komutları bulunurken, Commodore 64'teDSAVE yerleşik sürüm bunlardan yoksundu ve kullanıcının standart komutta disk sürücüsünün aygıt numarasını (genellikle 8 veya 9) belirtmesini gerektiriyordu, aksi takdirde kaset olurdu. Commodore 64 BASIC 2.0'daki bir diğer eksiklik, ana belleği temizlemeden bir diskin içeriğini görüntüleme komutuydu. 64'te, dosyaların bir diskte görüntülenmesi, listelendiğinde dizini, dosyanın blok boyutu satır numarası olarak bir sözde BASIC programı olarak görüntüleyen bir "program" yükleme olarak uygulandı. Bu, yüklenen programın bellekte üzerine yazma etkisine sahipti. DOS Wedge gibi eklentiler, dizin listesini doğrudan ekran belleğinde görüntüleyerek bunun üstesinden geldi. LOADDIRECTORY

Sürümler ve özellikler

Art arda eklenen özelliklerle birlikte CBM BASIC sürümlerinin kronolojik sırayla bir listesi:

Yayınlanmış sürümler

  • V1.0: PET 2001, ciklet klavye ve Veri Kümesi ile (orijinal PET)
    • 256 elemanla sınırlı diziler
    • PEEK komutu , $C000 üzerindeki BASIC ROM konumlarında açıkça devre dışı bırakılır
  • V2.0 (ilk sürüm): Tam seyahat klavyesi ve güncellenmiş ROM ile PET 2001
    • IEEE-488 desteği ekler
    • geliştirilmiş çöp toplama [ 13 ]
    • dizi hatasını düzelt
    • Paskalya yumurtası: WAIT6502,[Sayı]MICROSOFT! girildiğinde rastgele sayıda görüntülenir
  • V4.0: PET/CBM 4000/8000 serisi (ve PET 2001'in en son sürümü)
    • disk işlemleri : DLOAD,DSAVE,COPY,SCRATCH,vb (toplam 15)
    • disk hatası kanalı değişkenleri:DS,DS$
    • Büyük ölçüde geliştirilmiş çöp toplama performansı [ 13 ]
  • V2.0 (ikinci sürüm, 4.0'dan sonra): VIC-20 ; C64
  • V4+: CBM-II serisi (B, P serisi olarak da bilinir)
    • hafıza yönetimi:BANK
    • daha fazla disk işlemi :BLOAD, BSAVE, DCLEAR
    • biçimlendirilmiş ekran:PRINT USING, PUDEF
    • yakalama hatası:DISPOSE
    • alternatif çatal:ELSE
    • dinamik hata işleme:TRAP, RESUME, ERR$()
    • esnek okuma DATA: RESTORE [satır numarası]
    • dizi arama işlevi:INSTR
  • V3.5: C16/116 , Artı/4
    • ses ve grafik komutları
    • joystick girişi :JOY
    • ondalıkonaltılık dönüşüm :DEC(),HEX$()
    • yapılandırılmış döngü:DO, LOOP, WHILE, UNTIL, EXIT
    • işlev tuşu ataması: KEY(ayrıca doğrudan mod)
    • programları girme/düzenleme:AUTO, DELETE, RENUMBER
    • hata ayıklama (iz):TRON, TROFF
    • MLM giriş komutu :MONITOR
    • Easter Egg C(1)16, Plus/4: <code>SYS 52650</code> girin
  • V7.0: C128
    • hareketli grafik işleme dahil olmak üzere daha fazla ses ve grafik komutu
    • entegre hareketli grafik düzenleyici:SPRDEF
    • yapılar için çoklu ifade blokları IF THEN ELSE:BEGIN,BEND
    • kürek , kalem :JARRO,PEN
    • İşlev veya özel :XOR
    • değişkenin adresini alın:POINTER
    • metin modundaki pencereler:WINDOW
    • kontrollü zaman gecikmesi:SLEEP
    • hafıza yönetimi:SWAP, FETCH, STASH, FRE(1)
    • program kodunu değişkenlerden ayrı olarak saklamak için 128 sıra anahtarlama kullanımı . Program GOTO komutuyla başlatılırsa, program yürütmeleri boyunca değişken değerler korunur.
    • daha fazla disk işlemi :BOOT, DVERIFY
    • CPU hız ayarı: FAST,SLOW(2'ye 1 MHz)
    • C64 moduna girin:GO64
    • belgesiz, çalışıyor: RREG(bir 'den sonra CPU kayıtlarını okur SYS)
    • uygulanmayan komutlar:OFF,QUIT
    • Paskalya Yumurtası C128 – Girin SYS 32800,123,45,6

Yayınlanmamış sürümler

  • V3.6: Commodore LCD (yayınlanmamış prototip). Aşağıdaki farklarla V7.0 ile neredeyse aynı: [ 14 ]
    • VOLUMENonun yerineVOL
    • EXITonun yerineQUIT
    • komutlar FAST, SLOWmevcut değil
    • Ek komut:POPUPS
  • V10: Commodore 65 (yayınlanmamış prototip)
    • grafik/video komutları:PALETTE, GENLOCK
    • fare girişi :MOUSE, RMOUSE
    • metin dosyası yardımcı programı ( SEQ):TYPE
    • program düzenleme:FIND, CHANGE
    • hafıza yönetimi:DMA, FRE(2)
    • uygulanmayan komutlar:PAINT, LOCATE, SCALE, WIDTH, SET, VIEWPORT, PASTE, CUT

Önemli uzantı paketleri

  • Süper Genişletici (VIC-20; ROM kartuşunda teslim edilir) (Commodore)
  • Süper Genişletici 64 (C64; kartuş) (Commodore)
  • Simons' Temel (C64; kartuş) (Commodore)
  • Grafik BASIC (C64; disket) ( Hesware )
  • BASIC 8 (C128; disket ve isteğe bağlı dahili ROM yongası) ( Walrusoft )

Ayrıca

Referanslar

  1. ^ 10 Aralık 2007'de Bilgisayar Tarihi Müzesi'ndeki Commodore 64 25. Yıldönümü Kutlamasında Jack Tramiel tarafından ifade edildi [1] 11 Aralık 2008'de Wayback Machine'de arşivlendi [2] 3 Ekim 2017'de Wayback Machine sitesinde arşivlendi . [3] .
  2. p=43 "Bill Gates'in 8-Bit BASIC'teki Kişisel Paskalya Yumurtaları - pagetable.com" . pagetable.com . 8 Ağustos 2018'de alındı . 
  3. ^ "Klavye ve Ekran Editörü" . Temmuz 1985. 
  4. ^ "Byte Temmuz 1983" . 
  5. ^ Leemon, Sheldon (1987). Commodore 64 & 64C'nin Haritalanması . BİLGİSAYAR! Yayınlar. p. 37. ISBN  9780874550825 . 25 Mart 2018'de alındı . 
  6. Cowper, Ottis R. (1986). Commodore 128'i Eşleme . BİLGİSAYAR! Yayınlar. p. 66 . ISBN  9780874550603 . 
  7. ^ "Comodore 64'ün Haritalandırılması" . 
  8. ^ Leemon, Sheldon (1987). Commodore 64 & 64C'nin Haritalanması . BİLGİSAYAR! Yayınlar. p. 209. ISBN  9780874550825 . 25 Mart 2018'de alındı . 
  9. ^ Leemon, Sheldon (1987). Commodore 64 & 64C'nin Haritalanması . BİLGİSAYAR! Yayınlar. p. 71. ISBN  9780874550825 . 25 Mart 2018'de alındı . 
  10. ^ Leemon, Sheldon (1987). Commodore 64 & 64C'nin Haritalanması . BİLGİSAYAR! Yayınlar. p. 231. ISBN  9780874550825 . 25 Mart 2018'de alındı . 
  11. ^ "Atari TEMEL ve PET Microsoft TEMEL. TEMEL Bir Karşılaştırma.” . 
  12. Scrimshaw, N.B. (11 Kasım 2013). Commodore 64'e Giriş: Programlamadaki Maceralar . ISBN  9781489967879 . 
  13. a b http://www.zimmers.net/anonftp/pub/cbm/firmware/README.txt
  14. ^ "Mike Naberezny – Commodore LCD Firmware" . mikenaberezny.com . 8 Ağustos 2018'de alındı . 
TEMEL 2.0
  • Angerhausen ve ark. (1983). The Anatomy of the Commodore 64 (tam referans için C64 makalesine bakın).
TEMEL 3.5
  • Gerard, Peter; Bergin, Kevin (1985). Komple COMMODORE 16 ROM Demontajı . Gerald Duckworth & Co. Ltd. ISBN  0-7156-2004-5 .
TEMEL 7.0
  • Jarvis, Dennis; Springer, Jim D. (1987). TEMEL 7.0 Dahililer . Grand Rapids, Michigan: Abacus Software, Inc. ISBN  0-916439-71-2 .
TEMEL 10.0

Dış bağlantılar