Atari TEMEL - Atari BASIC

Atari TEMEL
AtariBasicÖrnek.png
Çalışmaya hazır bir program
Aile TEMEL
Tarafından tasarlandı Paul Laughton
Kathleen O'Brien
geliştirici Shepardson Mikrosistemleri
İlk ortaya çıktı 1979 ; 42 yıl önce ( 1979 )
kararlı sürüm
Revizyon C / 1983 ; 38 yıl önce ( 1983 )
platformu Atari 8 bit ailesi
Lisans Ticari tescilli yazılım
Tarafından etkilenmiş
Veriler Genel İş Temel
Etkilenen
TEMEL XL , TEMEL XE, Turbo-Basic XL

Atari TEMEL bir olan tercüman için BASIC programlama dili ile sevk Atari 8-bit ailesinin içinde 6502 tabanlı ev bilgisayarları . Ev bilgisayarı çağının çoğu BASIC'inden farklı olarak Atari BASIC, Microsoft BASIC'in bir türevi değildir ve önemli şekillerde farklılık gösterir. Atari'ye özgü özellikler için anahtar sözcükler içerir ve örneğin dize dizileri için destekten yoksundur.

Dil başlangıçta 8 KB ROM kartuşu olarak dağıtıldı  . 600XL ve 800XL ile başlayarak, BASIC sistemde yerleşiktir ancak OPTIONönyükleme sırasında basılı tutularak devre dışı bırakılabilir . XEGS bağlı bir klavye beslenmesi durumunda TEMEL devre dışı bırakır.

Atari 8-bit bilgisayarların çoğu çağdaşından daha yüksek hızda çalışmasına rağmen, bazı teknik kararlar Atari BASIC'i performans kriterlerinde en alt sıralara yerleştirdi. Orijinal yazarlar bu sorunların çoğuna BASIC XL ve BASIC XE'de değindi . Turbo-Basic XL gibi bir dizi üçüncü taraf yorumlayıcı ve derleyici de ortaya çıktı.

Atari BASIC'in eksiksiz, açıklamalı kaynak kodu ve tasarım özellikleri, 1983 yılında The Atari BASIC Source Book olarak yayınlandı .

Tarih

Atari 8-bit ailesi olacak makineler, başlangıçta Atari VCS'nin yerini alması amaçlanan ikinci nesil video oyun konsolları olarak geliştirildi . Atari'nin yeni başkanı Ray Kassar , bunun yerine bir ev bilgisayarı yaparak Apple Computer'a meydan okumaya karar verdi .

Bu , ev bilgisayarları için standart olan BASIC programlama dilini içerecek tasarımlar anlamına geliyordu . Erken 1978 yılında Atari lisanslı kaynak kodu için MOS 6502 sürümü , Microsoft BASIC . İki sürümde sunuldu: biri derlendiğinde yaklaşık 7800 bayt olan 32 bit kayan nokta biçimini kullanıyor, diğeri ise 9 kB'ye yakın genişletilmiş 40 bit biçimini kullanıyor.

32-bit versiyonu bile, makinenin ROM kartuş formatının 8 kB boyutuna zar zor sığar . Atari, Apple'ın Applesoft BASIC ile yaptığına benzer şekilde, bilgisayarlarının donanım özelliklerini desteklemek için dili genişletmeleri gerektiğini de hissetti . Bu, Atari'nin sürümünün boyutunu yaklaşık 11 kB'ye çıkardı; Apple II+ üzerindeki AppleSoft BASIC , 10.240 bayt uzunluğundaydı. Altı ay sonra kod, neredeyse 8 kB ROM'a sığacak şekilde ayrıştırıldı, ancak Atari, makinelerin sergileneceği Tüketici Elektroniği Fuarı (CES) için Ocak 1979'a kadar bir son tarihle karşı karşıyaydı . Gösteri için zamanında BASIC'in bir versiyonunu hazırlamak için yardım istemeye karar verdiler.

Shepardson Mikrosistemleri

8K Atari TEMEL kartuş

