Bu sayfadaki yazılar
Sayfanın metni
Sayfa 40
Program, ilkönce 32 renkte ve düşük çözünürlükte bir ekran açar. Bir sonraki satırda ekranın yanıp sönmesini önlemek için 'flash off' komutunu kullandım.
Repeat Until Mouse Click=l
döngüsü ile mouse'un kliklenmesi beklenir. Bundan sonra mouse'un o an bulunduğu nokta ekran koordinatları olarak XS ve YS değişkenlerine verilir.
gr writing 2
komutu ile grafik çiziminde XOR moduna geçilir. Bu sayede ekrana çizilecek bir şeklin üstünden tekrar geçilecek olursa, ekran tekrar eski durumuna döner.
Bundan sonra gelen döngüde mouse tekrar klikleninceye kadar, 'box' komutu ile ekranda 'brush' olarak seçeceğiniz bölgenin etrafına kutular çizilir. Komutu iki kere arka arkaya kullanmamın nedeni resmi bozmamak içindir.
Daha sonra dx ve dy değişkenlerine seçtiğiniz bölgenin genişliği ve yüksekliği kayıt edilir.
Bundan sonra ekran ayarlamaları yapılırken, görüntünün bozulmaması için 'auto view off' komutunu kullandım.
Screen Open l ,DX,DY,32,Lowres Get Palette 0
satırları ile seçtiğiniz brush'ın kopyalanacağı yeni bir ekran açılır.
screen copy komutunda, önce ekranın sol üst köşesi sonra da sağ alt köşesi verileceğinden;
If XS>X Then Swap XS,X If YS>Y Then Swap YS,Y
komutları ile değişkenler sıralanır.
Sonra 'screen clone' ile bu ekranın da bir kopyası alınır. Bundan sonra "auto view on" komutu ile ekranda yapılacak değişikliklerin görünmesi sağlanır. Daha sonra programın ana döngüsü gelir.
Önce bir numaralı ekran öne alınır. Daha sonra
For 1=0 To 201 Step 3 Screen Display 1„I„ Wait 1
döngüsü ile bu ekran yukarıdan aşağıya kaydırılır. Ekran aşağıya inince de 'boom' komutu ile bir patlama sesi verilir.
Bundan sonra aynı olay, 2 numaralı ekran için yapılır.
Döngüden çıkmak için 'mouse' tuşuna basmanız gereklidir.
Şimdi sizlere AMOS MANUAL'dan uyarlanmış iki program daha vereceğim. Fakat açıklamalarını gelecek ay yapacağım. Bu arada sizler de bunların nasıl çalıştıklarını bulmaya çalışın. Gelecek aya kadar hepinize iyi eğlenceler...
Rem ******************* ***************** Rem* AMOS demo 10.1 * Rem * AMOS MANUAL dan uyarlanmistir * Rem * HAM Demo * Rem* (c) Mandarin/Jawx 1990 *
IP Aryj 'I* 5f* ^K 5fC 5|C 3fC 3fC 3fC 5|< 3fC 3fC 3fC 5yC 9fC 3fC 3fC 3fC 5|C 3|C 3|C 3fC 3fC 3fC 3fC 3|C 5fC 3fC 3|C 3fC 9fC 3fC 3{C 3|e 5(C 3fC 5(Ç Rem Screen Open 0,320,290,4096,Lowres Screen Display 0,129,30,320,270 Curs Off: Cls 0 : Flash Off Locate 0,2 : Pen 15 : Paper 0 Centre "AMOS-HAM" ForB=0To 15 Colour B,B : Ink B : Bar 32,B* 15+32 To 288,B* 15+47 ForR=0To 15 For L1 =32 To 47:Ink 32+R :Plot R* 16+33,B* 15+L1 :Next L1 ForG=0To 15 Ink48+G : Draw R*16+G+34,B* 15+32 To R*16+G+34, B* 15+47 NextG NextR NextB
Rem *********************************** Rem * AMOS Example 10.2 * Rem * AMOS MANUAL dan u\ arlanmistir * Rem * (c) Mandarin /Jawx 1990 * Rem *********************************** Rem Screen Open 0,960,100,8,Lowres Screen Display 0,130,150,320,100 Palette 0,S111,$222,$333,$444,$555,$666,$777 Flash Off Set Rainbow 0,1,64,"(8,2,8)",'"*,"" Rainbow 0,1,150,100 LAND[640,0,50] Screen Copy 0,0,0,319,100 To 0,639,0 Do For 1=0 To 159 Screen Offset 0,1*4,0 : Wait Vol Next I Loop Procedure LAND[W,X,N] Ink 1 : Bar X,0 To W+X,99 Foe T=0 To N
TX=Rnd(W)+X : TW=Rnd(W/8)+4 : TH=Rnd(50) Polygon TX,99 To TX+TW/2,99-TH To TX+TW,99 Next T End Proc
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 41
Merhaba assembler'cılar. Geçen sayımızda Seka üzerinden bir örnek vermiştik. Örnek programımız bir window açıyordu. Window Workbench ekranında açılıyordu. Şu anda sadece size ait ve kendinizce yaklaşık bir sayfalık bir yazım yaparak işte bu sonucu elde ettiniz. Tabii bunu söylerken bana kızanlar olabilir. Nasıl mı? Şöyle..
Bana kızacak olan arkadaşlarımızdan kastımız, geçen sayıdaki source text'ini defalarca yazıp da bir türlü çalıştıramayan arkadaşlar. Onlara öğüdüm böyle bir durumda hemen, bu olmuyor diye pes etmemeleri. Çünkü benim de yaptığım gibi sizin de bu gibi zorluklara sabırla ve gayet sakin yaklaşmanız gerekiyor. Bu anda yapmanız gereken şey, hata aramak olmalıdır. Bu olayda herkesin kendine göre bir tercihi olacaktır. Bazıları program text'ini defalarca kontrol edecektir. Veya compile işlemlerini kurcalayacaktır. Çok güzel. Zaten hata da böyle bulunurdu. Fakat sizden istediğim ve size önereceğim tek şey; bakış açınız. Seka'nın başındaki her insan, pardon düzeltme yapıyorum, her programcı klavyedeki hakimiyeti ile, source text üzerindeki yaptığı değişiklikler ile, system üzerindeki etkisi ile kendisini işlemciden bir parça olarak görmelidir. İşlemcinin, programcının yazdığı rutinleri üzerinde yaptığı işleri, programcının da aynen satırları yazarken kafasında biçimlendirmesi gerekir.
Şimdi programımızın açıklamasına geçelim.
Örnek rutinimizde (rutin demek biraz yanlış oluyor. Ona program dememiz daha doğru olur) öncekilerden farklı olarak AMIGA LIBRARY'leri gözükmekte.
Şimdi AMIGA LIBRARY'lerinden size biraz bahsedeyim.
AMIGA LIBRARY Kısaca AMIGA LIBRARY deyimi. Amiga'nın belleğinde bir yerde (bellekteki yerini daha sonra söylerim) duran, bilgisayarda sabit olup, bilgisayarı kapadığınızda dahi silinmeyen, ROM bellek diye adlandırdığımız yardımcı rutin niteliğinde makina kodu programlarıdır.
Pardon düzeltme yapıyorum. Amiga'yla ilgili bütün library'lerin hepsi hafızada sabit ROM bellekte bulunmuyor. Bir kısmını disketten yükleyebiliyoruz. Veya mega programcılar, mega programlarını hazırlarken daha önceden yapıp, birçok programına dahil ettikleri library'lerde bulunmaktadır.
Her Amiga System Library'sinde 2-100 arası rutin bulunmaktadır. Fakat bunda bir kısıtlama yoktur. Rutin sayısı istenildiği kadar çoğaltılabilir.
Tabii yararlarının sonsuz olduğunu söylememe bilmem gerek var mı? Normalde yazımı saatler ya da günler, aylar sürecek rutinleri, bu işin ustaları bizim için hazırlayıp ROM belleğe kaydetmişler. Ne güzeldir ki, bize sadece onları kullanmak kalıyor.
Bunların bir başka yapılış amacı ise programcıları fazla üzmemek. Amiga'nın yapısı olan sistem, workbench, intuition, disket işlemleri ve daha aklınıza gelen her şey hakkında fazla bilgisi olmayan programcıyı bunları öğrenmeye zorlayıp zaman ve beyin yorgunluğu kaybı vermeyip onları belli formatlar içerisinde topluca sistem üzerinde bir derece hakim hale getiriyorlar. Sözünü ettiğim derece; programcının, programına Amiga'nın ileri window, mouse, ekran, ses, multitasking, disk veya Workbench uygulamalarını kolayca dahil edebilmesi.
Mesela Amiga'nın mimarları zamanında bu rutinleri Amiga'nın belleğine koymasalardı diye bir düşünün. Bence o zaman bir felaket olurdu. Nasıl mı? Şöyle. Herkes Amiga'nın yukarıda bahsettiğimiz özelliklerinden yararlanabilmek için kendince bir sürü rutin yazardı. Örneğin biri bir başkasının programına bir göz gezdirdiğinde programın amacından çok program sisteminin tabanını oluşturan rutinleri algılamak için uğraşması gerekecekti. Şöyle durup sakince bir düşünüyorum da, böyle bir problem bu şekilden başka türlü herhalde halledilmezdi.
Bunların yanında, diyelim ki sizin yazmadığınız bir source'u inceliyorsunuz. Örneğin; program başladı. Bir ekran açıcı library rutinini çağıran bir kısım gördünüz. Demek ki ekran açılıyor. Arkasından aynı şekilde bir window uygulaması. Buraya kadar gelindiğinde geçen süre sadece birkaç saniye. Bu mükemmel bir olaydır. Rutinler, tanıdık sistem rutinleri olduğundan anlamak gayet basit. Böylece, programın ve gerçek anlamda programın özünü oluşturan kısımları yakalamak ve anlamak da çok basit bir hal alıyor.
Bu arada başka bir programcının programlarını incelemek sizin için çok büyük adımlar kaydetmek demektir. Fakat inceleyeceğiniz programı çok iyi seçmeniz gerekmektedir. Acemi bir programcının
AMIGA ASSEMBLER
programını incelemek, onu anlamaya çalışmak sizi fazlası ile yoracak ve makine kodu programlama bilginiz üzerinde ters uygulamalardan ötürü zedeleme yapacaktır. Ben bunu bizzat yaşadım. Daima en büyük hedefiniz, usta programcıların küçük programları olmalıdır. Usta programcıdan kastım, işin ehli ve uzun zamandan beri makine kodu çalışmasını yapan, Amiga library'lerini programlarına en iyi şekilde yerleştiren ve ortaya pozitif bir şeyler çıkarmış olanları kastediyorum. Acemi programcı dediklerim ise, program listesi kısa olan ve sadece bir işi yapmak ile görevli olan program yazanlar. İlerlemenin temel öğelerinden biri de budur. Zamanı geldiğinde hep beraber program incelemeleri yapacağız. Şimdilik bu konuda (DE-BUG) bu kadar bilgi yeter. Hatta fazla bile.
ÖMER SİNAN POLAT
Amiga library'leri Amiga'nın varoluşundan beri çok büyük değişikliklere uğramıştır. Programcılar devamlı hataları ve eksiklikleri gidermişlerdir.
Amiga'nın ROM belleğinde bulunan yani akım kesildiğinde silinmeyen library'leri şunlardır.
1- CLIST.LIBRARY: Bu library'deki rutinler Amiga'nın copper listesi üzerinde değişiklikler yapmak için gerekli olan kolaylığı sağlayan rutinleri içerir. Copper listesinin ne olduğunu şu anda sormayın. Çünkü onu anlatmam için daha öğrenmeniz gereken çok şeyler var. Size sadece copper'ın bilgisayarınızın grafik ile işlemlerini süper bir hız ile yapan bir devre olduğunu söyleyebilirim.
2- CONSOLE.LIBRARY: Bu library Amiga'nın Workbench sistemindeki console window'undan yazı çıkışı almak için kullanılır.
3- DOS.LIBRARY: Amiga'nın disk işlemleri için bu library'deki rutinleri kullanabilirsiniz. Bu library ile herhangi bir kayıt cihazından bir file silmek, ismini değiştirmek veya file flag'ları ile oynamak ya da file'ın comment bölümü ile kayıt zamanı değiştirme işlemlerini yapabilirsiniz.
4- EXEC.LIBRARY: Amiga'nızın library'lerinin babasıdır. Diğer library'leri kullanabilmek için de bu library'ye ihtiyacımız var. Neden mi? Çünkü diğer library'lerin açılmasında kullanılan OPEN LIBRARY adlı rutin burada bulunuyor. Bu arada exec library hafızada hazır bulunduğundan yüklemenize gerek yok.
Exec library bu işlerden başka hafıza tahsis etmek ve Amiga'nın input-output kanallarının çalışması ile ilgili rutinleri de içerir.
5- GRAPHICS.LIBRARY: Bu
library, blitter çipinin kontrol fonksiyonlarını içerir. Ayrıca grafik parçalarını kopyalama, dörtgen veya çizgi çizme, yazı yazma gibi basit grafik işlemlerini de yapan rutinleri ihtiva eder.