Bu sayfadaki yazılar
Sayfanın metni
Sayfa 43
Merhaba. Yeni bir örnek programla yazı dizimize devam ediyoruz. Yine her zamanki gibi örneğimizi yazıp, her satırı tek tek size anlatacağım.
Bu sayımızdaki örnek programda amacımız; belli bir hafıza bölgesinde bir veya birkaç byte'ı aramak olacaktır.
Diyelim ki arama yapacağımız hafıza bölgesi buffer'dan bufferend'e kadar olan 10 byte uzunluğundaki hafıza bölgesi ve aramamız gereken değer ise 5 değeri olsun. Amacımız buffer ile başlayan bu bölgede 5 değeri taşıyan byte'ın hafıza adresini bulmak olacaktır.
Yine size aynı işi yapan birkaç örnek program sunacağım ve siz de aynı işin değişik şekillerde nasıl yapıldığını göreceksiniz.
ÖRNEK PROGRAM 3a:
1 START: LEA bufferA0
2 LEA bufferend,A 1 3 Ll: CMP.B #5,(A0) 4 BEQ L2 5 ADD.L #1,A0 6 CMP.L Al A0 7 BNE Ll 8 L2: RTS 9 Buffer: dc.b0,0,0,0,0,0,0,0,0,0, 0,0.0,0,5,0,0,0,0,0 lOBufferEnd:
Şimdi ilk örneğimizin açıklamasına geçelim. Rutinin her satırını tek tek açıklıyorum.
SATIR-1:
START: LEA buffer,A0 Programın başlangıcını, aratma yapılacak hafıza bölgesinin başlangıcını temsil eden değer olan buffer değerini A0 adres registerine atamak ile yapıyoruz.
SATIR-2:
LEA bufferend,A1 İkinci satırda aynen birincisi gibi ama bu sefer arama bölgesinin sonunu belirten bufferend değerini A1 adres registerine gönderiyoruz. Böylece üzerinde çalıştığımız hafıza bölgesinin başlangıç ve bitiş değerlerini adres registerleri üzerinden kullanabiliriz.
SATIR-3:
L1: CMP.B #5,(A0) İşte arama yaptığımız ilk satır burası. Şu anda A0 registerinde buffer değeri yani hafıza bölgemizin ilk byte'ı bulunmaktadır. Ve biz
CMP komutu ile A0 adres registerinin gösterdiği hafıza adresinde 5 sayısı var mı ona bakıyoruz. Örneğimizde bu hafıza adresinde 5 değeri olmadığına göre bu satır olumsuz sona erecektir. Ve durum system flaglarına iletilecektir.
SATIR-4:
BEQ L2 Branch komutlarından BEQ kullanıp bir satır önceki işlemin sonucunun 0 (yani cmp.b #5,(a0) satırının sonucunda eşitsizlik) olup olmadığına bakıyoruz. Yine örnek üzerinden yola çıkarsak bu işlemin sonucunun 0 olmadığını (5 eşit değil 0) görürüz.
Öyleyse beq komutu L2 Label'ına atlama yapmayacak demektir. Diğer bir deyişle beq komutu system durum flagları üzerinde araştırmasını yapıp sonucu özelliği üzerinde değerlendirip bir alt satırdan işleyişe devam etmesi gerektiğine karar veriyor.
SATIR-5:
ADD.L #1,A0 Önceki iki satırda arama bölgesindeki ilk byte'ın kontrollerini yapmış oluyoruz ve aramamız gereken değer olan 5 değerinin bu byte'a eşit olmadığını görüyoruz. Şimdi yapmamız gereken şey ise arama yapılacak bölgedeki bir sonraki byte'ı aranacak sayı ile (5) karşılaştırma yapmamız gerekiyor.
Bu iş için de Buffer+1 değerine ulaşmak için bu satırı kullanıyoruz, add.l #1,a0 ile A0 adres registerindeki hafıza adresinin değerini bir artırıyoruz ve böylece A0 bu satırdan itibaren buffer+1 değerine sahip olacaktır.
SATIR-6:
CMP.L A0,A1 Bir önceki satırda A0'ın içeriğini bir değer artırmıştık. Ve şu anda değeri buffer+1 olmaktadır. Aynı şekilde programa başlarken A1 registerine de bufferend değerini yani arama bölgesinin en son yerini belirlemek için kullanmıştık. Şimdi bu satırda A0 ile A1 registerlerinin karşılaştırmasını yapıyoruz. Amacımız ise A0 registerinin bufferend yani arama bölgesinin sonunu geçip geçmediğini kontrol etmek oluyor. Açıklamaya bir alt satırdan devam ediyoruz.
SATIR-7
BNE L1 Bu komut bir üst satırdaki komut ile bağlantılı olarak çalışıyor. Satır-6; A0 ve A1 adres registerlerindeki değerlerin eşit olup olmadığını kontrol ederek durumu system flaglarına yazı-
AMIGA
yor. Ve Satır-7'de durumu system flaglarından okuyup sonucu değerlendiriyor. ASSEMBLER
Rutinde bu satır aynı zamanda rutin döngüsünün son satırını temsil etmektedir. Ve son işlemin sonucu (A0 ile A1'in karşılaştırmalarının sonucu) eşit (0) oluncaya kadar L1 olarak isimlendirilmiş label'a (SATIR-3)'e geri dönüyor.
Buraya kadar oluşturduğumuz satır-3'den satır-7'ye kadar olan döngü sonucunda arama bölgesinin sadece bir byte'ını kontrol etmiş olduk. Döngünün son satırı ile arama bölgesinin sonuna ulaşmadığımızı görünce counter olarak kullandığımız A0 registeri yardımı ile arama hafıza bölgesinin bir sonraki satırını kontrol ediyoruz.
Bu işlem bufferend-buffer kadar (bu bölgenin 20 byte olduğunu düşünürsek 20 defa tekrar ediliyor.) sürecektir.
SATIR-8:
L2: RTS işlemci bu satıra iki türlü gelebilir. Birincisi satır-6 ve satır-7'deki arama yapılan hafıza bölgesinin sonunun gelip gelmediğini kontrol eden cmp ve bne komutlarının etkisi ile döngüden kurtulabilir.
İkinci olarak aratılan sayıyı (5) bulduğunda (satır-3 ve satır-4'den) satır-4'deki beq L2 komutu ile döngüden çıkabilir.
Tabii bizim verdiğimiz örneği göz önüne alarak sonucu değerlendirdiğimizde aratılan hafıza bölgesinin 15'inci byte'ındaki 5 değeri olduğunda bilgisayar bu satıra satır-4'den inebilir. Yani arama işlemi sonucunda aranan sayı bulunmuş olacaktır.
SATIR-9:
Buffer dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0, 0,0,0,0 Bilindiği gibi bu satır örneğimizdeki arama bölgesinin kendisini oluşturmaktadır. BUFFER olarak adlandırdığımız bu hafıza bölgesinin uzunluğu 20 byte'dan oluşmaktadır. Daha öncede anlattığım gibi dc.b ifadesi bu bölgeyi oluşturan verilerin birer byte olarak dizildikleri anlamına geliyor.
SATIR-10:
Bufferend: Bu satırda yapmak istediğimiz olay, bir önceki satır ile doğrudan ilgilidir. Yani bu satırda bulunan ve tek bir bufferend: isimli label; 20 byte olarak tanımladığımız buffer isimli hafıza bölgesinin sonunu belirlemek için kullanılmaktadır.
Programımızın genel amacı 5 değerli byte'ın hafıza adresini bulmaktı. Bu da buffer+15 adresi olmaktadır.
Kısa rutinimizin asıl kısmında, buffer bölgesinden tek tek byte'ları alıp 5 değeri ile karşılaştırdık. Arama bölgemizin sonunu belirlemek için şu yolu kullandık.
Rutinin başında bufferend label'ını A1 adres registerine gönderdik. Sonra ana döngünün sonunda her defasında bufferend'e ulaşıp ulaşmadığımızı kontrol ettik. Şimdi örneğimizin bir başka şeklini göreceksiniz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 42
sinde monitör için uygun video sinyaline dönüştürülüyor. Kanal arama gibi işlemler receiver üzerindeki özel düğmelerle yapılıyor. Bunun yanısıra eğer bir video cihazınız varsa içindeki tüner sayesinde video'yu da aynı amaçla kullanabilirsiniz. Sonuç olarak elde edilen görüntü kalitesi oldukça yüksek.
Oyunlarla ilgili olarak tanıtım bölümünü takip etmenizi öneririz. Her ay daha fazla oyunu tanıtmaya çalışıyoruz.
Disket hazırlamanın zorluğunu yalnızca mali açıdan değerlendirmemelisiniz. Kaliteli bir disketin içeriğinin oluşturulması için oldukça uzun bir araştırma ve program hazırlama sürecine ihtiyaç duyuluyor. Buna ek olarak binlerce disketin kopyalanmasının ve dergiye ilave edilmesinin yorucu bir uğraş olduğunu tahmin edersiniz. Bütün bunlara rağmen koşullarımız uygun olduğu sürece disket hediye etmeyi her zaman düşünüyoruz. Ayrıca satılacak bir disket için maalesef ne böyle bir iş için kadro oluşturmamız ne de böyle bir hizmetten ticari kazanç beklememiz mümkün değil.
Sayın AMİGA DÜNYASI, Adım Baran Yıldırım. 12 yaşındayım ve yaklaşık üç aydır Amiga kullanıyorum. Aşağıda belirtilen sorularıma yanıt verirseniz çok mutlu olacağım.
1- 2MB Internal RAM nedir? 2- Receiver ne demektir? 3- Loom ve Strider oyunlarını açıklar mısınız?
BARAN YILDIRIM
Çankaya/Ankara
Sayın Yıldırım, Amiga'nın RAM belleğini 512K'dan 1MB'a veya daha fazlasına arttırmak için ek bellek kartları kullanılıyor. Amiga 500'de bilgisayarın altındaki genişletme yuvasına takılan bu kartların büyük bir kısmı 512K'lık kartlar. Son zamanlarda bazı firmaların ürettiği özel kartlarla Amiga 500'e istenen miktarlarda RAM ilavesi yapılabiliyor. Bu tür kartların özelliği, üzerlerine maksimum RAM kapasitesi (en fazla 8MB) kadar RAM çipi konabilmesi. 2MB'lık (aslında 1.8MB) kartlar Amiga'nın Gary adlı çipine bir soket bağlantısı gerektiriyorlar. Daha büyük miktarda RAM ilavesi için Amiga'nın BUS portu kullanılıyor.
Bunun yanında A590 hard disk ünitesinin içine de maksimum 2MB RAM çipi eklenebiliyor ve yine bilgisayarın sol tarafındaki BUS portundan takılan hard disk'le aynı zamanda RAM bellek arttırılmış oluyor.
Receiver cihazı televizyon yayınlarını bilgisayarınızın monitöründen izleyebilmenize olanak tanıyan bir alet. UHF veya VHF frekansında gelen televizyon yayınları, receiver'a bağlı bir antenle alındıktan sonra cihazın içindeki tüner birimi saye-
Sayın AMİGA DÜNYASI, AmigaBASIC'te programlarında kullandığım değişkenlerin değerlerini diskete nasıl kaydedebilirim?
Beşinci sayıda disket vermediğinizi gördüm ve üzüldüm. Biliyorum disket sizlere büyük miktarlarda külfet yüklüyor ama ben ve benim gibi birkaç Amiga'cı arkadaşım sizlerin hazırlayacağı özel disketleri parasıyla almaya hazırız.
TOLGA ŞAHİN Gaziosmanpaşa/Ankara
Sayın Şahin, Aşağıdaki kısa programla A, B, A$, B$ değişkenlerini diskete kaydedip tekrar yükleyebilirsiniz.
yazma: REM *DOSYA ADI SORULDUĞUN- DA DF0:DOSYA-ADI REM *SEKLINDE YAZIN. INPUT "DOSYAADI GIRIN":DAS ÖPEN DA$ FOR OUTPUT AS 1 INPUT" ISIM":a$ INPUT SOYAD ";b$ INPUT" YAS";a INPUT "DOĞUM TARIHI";b PRINT#l,a$ PRINT#l,b$ PRINT#l,a PRINT#l,b
CLOSE1
okuma: INPUT "DOSYA ADI GIRIN";DA$ ÖPEN DA$ FOR INPUT AS 1 INPUT#l,a$ INPUT#l,b$ INPUT#l,a INPUT#l,b CLOSE1 PRINTa$,b$.a,b
Sayın Editör, Amiga'mı aldıktan sonra ilk merak ettiğim konu Amiga DOS oldu. Amiga DOS'u çözmek için kimbilir kaç gün uğraştım fakat AMİGA DÜNYASI dergisi çıkınca Amiga DOS yazısını takip etmeye başladım ve ne kadar kolay olduğunu anladım. İlk sayıdaki konular bana kolay daha doğrusu anlaşılması kolay geldi. Fakat beni uğraştıran bir konu var. 3. sayıda mavi ve pembe kutular içinde gösterilen Workbench 1.3:libs ve Workbench 1.3:devs ve Workbench 1.3:l tabloları bilgisayarda var gözüküyor. Fakat bu dosyaları çağıramıyorum. Ya bana "bad Args" ya da "can't open" diyor. Bu bölümleri nasıl çağırıp kullanacağımı bana açıklar mısınız?
FERHAT DİNDAŞ
Kocaeli
Sayın Dindaş, En başta, bahsettiğiniz dosyaların sadece usta programcıların kullanabileceklerini belirtelim. Bu dosyalar C ya da assembly dilinde yazılmış programlar içinden çağırılırlar. Ancak BASIC kullanımı için bu dosyaların basitleştirilmiş versiyonları BASIC disketinde FD dosyaları halinde yeralmaktadır. Örneğin
LIBRARY "graphics.library" komutu bu dosyalar içinden graphics.bmap adlı bir dosyayı yükler. Bu dosyaları kullanmaktaki amaç BASIC'te mevcut olmayan ve ROM tarafından desteklenen özelliklerden yararlanmaktır. Tabii bu işlemler de biraz programcılık bilgisi gerektirmekte.
OKUYUCU