Eylül 1978'de Shepardson Microsystems , BASIC'i tamamlama ihalesini kazandı ve Z80 tabanlı Cromemco S-100 otobüs makineleri için Cromemco 16K Structured BASIC'i bitiriyordu . Geliştiriciler Kathleen O'Brien ve Paul Laughton, Laughton'un zaman paylaşımlı bir sistemde Data General ile olan deneyimi göz önüne alındığında, BASIC'leri için ilham kaynağı olarak yalnızca tamsayılı bir uygulama olan Data General Basic'i kullandılar .

Atari BASIC haline gelen, 6502'ye taşınan Cromemco BASIC'in küçültülmüş bir versiyonudur. Bunun için 10K kod gerekiyordu. Atari'nin 8K kartuşuna sığdırmak için bazı yaygın rutinler işletim sistemi ROM'larına taşındı . Bu , ana kartta ayrı bir 2K ROM'a yerleştirilmiş kayan nokta desteği için 1780 bayt içeriyordu .

Atari teklifi kabul etti ve özellikler Ekim 1978'de tamamlanınca, Paul Laughton ve Kathleen O'Brien yeni dil üzerinde çalışmaya başladılar. Sözleşme, teslimat tarihini 6 Nisan 1979'da veya öncesinde belirtmişti ve buna ayrıca bir Dosya Yönetim Sistemi (daha sonra DOS 1.0 olarak bilinecekti) de dahildi. Atari'nin planları, Microsoft BASIC'in erken bir 8K sürümünü 1979 CES'e taşımak ve ardından üretim için Atari BASIC'e geçmekti. Geliştirme , sözleşmedeki bir bonus maddesinin yardımıyla hızlı bir şekilde ilerledi ve Atari, Microsoft'un yerine CES'e 8K kartuş versiyonunu aldı. Atari Microsoft BASIC daha sonra ayrı bir ürün olarak kullanıma sunuldu.

Salıverme

Shepardson'ın CES demosu için Atari'ye verdiği versiyonun son versiyon olması gerekmiyordu. Demoyu teslim ettikleri zaman ile birkaç hafta sonraki son teslimat arasında, Shepardson koddaki birkaç hatayı düzeltti. Shepardson'ın bilmediği Atari, CES versiyonunu zaten üretime göndermişti.

Bu sürüm daha sonra Revizyon A olarak biliniyordu . Belleği kopyalayan bir alt yordamda büyük bir hata içeriyor; tam olarak 256 bayt uzunluğundaki kod satırlarını silmek, kilitlenmeye neden olur. Bir sonraki kod veya komut satırı girilene kadar tetiklenmediği için bu bazen "iki satırlı kilitleme" olarak biliniyordu. ResetTuşa basılarak düzeltilemez .

Revizyon B , Revizyon A'daki tüm önemli hataları düzeltmeye çalıştı ve 1983'te 600XL ve 800XL modellerinde yerleşik bir ROM olarak piyasaya sürüldü. Programcı, bellek kopyalama hatasını düzeltirken, satır ekleme bölümünde aynı kod modelini fark etti ve aynı düzeltmeyi uyguladı. Bu, bunun yerine orijinal hatayı bu koda dahil etti. Yeni satırlar eklemek, eskileri silmekten çok daha yaygındır, bu nedenle değişiklik, kilitlenme sayısını önemli ölçüde artırdı. Revizyon B ayrıca, bir programa her SAVEd ve LOADed olduğunda 16 bayt ekleyen ve sonunda makinenin en küçük programlar için bile belleğinin dolmasına neden olan bir hata içerir . Atari'yi haritalamak, bunları "harika hatalar" olarak nitelendirdi ve Revizyon B sahiplerine "Aptallık etmeyin; kartuşta bulunan yeni ROM'u Atari'den alın" tavsiyesinde bulundu. Kitap , kartuşu olmayanlar için Revizyon B'yi Revizyon C'ye yamalamak için bir giriş programı sağlar.

Revizyon C , Revizyon B'deki bellek sızıntılarını ortadan kaldırır. 800XL'nin sonraki sürümlerinde ve XEGS dahil tüm XE modellerinde yerleşiktir. Revizyon C kartuş olarak da mevcuttu.

Sürüm PRINT PEEK(43234), HAZIR komut istemine yazılarak belirlenebilir . Sonuç, 162Revizyon A, 96Revizyon B ve 234Revizyon C içindir.

