Atari TEMEL - Atari BASIC
Aile | TEMEL |
---|---|
Tarafından tasarlandı | Paul Laughton Kathleen O'Brien |
geliştirici | Shepardson Mikrosistemleri |
İlk ortaya çıktı | 1979 |
kararlı sürüm | Revizyon C / 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
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 SAVE
d ve LOAD
ed 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ç, 162
Revizyon A, 96
Revizyon B ve 234
Revizyon C içindir.
Açıklama
Program düzenleme
Ç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. RUN
Komut 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, LIST
bir 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 LIST
gibidir, 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 PLOT
gerektirir 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 REM
yer alır ve başında (olarak yazılabilir .
). Program daha sonra LIST
düzenlendiğinde, üç istisna dışında her zaman tam kelimeleri yazacaktır: PRINT
eşanlamlıdır, ?
; GOTO
eş anlamlısı vardır, GO TO
; ve LET
boş 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 = 10
10 A = 10
?
PRINT
PRINT
LIST
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 PRINT
20 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...NEXT
GOSUB...RETURN
matematiksel fonksiyonlar
Atari BASIC üç trigonometrik fonksiyon içerir: sinüs, kosinüs ve ark tanjantı. DEG
ve RAD
bu 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, RND
0 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 GOTO
ve GOSUB
komutlara 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 RESTORE
izin tablosu DATA
ifadeleri 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
TRAP
Bir 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
ENTER
Komutu 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 LIST
kullanarak bunları okurken, ENTER
birleş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 CONT
ekrana bir ifade yazmasını , ardından ekran imlecini yeni kodun başına STOP
konumlandı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 POKE
belleğ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, USR
iş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, RTS
talimat 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 100
BCD 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 GOTO
veya 'da dal yapmak GOSUB
için yorumlayıcı, eşleşen satır numarasını tüm programda arar.
İlgili ve daha ciddi bir sorun, FOR
... NEXT
döngülerinin uygulanmasıdır . Bir FOR
ifade yürütüldüğünde, satır numarası hatırlanır. Her NEXT
ulaşı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 onuPRINT
. Soru işareti olarak kalıyor. - Hedefi
GOTO
veGOSUB
bir değişken ya da ifade olabilir. -
RESTORE
parametre olarak sayısal bir sabit, değişken veya ifade alabilir ve bir sonrakininREAD
belirtilen satır numarasından başlamasına neden olabilir -
FOR..NEXT
Atari BASIC'deki döngüler,NEXT
Microsoft BASIC bunu gerektirmezken ifade tarafından başvurulan bir değişken adına sahip olmalıdır . NEXT
Microsoft 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
Anahtar kelime | Açıklama |
---|---|
ABS | Bir sayının mutlak değerini döndürür |
ADR | Bir değişkenin belleğindeki adresi döndürür (çoğunlukla değişkenlerde saklanan makine kodu rutinleri için kullanılır) |
VE | mantıksal bağlaç |
ASC | Bir karakterin ATASCII değerini döndürür |
ATN | Bir sayının arktanjantını döndürür |
HOŞÇAKAL | Kontrolü dahili "Self Test" programına aktarır (önceki modellerde "Memo Pad") |
CHR$ | ATASCII değeri verilen bir karakter döndürür |
YÜK | Dan yükler kaset kaset bir simgeleþtirilmiþ CSAVE ile kurtarıldı programı |
TIKANMA | Bir sayının ortak logaritmasını döndürür |
KAPAT | Bekleyen aktarımları (flush) sonlandırır ve bir G/Ç kanalını kapatır |
CLR | Değişkenlerin hafızasını ve program yığınını temizler |
RENK | Hangi mantıksal rengin çizileceğini seçer |
COM | MS Basic'in ORTAK uygulamasının uygulanması iptal edildi. Tanındı, ancak bunun yerine DIM kodu yürütülüyor |
DEVAMI | Bir sonraki satır numarasında bir STOP'tan sonra bir programın yürütülmesine devam eder (bkz. STOP) |
çünkü | Bir sayının kosinüsünü döndürür |
CSAVE | İçin kaydeder kaset bir program simgeleştirilmiş formu (CLOAD bakınız) |
VERİ | Verileri sayısal veya dize değerleri listelerinde depolar |
derece | Derece cinsinden hesaplamak için trigonometrik işlevleri değiştirir ( radyan varsayılan moddur) (bkz. RAD) |
DİM | Bir dize veya dizinin boyutunu tanımlar (bkz. COM) |
DOS | Kontrolü Disk İşletim Sistemine (DOS) aktarır; DOS yüklenmemişse, BYE ile aynı |
ÇİZMEK | Verilen koordinatlara bir çizgi çizer |
SON | Programın yürütülmesini tamamlar, açık I/O kanallarını kapatır ve herhangi bir sesi durdurur |
GİRMEK | Harici bir aygıttan, genellikle kaset veya diskten düz metin programını yükler ve belleğe birleştirir (bkz. LİSTE) |
tecrübe | üstel fonksiyon |
İÇİN | Bir for döngüsü başlatır |
FRE | Bayt cinsinden boş bellek miktarını döndürür |
ELDE ETMEK | Bir I/O kanalından bir bayt okur (bkz. PUT) |
GOSUB | Programda belirli bir satırda bir alt programa atlar, dönüş adresini yığına yerleştirir (bkz. POP ve RETURN) |
GOTO ve GİT | Programda verilen bir satıra atlar. GOTO, "IF ... THEN GOTO ..." içinde atlanabilir |
GRAFİK | Grafik modunu ayarlar |
EĞER | Bir koşulun doğru olup olmadığına bağlı olarak kodu yürütür |
GİRİŞ | Bir G/Ç kanalından bir metin akışı alır; genellikle klavyeden (varsayılan), kasetten veya diskten gelen veriler |
INT | Bir sayının tabanını döndürür |
UZUNLUK | Bir dizenin uzunluğunu döndürür |
İZİN VERMEK | Bir değişkene değer atar. LET atlanabilir |
LİSTE | Ekranda görüntülenecek programı (varsayılan), yazıcıyı, diski, kaseti veya başka herhangi bir harici aygıtı listeler (tümü veya bir kısmı) (GİRİŞ'e bakın) |
YÜK | Yükler bir tokenized harici cihazdan programı; genellikle bir kaset veya disk (bkz. KAYDET) |
YERLEŞTİR | Mantıksal rengi veya ATASCII karakterini verilen koordinatlarda saklar |
KAYIT | Bir sayının doğal logaritmasını döndürür |
LPRINT | Metni bir yazıcı cihazına yazdırır (Aynı sonuç OPEN, PRINT ve CLOSE ifadeleriyle elde edilebilir) |
YENİ | Programı ve tüm değişkenleri bellekten siler; LOAD veya CLOAD'dan önce otomatik olarak yürütülür |
SONRAKİ | FOR döngüsünün sonraki yinelemesine devam eder |
OLUMSUZ | mantıksal olumsuzlama |
NOT | Bir G/Ç kanalındaki geçerli konumu döndürür |
ÜZERİNDE | Bir bilgisayarlı git veya GOSUB - bir ifade değerine dayanarak gerçekleştirir bir atlama |
AÇIK | Bir G/Ç kanalını başlatır |
VEYA | mantıksal ayrılma |
kürek | Bir kürek denetleyicisinin konumunu döndürür |
DİKİZLEMEK | Bellekteki bir adresteki değeri döndürür |
KOMPLO | Verilen koordinatlarda bir nokta çizer |
PUAN | Bir G/Ç kanalındaki mevcut konumu ayarlar |
POKE | Bellekteki bir adreste bir değer ayarlar |
POP | Yığından bir alt rutin dönüş adresini kaldırır (bkz. GOSUB ve RETURN) |
KONUM | Grafik imlecinin konumunu ayarlar |
YAZDIR ve ? | Bir G/Ç kanalına metin yazar; genellikle ekrana (varsayılan), yazıcıya, kasete veya diske (bkz. LPRINT ve INPUT) |
PTRIG | Bir kürek tetiğine basılıp basılmadığını gösterir |
KOYMAK | Bir G/Ç kanalına bir bayt yazar (bkz. GET) |
RAD | Radyan cinsinden hesaplamak için trigonometrik fonksiyonları değiştirir (bkz. DEG) |
OKUMAN | DATA deyiminden veri okur |
REM | Bir programdaki bir yorumu işaretler |
ONARMAK | Bir DATA deyiminden verilerin nerede okunacağını belirler |
DÖNÜŞ | GOSUB'u "çağırmanın" hemen ardından hatta etkin bir şekilde dallanarak bir alt yordamı sona erdirir (bkz. GOSUB ve POP) |
RND | Sahte rasgele bir sayı döndürür |
ÇALIŞTIRMAK | İsteğe bağlı olarak harici bir cihazdan yükleyerek bir programın yürütülmesini başlatır (bkz. YÜKLEME) |
KAYDETMEK | Harici bir aygıta belirteçli bir program yazar ; genellikle bir kaset veya disk (bkz. YÜKLEME) |
SETCOLOR | Mantıksal bir rengi fiziksel bir renge eşler |
SGN | Bir sayının işaretini döndürür |
GÜNAH | Bir sayının sinüsünü döndürür |
SES | Bir ses kanalında bir ton çalmayı başlatır veya durdurur (bkz. SON) |
kare | Bir sayının karekökünü döndürür |
DURUM | Bir G/Ç kanalının durumunu döndürür |
ADIM | FOR döngüsünde kullanılan artışı gösterir |
ÇUBUK | Bir joystick konumu döndürür |
DUR | Programı durdurarak daha sonra yeniden başlatmaya izin verir (bkz. CONT) |
STRIG | Bir joystick tetiğine basılıp basılmadığını gösterir |
STR$ | Bir sayıyı dize biçimine dönüştürür |
SONRA | Bir IF deyiminde koşul doğruysa yürütülecek deyimleri gösterir |
İLE | FOR deyimindeki sınırlayıcı koşulu belirtir |
TUZAK KURMAK | Bir hata oluştuğunda belirli bir program satırına atlamayı ayarlar (TRAP 40000 bu siparişi iptal eder) |
USR | İsteğe bağlı olarak parametrelerle birlikte bir makine kodu rutinini çağırır |
VAL | Bir dizenin sayısal değerini döndürür |
XIO | Genel amaçlı G/Ç rutini ("Doldur ekranı"ndan "Dosyayı yeniden adlandır"a ve "Diski biçimlendir" talimatlarına) |
Ayrıca bakınız
- Optimize Edilmiş Sistemler Yazılımından BASIC A+ , BASIC XL, BASIC XE
- Turbo-Basic XL , yorumlayıcı ve derleyici
Notlar
Referanslar
Alıntı
bibliyografya
- ATARI TEMEL Referans Kılavuzu . Atari Inc. den 1980 Arşivlenmiş orijinal 1 Mayıs 2005 tarihinde.
- Chadwick, Ian (1985). Atari Mapping . Hesapla! Yayınlar. ISBN'si 0-87455-004-1.
- Crawford, Chris (1982). De Re Atari . Atari Program Değişimi.
- Cromemco 16K Genişletilmiş TEMEL (PDF) . Cromemco. 1978.
- Wilkinson, Bill (1982). Atari DOS'un içinde . Optimize Sistemler Yazılımı A.Ş. ISBN'si 0-942386-02-7. 2009-04-04 alındı .
- Decuir, Joe (30 Aralık 2004). 3 Nesil Oyun Makinesi Mimarisi (Konuşma). Klasik Oyun Fuarı 2004. San Jose Kongre Merkezi.
- Wilkinson, Bill; O'Brien, Kathleen; Laughton, Paul (1983). Atari TEMEL Kaynak Kitabı . Hesapla! Kitabın. ISBN'si 0-942386-15-9.
- Wilkinson, Bill (Şubat 1985). "GÖRÜŞ: Atari" . Yaratıcı Bilgisayar . s. 139–140.
Dış bağlantılar
- Atari TEMEL, İyi, Kötü ve Çirkin
- Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1979). Atari Basic - Kendi Kendine Öğretme Kılavuzu . Erişim tarihi: 29 Haziran 2013 .
- Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1985). Atari Temel - XL Sürümü . Erişim tarihi: 29 Haziran 2013 .