Açıklama

Program düzenleme

Sözdizimi hataları, bir satır girildikten hemen sonra rapor edilir.

Çoğu ev bilgisayarı BASIC'i gibi, Atari BASIC de satır düzenleyicisinin etrafına sabitlenmiştir . Program satırları toplamda 120 karakter olmak üzere 40 karakterlik üç fiziksel ekran satırı olabilir. Editör, mevcut ekran satırının hangi BASIC program satırının parçası olduğunu otomatik olarak izleyerek imleç serbestçe hareket ettirilebilir. Örneğin, imleç şu anda 30. satırda konumlanmışsa ve kullanıcı imleç yukarıyı 20. satırda kullanıyorsa, bu noktadan sonraki herhangi bir düzenleme 20. satırda gerçekleştirilecektir.

Atari BASIC'in editörü, MS'den türetilen sürümlerde fark edilmeyecek birçok hatayı yakalar. Bir hata bulunursa, editör, ters videoda hatanın yanındaki metni vurgulayarak satırı yeniden görüntüler . Hatalar, kılavuzda basılmış açıklamalarla sayısal kodlar olarak görüntülenir. Satır düzenleyicinin çalışma şekli nedeniyle, kullanıcı hatayı hemen düzeltebilir. Yukarıda gösterilen örnekte ( ile PRUNT), imleci üzerine getirerek U, yazarak I(düzenleyicinin yalnızca üzerine yazma modu vardır) ve tuşuna basarak hata düzeltilebilir RETURN.

0'dan 32767'ye kadar önde gelen bir sayı ile girilen bir satır, geçerli programa eklenir veya mevcut bir satırın yerini alır. Satır numarası yoksa, yorumlayıcı ona -1 (8000 16 ) sayısını atar ve komutlar "immediate mode"da hemen yürütülür. RUNKomut düşük hat numarası depolanmış programı çalıştırır. Atari BASIC, tüm komutların her iki modda da yürütülmesine izin verir. Örneğin, LISTbir programın içinde kullanılabilir, oysa birçok tercümanda bu yalnızca anında modda kullanılabilir.

Giriş sırasında, Palo Alto Tiny BASIC tarafından belirlenen kalıp kullanılarak , kelimenin herhangi bir noktasında bir nokta yazılarak anahtar kelimeler kısaltılabilir . Yani L.şekilde genişletilir LISTgibidir, LI.. Kısaltmayı benzersiz kılmak için yalnızca yeterli sayıda harf yazılmalıdır, bu nedenle tek harf P benzersiz olmadığından PLOTgerektirir PL.. Bir kısaltmayı genişletmek için belirteç, sağlanan kısımla eşleşen ilk kelimeyi bulmak için ayrılmış kelimeler listesinde arama yapar. Daha yaygın olarak kullanılan komutlar, ayrılmış sözcükler listesinde ilk sırada REMyer alır ve başında (olarak yazılabilir .). Program daha sonra LISTdüzenlendiğinde, üç istisna dışında her zaman tam kelimeleri yazacaktır: PRINTeşanlamlıdır, ?; GOTOeş anlamlısı vardır, GO TO; ve LETboş bir dize olan bir eşanlamlı vardır (böylece ve aynı anlama). Bunlar ayrı belirteçlerdir ve bu nedenle program listesinde olduğu gibi kalacaktır. MS temelleri de izin için kısa form olarak , ancak geri genleşmiş halde bu belirteci kullanıldığında zaman bir kısaltma, bir eş anlamlı olarak ele alıp, ed. 10 LET A = 1010 A = 10?PRINTPRINTLIST

belirteç

Kullanıcı RETURNdüzenleme sırasında bastığında, mevcut satır 580 ile 5FF 16 arasında bellekteki BASIC Input Line Buffer'a kopyalanır . Atari Basic'in tokenizer (örneğin, belirteç bir tek baytlık her bir anahtar kelimeyi dönüştürme, metin tarar PRINT20 16 ), altı baytlık kayan nokta değeri her bir numara, bir tabloya dizin, her değişken ismi ve böylece, satır tamamen yorumlanması kolay bir formata dönüşene kadar. Sonuç, 81 80 ° C'de saklanan LOMEM gösterici ile gösterilen en düşük boş hafıza mevcut ilk 256 bayt yer alan bir çıkış ara depolanır 16 . Belirteçleyiciden gelen çıktı daha sonra yeniden konumlandırılır. Program bir ayrıştırma ağacı olarak saklanır .

Shepardson, bu tam tokenleştirme konseptine "derleme öncesi yorumlayıcı" olarak atıfta bulundu. Ortaya çıkan belirteçli kod, çalışma zamanı sırasında herhangi bir ayrıştırmayı ortadan kaldırarak daha hızlı çalışmasını sağlar. 0 veya 1 gibi küçük sabitlerin her birinin orijinal metinden daha uzun altı bayt olması dezavantajına sahiptir.

Bir dizi işaretçi (adres) çeşitli verileri gösterir: değişken adları değişken adı tablosunda (VNTP – 82, 83 16 ) saklanır ve değerleri değişken değer tablosunda saklanır (VVTP – 86, 87 16'da gösterilir ). By indirecting bu şekilde değişken isimleri, bir değişkenin başvurusu uygun tabloya girmesinden adrese tek bayt gerekiyor. Döngü ifadelerinin ( ) ve alt rutinlerin ( ) satır numaralarını depolamak için kullanılan çalışma zamanı yığını (RUNSTK – 8E, 8F 16'da gösterilir) gibi dize değişkenlerinin de kendi alanı vardır (STARP – 8C, 8D 16'da gösterilir ). Son olarak, BASIC bellek kullanımının sonu, MEMTOP – 90, 91 16 ) işaretçisinde saklanan bir adres ile belirtilir . FOR...NEXTGOSUB...RETURN

matematiksel fonksiyonlar

Atari BASIC üç trigonometrik fonksiyon içerir: sinüs, kosinüs ve ark tanjantı. DEGve RADbu işlevlerin radyan mı yoksa derece mi kullanacağını, varsayılan olarak radyan olarak ayarlayın. Sekiz ek işlev, yuvarlama, logaritma ve karekökü içerir. Rastgele işlevi, RND0 ile 1 arasında bir sayı üretir; parametre kullanılmıyor.

dize işleme

Atari BASIC , temel veri türünün tek bir karakter olduğu ve dizelerin karakter dizileri olduğu Hewlett-Packard BASIC'in dize işleme sistemini kopyaladı . Dahili olarak, bir dize, dizedeki ilk karaktere ve uzunluğuna bir işaretçi ile temsil edilir. Bir dizeyi başlatmak için, maksimum uzunluğuyla DIMensioned olmalıdır. Örneğin:

10 DIM A$(20)
20 PRINT "ENTER MESSAGE: ";
30 INPUT A$
40 PRINT A$

Bu programda, 20 karakterlik bir dize ayrılmıştır ve dize uzunluğunu aşan herhangi bir karakter kesilecektir. Bir dizenin maksimum uzunluğu 32.768 karakterdir. Dize dizileri için destek yoktur.

Dizi indeksleme işlevleri veya dilimleme kullanılarak bir dizeye erişilir . A$(1,10)öğesinin ilk 10 karakterinden oluşan bir dize döndürür A$. Diziler 1 dizinlidir, bu nedenle 10 uzunluğundaki bir dize 1'de başlar ve 10'da biter. Dilimleme işlevleri, yalnızca işaretçileri mevcut ayrılmış bellek içindeki başlangıç ​​ve bitiş noktalarına ayarlar.

Diziler başlatılmaz, bu nedenle sayısal bir dizi veya dize, tahsis edildiğinde bellekte bulunan verileri içerir. Aşağıdaki numara, hızlı dize başlatmaya izin verir ve aynı zamanda, geniş bellek alanlarını istenmeyen çöplerden temizlemek için de yararlıdır. Sayısal diziler yalnızca FOR...NEXT döngüsüyle temizlenebilir:

10 REM Initialize A$ with 1000 characters of X
20 DIM A$(1000)
30 A$="X":A$(1000)=A$:A$(2)=A$

Dize bitiştirme aşağıdaki örnekteki gibi çalışır. Hedef dize, birleştirilmiş dizeyi tutacak kadar büyük olmalıdır, aksi takdirde bir hata oluşur:

10 DIM A$(12),B$(6)
20 A$="Hello ":B$="there!"
30 A$(LEN(A$)+1)=B$
40 PRINT A$

DATA deyimlerindeki değerler virgülle sınırlandırılmıştır ve türlendirilmemiştir. Sonuç olarak DATA ifadelerindeki dizeler tipik olarak tırnak işaretleri içine alınmaz. Sonuç olarak, veri öğelerinin virgül içermesi mümkün değildir, ancak çift tırnak içerebilirler. DATA deyimlerindeki sayısal değerler, okundukları değişkenin türüne göre dizeler veya sayılar olarak okunur. READ deyimi dizi değişkenleriyle kullanılamaz.

Giriş çıkış

Atari İşletim Sistemi , CIO (Merkezi Giriş/Çıkış) olarak bilinen çevresel aygıt giriş/çıkış (G/Ç) için bir alt sistem içerir . Çoğu program, tümü ortak bir arabirime uyduğundan, hangi aygıtı kullanabileceklerinden bağımsız olarak yazılabilir; Bu, o zamanlar ev bilgisayarlarında nadir görülen bir şeydi. Atari BASIC ve Atari İşletim Sistemini kullanan diğer herhangi bir program tarafından otomatik olarak kullanılabilen yeni aygıt sürücüleri oldukça kolay bir şekilde yazılabilir ve mevcut sürücüler yenileri ile desteklenebilir veya artırılabilir. Örneğin, bir yedek E: 80 sütunlu bir görüntü sağlamak için ROM'dakinin yerini alabilir veya bir satır döndürüldüğünde (bir tür program listesini doğrulamak için kullanıldığı gibi) bir sağlama toplamı oluşturmak için üzerine bindirebilir .

Atari BASIC, OPEN #, CLOSE #, PRINT #, INPUT #, GET #, PUT #, NOTE #, POINT # ve XIO # ayrılmış sözcükleri ile CIO erişimini destekler . İşletim sisteminde basit grafik çizim işlevleri için rutinler vardır, ancak tümü belirli BASIC anahtar sözcükleri olarak mevcut değildir. Çizgi çizme için PLOT ve DRAWTO desteklenirken, ilkel doğrusal geometrik şekiller için alan dolgusu sağlayan bir komut desteklenmez. Doldurma özelliği, BASIC komutu XIO kullanılarak çağrılan genel CIO giriş noktası aracılığıyla kullanılabilir .

BASIC OPEN # ifadesi , bir cihazı G/Ç erişimi için hazırlar:

10 REM Opens the cassette device on channel 1 for reading in BASIC
20 OPEN #1,4,0,"C:MYPROG.DAT"

Burada, OPEN # "kanal 1'in boş olduğundan emin olun" anlamına gelir , cihazı hazırlamak için C: sürücüsünü çağırın (bu, kaset makaralarını gerginliğe ayarlayacak ve kasetçaları "duraklatılmış" tutarak kafaları ilerletecektir. 4 "oku" anlamına gelir " (diğer kodlar yazma için 8 ve "oku ve yaz" için 12 = 8 + 4'tür ). Üçüncü sayı yardımcı bilgidir, gerekmediğinde 0'a ayarlanır. C:MYPROG.DAT cihazın adıdır. ve dosya adı, dosya adı kaset sürücüsü için yok sayılır. Fiziksel aygıtların numaraları olabilir (esas olarak diskler, yazıcılar ve seri aygıtlar), bu nedenle " P1: " çizici ve " P2: " papatya çarklı yazıcı veya " D1: " bir disk sürücüsü ve " D2: " vb. olabilir. Mevcut değilse 1 olduğu varsayılır.

LPRINT ifadesi yazıcıya bir dize gönderir.

A, klavye sürücüsü tarafından korunan PEEK bellek konumları tarafından veya bir dosya olarak açılarak (örneğin ) okunur . İkincisi bir tuşa basılmasını bekler. OPEN 1,4,0,"K:":GET #1,A$

BASIC'ten yazmak DOS, Atari DOS komut menüsüne çıkar . Geçerli diskte bellek değiştirme dosyası özelliği etkinleştirilmedikçe, kaydedilmemiş tüm programlar kaybolur. BASIC içinden bir disk dizini görüntüleme komutu yoktur; bu, DOS'tan çıkılarak yapılmalıdır.

Grafikler ve ses

Atari BASIC, sesi ( SOUND ifadesi aracılığıyla ), grafikleri ( GRAPHICS, SETCOLOR, COLOR, PLOT, DRAWTO ) ve kontrol cihazlarını ( STICK, STRIG, PADDLE, PTRIG ) destekler. SES deyimi setleri hacim, perde ve bozulma için parametrelerle donanımın 4 kare dalga kanallarından biri.

Böyle yüksek zift çözünürlük, yüksek geçiren filtreler, sayısallaştırılmış ses ve dalga, oyuncu / füze grafik (aynı donanım Gelişmiş yetenekleri sprite ), en yeniden karakter kümeleri, kaydırma ve modlar BASIC tarafından desteklenmeyen özel grafikler; bunlar makine dili rutinleri veya PEEK/POKE deyimleri gerektirecektir. Donanım tarafından desteklenen 17 temel karakter/grafik modundan birkaçına, OS ROM'ları desteklemediği için Atari 400/800'deki BASIC'ten kolayca erişilemez. Bunlar, bazı çok renkli karakter modlarını (ANTIC modları 4 ve 5), azalan karakter modunu (ANTIC modu 3) ve en yüksek çözünürlüklü 2 ve 4 renkli modları (ANTIC modları C & E, 160x192 piksel) içerir. Bunlara erişmenin tek yolu PEEK/POKE veya makine dili aracılığıyla ANTIC kayıtlarını ve Görüntüleme Listesini manuel olarak ayarlamaktır. XL/XE üzerindeki OS ROM'ları, doğru çalışması için RAM'de yeniden tanımlanmış bir karakter seti gerektiren ANTIC mod 3 dışında bu modlar için destek ekledi.

BASIC'teki bitmap modları, normalde ekranın altındaki son dört satırı kaplayan bir metin penceresine sahip olacak şekilde ayarlanmıştır, böylece kullanıcı istemleri görüntüleyebilir ve bir programa veri girebilir. GRAPHICS deyimi aracılığıyla çağrılan mod numarasına 16 eklenirse, tüm ekran bitmap modunda olacaktır (örneğin GRAPHICS 8+16). Tam ekranda bitmap modu çağrılırsa, program yürütmesi sonlandırıldığında Atari BASIC zarif bir şekilde metin moduna geri döner ve kullanıcıyı bir kör komut yazarak veya bilgisayarı sıfırlayarak kaçması gereken yanıt vermeyen bir ekranla bırakmaktan kaçınır.

Bitmap koordinatları 0 ila maksimum satır/sütun eksi bir aralığındadır, bu nedenle Mod 6'da (160x192), bir piksel için maksimum koordinatlar 159 ve 191 olabilir. Atari BASIC, a modu için izin verilen koordinatların ötesinde çizim yapmaya çalışırsa çalışma zamanı hatası oluşur.

Gelişmiş teknikler

Satır etiketleri

Atari BASIC, komutlara GOTOve GOSUBkomutlara satır numaraları sağlamak için sayısal değişkenlerin ve ifadelerin kullanılmasına izin verir . Örneğin, ekranı temizleyen bir alt yordam olarak yazılabilir GOSUB CLEARSCREEN, bu da anlaşılmasından daha kolaydır GOSUB 10000.

Belleği değiştirmenin bir yolu olarak dizeler

Bir dizenin temel adresleri bir değişken tablosunda saklanır. Dize adresleri, RAM'in rastgele alanlarını işaret edecek şekilde yeniden yönlendirilebilir. Bu, dizi ve alt dizi atamalarının altında yatan hızlı bellek kaydırma rutinlerinin BASIC'ten ekran veya oynatıcı/füze grafikleri için kullanılan belleğe uygulanabilmesini sağlar. Bu, oyuncu/füze görüntülerinin doğrudan Atari BASIC'ten hızlı dikey hareketini sağlamak için özellikle kullanışlıdır.

DATA/RESTORE aracılığıyla rastgele erişim

Sayısal değişkenler ve ifadeler için parametre olarak kullanılabilir RESTOREizin tablosu DATAifadeleri rasgele gibi kodu ile erişilebilir RESTORE ROOMBASE+ROOMNUMBER:READ DESCRIPTION$, TREASURE$, EXITS. Bu, statik dize dizilerini taklit etmek için de kullanılabilir: RESTORE STRBASE+INDEX:READ A$:PRINT A$.

TRAP ile hata işleme

TRAPBir hata oluştuğunda tablosu tam sayıya atlar ve bu manuel hata denetimi ihtiyacını azaltır. Örneğin, ekranda grafik çizerken, çizgilerin mevcut grafik modunun ekran sınırlarının dışına çıkıp çıkmadığını kontrol etmek gerekli değildir. Bu hata durumu yakalanabilir ve gerekirse hata işlenebilir.

İçerir

ENTERKomutu bir cihazdan kaynak kodunu okur ve kullanıcı bunu yazmış sanki, mevcut program içine birleştirir. Bu programlar aracılığıyla bölümlerde dışarı kaydedilmesini sağlar LISTkullanarak bunları okurken, ENTERbirleştirme veya mevcut kodunu değiştirmek için. Programcılar, çakışmayan satır numarası bloklarını kullanarak alt program kitaplıkları oluşturabilir ve gerektiğinde bunları yeni programlarla birleştirebilir.

Kendi kendini değiştiren kod

Düzenleyici, bir EOF'ye ulaşılana kadar ekrandan girişi tekrar tekrar okuyacak şekilde ayarlanabilir. Bu, bir programın yeni program kodu yazmasını ve ardından CONTekrana bir ifade yazmasını , ardından ekran imlecini yeni kodun başına STOPkonumlandırarak, çalışan programı, yeni kodun okunmasını ve ardından yürütmenin ifade tarafından sürdürülmesini sağlar CONT.

Gömülü makine dili

Atari BASIC, dizelerde saklanan veya POKEbelleğe kaydedilen makine kodu alt programlarını çağırabilir . 1536 10 (600 16 ) adresinden başlayan 256 baytlık alan genellikle bu amaç için kullanılır.

Makine kodu, USRişlevle birlikte çağrılır . İlk parametre alt programın adresidir ve aşağıdaki değerler parametrelerdir. Kod adlı bir dizgede saklanıyorsa, ROUTINE$iki parametre ile çağrılabilir . ANSWER=USR(ADR(ROUTINE$),VAR1,VAR2)

Parametreler, USRçağrıda belirtilen sırada düşük bayt, yüksek bayt sırasında 16 bit tamsayılar olarak donanım yığınına itilir . Argüman sayısını gösteren son bir bayt gönderilir. Makine dili kodu, RTStalimat yoluyla geri dönmeden önce bu değerleri kaldırmalıdır . 16 bitlik bir değer, 212 10 ve 213 10 (D4 16 ve D5 16 ) adreslerine yerleştirilerek BASIC'e döndürülebilir .

Verim

Teoride, Atari BASIC, MS modeline dayalı çağdaş BASIC'lerden daha hızlı çalışmalıdır. Kaynak kodu, girildiğinde tamamen belirtilmiş olduğundan, tüm belirteçleştirme ve ayrıştırma adımları zaten tamamlanmıştır. Karmaşık matematiksel işlemler bile, dahili 40-bit formatına dönüştürülmüş herhangi bir sayısal sabit ile çalışmaya hazırdır ve değişken değerleri aranmak yerine adrese göre aranır. Bu teorik avantajlara rağmen, pratikte Atari BASIC, diğer ev bilgisayarı BASIC'lerinin çoğundan daha yavaştır , bu genellikle büyük orandadır.

Dönemin yaygın olarak kullanılan iki kriterinde , Byte dergisinin Sieve of Eratosthenes'i ve David H. Ahl tarafından yazılan Creative Computing benchmark testinde , Atari performans açısından listenin sonuna yaklaştı ve çağdaş Apple II'den çok daha yavaştı. veya Commodore PET , aynı CPU'ya sahip olmasına rağmen her ikisinin de kabaca iki katı hızda çalıştırıyor. Sinclair ZX81 gibi nispeten yavaş makinelerin ve hatta bazı programlanabilir hesap makinelerinin arkasında bitti .

Dilin yavaşlığının çoğu üç problemden kaynaklanmaktadır.

Birincisi, kayan noktalı matematik rutinlerinin yetersiz şekilde optimize edilmiş olmasıdır. Ahl karşılaştırmasında, dahili olarak çarpma işlevinin üzerinden geçen tek bir üs işlemi, makinenin kötü performansının çoğundan sorumluydu. Kayan nokta ve 16 bit tam sayılar arasındaki dönüşüm özellikle yavaştır. Dahili olarak, bu tamsayılar birkaç başka görevle birlikte satır numaraları ve dizi indeksleme için kullanılır, ancak belirtilmiş programdaki sayılar ikili kodlu ondalık (BCD) biçiminde saklanır . 'deki satır numarası gibi bunlardan biriyle karşılaşıldığında, GOTO 100BCD değeri 3500 mikrosaniyeye kadar sürebilen bir tam sayıya dönüştürülür.

Bir diğer konu da Atari BASIC'in şubeleri nasıl uyguladığıdır. a GOTOveya 'da dal yapmak GOSUBiçin yorumlayıcı, eşleşen satır numarasını tüm programda arar.

İlgili ve daha ciddi bir sorun, FOR... NEXTdöngülerinin uygulanmasıdır . Bir FORifade yürütüldüğünde, satır numarası hatırlanır. Her NEXTulaşıldığında, son kez aynı yerde olmasına rağmen programda o satırı arar.

Birkaç üçüncü taraf BASIC, bu sorunların bir kısmını veya tamamını ele aldı. BASIC XL , Byte kıyaslama süresini üç kat daha hızlı bir şekilde 194'ten 58 saniyeye düşürdü . Ahl karşılaştırmasında, Atari BASIC 405 saniyeye ihtiyaç duyarken, Turbo BASIC'teki tam olarak aynı kod 41.6 saniye sürdü, bu da bir büyüklük sıralamasıydı.

Microsoft BASIC'ten Farklar

  • Sözdizimi kontrol edilir ve hatalar satır girişinde hemen vurgulanır.
  • Değişken adları isteğe bağlı uzunlukta olabilir ve tüm karakterler önemlidir.
  • Aşağıdaki anahtar sözcükler Atari BASIC'te yoktur: INKEY$, CLS, DEF FN, SPC, TAB, ELSE.
  • Microsoft BASIC, boyutlandırılmamışsa bir diziyi varsayılan olarak 10 öğeye ayarlarken, tüm diziler kullanımdan önce boyutlandırılmalıdır.
  • Dize değişkenleri, karakter dizileri olarak değerlendirilir ve kullanılmadan önce boyutlandırılmalıdır. MS BASIC, dizeleri öbek üzerinde depolar ve bazen çöp toplama için duraklar .
  • , ve işlevleri LEFT$, dize indeksleme ile değiştirilir.MID$RIGHT$
  • Dize birleştirme için bir operatör yok.
  • Dize dizileri yoktur.
  • Tamsayı değişkenleri için destek yoktur.
  • Bitsel operatörler yoktur.
  • INPUT komut istemine izin vermez.
  • PRINT?Microsoft BASIC'deki gibi kısaltılabilir , ancak Atari BASIC onu PRINT. Soru işareti olarak kalıyor.
  • Hedefi GOTOve GOSUBbir değişken ya da ifade olabilir.
  • RESTOREparametre olarak sayısal bir sabit, değişken veya ifade alabilir ve bir sonrakinin READbelirtilen satır numarasından başlamasına neden olabilir
  • FOR..NEXTAtari BASIC'deki döngüler, NEXTMicrosoft BASIC bunu gerektirmezken ifade tarafından başvurulan bir değişken adına sahip olmalıdır .
  • NEXTMicrosoft BASIC'te olduğu gibi (örneğin, NEXT X,Y) ifadelerde birden çok değişkene izin verilmez .
  • LIST aralığı ayırmak için eksi işareti yerine virgül kullanır.

anahtar kelimeler

Ayrıca bakınız

Notlar

Referanslar

Alıntı

bibliyografya

Dış bağlantılar