Bu sayfadaki yazılar
Sayfanın metni
Sayfa 84
Merhaba... Bu ay BASIC köşemizde ufak bir değişiklik yaptık. Arkadaşımız F.KAĞAN GÜRKAYNAK, sizler için iki küçük Basic program hazırladı. Üstelik açıklamaları ile. Bakalım beğenecek misiniz? Şimdi Kağan'ın sözlerine kulak verelim:
Amiga'nın harika bir makine olduğunu belirtmeme gerek yok. Amiga'nın neler yapabileceğini birçok demoda ve oyunda hayretler içinde izledik. Ancak ortalama bir kullanıcı olarak Amiga'nın şaşırtıcı güçlerini kontrolümüz altına almak için yeterli olmadığımızı düşünmüşüzdür.
Gerçekten etkileyici, basit programları yazmak için, C'yi ezbere bilmeniz gerekmiyor. Amiga Basic'imiz ile bile ilginçlikler yapabiliriz.
İlk programla, bir Copper Listesi hazırlayarak rengarenk yazılara (Fontlara), menülere veya arka planlara sahip olabiliriz. Copper listelerini birçok demodan tanıyorsunuz. Copper Amiga'nın içinde temel olarak, ekranı tarayan elektronun yerine bağlı olarak programlanan ve hafızada bazı önemli değerleri (Register) değiştirebilen bir işlemcidir.
Sizi teknik detaylarla boğmadan, hemen programımıza geçelim. Lütfen yazılımdaki büyük ve küçük harflere özen gösterin. Bunun yanında % ve & işaretlerinde de dikkatli olmanızı öneririm; ikisi kolay karışıyor. ' işaretinden sonrakileri yazmayın, onlar sadece bilgi içindir.
'PROGRAM ADI : COPPER LİSTESİ DECLARE FUNCTION AllocRemember& LIBRARY DECLARE FUNCTION ViewPortAddress& LIBRARY LIBRARY ":bmaps/graphics.library" LIBRARY ":bmaps/lntuition.library" Copper Listesi Yaratma:
Print " Biraz Bekleyin :" InitCopperList 564 'Copper için yer açma FOR y% = -12 TO 270 Ekranı boydan boya tarayalım b=b+1 IF b=2 THEN
READ Renk% : c=c+1 : b=0 Renkleri okuma IF c=45 THEN c=0: RESTORE Curcuna CopWait y%,20 Bu ilk emir CopMove 386.Renk% Bu da ikincisi LOCATE 1.14 : PRINT 270-y°o END IF NEXT y%
CLS Copper Basla:
CopperStart WINDOW (7) 'Copper bu ekranda olacak Son:
LIBRARY CLOSE Temizlik END '45 adet Hex data Curcuna:
DATA &H0FF,&H1 EF,&H2DF,&H3CF,&H4BF DATA&H5AF,&H69F,&H78F,&H87F,&H96F DATA &HA5F,&HB4F,&HC3F,&HD2F,&HE1 F DATA &HF0F.&HF1 E,&HF2D,&HF3C,&HF4B DATA&HF5A,&HF69,&HF78,&HF87,&HF96 DATA&HFA5,&HFB4,&HFC3,&HFD2,&HFE1 DATA &HFF0,&HEF1 ,&HDF2,&HCF3,&HBF4 DATA&HAF5,&H9F6)&H8F7,&H7F8,&H6F9 DATA &H5FA,&H4FB,&H3FC,&H2FD,&H1 FE ' Buradan sonra kullandığımız yeni emirlerin tanımı var. SUB InitCopperList (KomutNo%) STATIC SHARED CopperList& Boyut%=KomutNo%*4+4 'Copper için Remember&=0 'yer ayarlama RemKey&=VARPTR(Remember&) CopperList&=AllocRemember&(RemKey&,Boyut%,65538&) IF CopperList&=0 THEN FreeRemember& RemKey%,-1 :END END SUB SUB CopperStart (Win&) STATIC SHARED CopperList CopWait 10000,256 Ekranı tarama bitti mi ? ViewPort&=ViewPortAddress&(Win&) POKEL ViewPort&+20,CopperList& 'Yeni adres RethinkDisplay& 'Ekranı yeniden çiz END SUB SUB CopWait (Y%,X%) STATIC
SHARED CopperList& CWait& CopperList&,Y%,X% CBumb& CopperList% END SUB SUB CopMove (Offset%,Rakam%) STATIC
SHARED CopperList& CMove&CopperList&,Offset%,Rakam% CBump% CopperList& END SUB ' Program Ash Amir R.Amir Evet fazla sürmüş olamaz. Çalıştırmadan evvel: Bu program Amiga'nın içinde bulunan Library'leri kullanıyor. Programın onlara erişebilmesi için, o Library'lere ilişkin .bmap dosyalarının Library komutundan sonra tımak AMIGA DÜNYASI 94
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 85
içinde belirtilen yerde olmaları gerekli. (Bu dosyaları daha önce kullanmadıysanız, Workbench'in Extras disketinde bulabilirsiniz. Library'den sonra belirtilen yeri geçerli bir DOS Path'i olması şartı ile kendi isteğinize göre değiştirebilirsiniz.)
Nasıl etkileyici değil mi? Gelelim kaba bir açıklamaya. Programda Copper'ı programlayabilmek için sistemin komutları kullanılmış. Bunları daha rahat kullanabilmek için, dört SUB emri hazırlanmış. (SUB emirleri size kendi isteğinize göre komutlar hazırlamanızı sağlıyor.)
Programın ilk kısmı, sistemin komutlarını kullanmak için Library'lerin açılarak programa dahil edilmesi ve fonksiyonların tanımlanması ile ilgili. Eğer Hi-Soft Basic kullanıyorsanız, LIBRARY komutlarını DECLARE FUNCTION komutlarının önüne almanız gerekiyor.
Daha sonraki bölümde 564 emirden oluşan bir Copper listesi hazırlanıyor (ekran 282 satır, her satıra bir CopWait ve bir CopMove komutu =282*2=564). Daha sonra bu liste datalardan yararlanılarak dolduruluyor. Listenin y. satırı kabaca şuna benziyor:
CopWait y CopMove 386,Renk İşlevi ise, yine kabaca: elektron y. inci satıra gelene dek bekle, sonra 386 nolu adrese rengi yaz. (Renk, datalardan okunan kısım). İşte bu 386 nolu adreste, ekrandaki yazı rengi tutuluyor. Bu adresi değiştirmek mümkün. 384 arka planın renginin, 386 yazı renginin, 388 ikinci rengin ve 390 üçüncü rengin bulunduğu adresler. (Workbench'teki 4 renk). Bu sayılar dışındaki sayıları deneyerek meşhur GURU'muzla tanışmanız mümkün.
Gelelim Datalara: Dataların başındaki &, sayılar 65535'ten büyük olduğu için ve &H sayılar hekzadesimal (16'lık düzende) olduğundan bulunuyor. Bunları takibeden sayılar rengin RGB kodu. İlk sayı renkteki kırmızı, ikinci sayı renkteki yeşil ve üçüncü sayı ise renkteki mavi katkısını belirliyor. (Sayıdan kastım 16'lık düzendeki sayılar 1-9,A,B,C,D,E,F). Bunları keyfinizce değiştirin. Copper listesi yazmanın tek dezavantajı, ekranı aşağı çekme hızınızın çok düşmesi. Bu arada program Copper'ı eski haline getirmiyor, ama programı değiştirip tekrar tekrar kullanabiliyorsunuz.
İŞTE BU DA İKİNCİ PROGRAM: Bir diğer programla, denemişseniz neredeyse imkansız bulduğunuz bir efekti gerçekleştireceğiz: Scroll. Ekranın istenen tarafa kayması anlamına gelen bu kelimeyi, bir çok oyundan, mesela SHADOW OF THE BEAST'ten tanıyorsunuz.
Belirtmeme gerek yok, Basic'in kendi emirleriyle fazla bir şey elde edilemiyor. (Hisoft veya GFA ile bile). Çözüm yine Amiga'nın sisteminde, library komutlarını Basic'ten kullanarak istediğimizi yapabiliriz. İşte program:
' Program SCROLLVPORT DECLARE FUNCTION ViewPortAddress& LIBRARY LIBRARY ":bmaps intuition.library" LIBRARY ":bmaps graphics.library" Giris: ViewPort&=ViewPortAddress&(WINDOW(7))
Raslnfo&=PEEKL(ViewPort&+36) CIRCLE (320,90),200,1 LINE(310,90)-(330,90) LINE (320,85)-(320,95) PRINT "Lütfen Mouse'u" PRINT "Ortadaki artiya" PRINT "Yerleştirin." PRINT "Ekran" PRINT "Daire etrafinda" PRINT "Dönecektir." Bekle: WHILE MOUSE(1)<>320 OR MOUSE(2)<>90 Status=MOUSE(0) WEND Hareket: WHILE INKEY$="" x=COS(Derece)*200 y=SIN(Derece)*90
Derece=Derece+.1 POKEW RasInfo&+8,x POKEW RasInfo&+10,y ScrollVPort& ViewPort& WEND Eskihal: POKEW RasInfo&+8,0 Programın kısalığına bakmayın. Çalıştırınca ne kadar hünerli olduğunu göreceksiniz. İlk satırlar, bir önceki örnekte olduğu gibi sistemdeki Library'lerin Basic tarafından kullanılmasını sağlıyor ve fonksiyonlar tanımlanıyor. Girişte ise, sistem fonksiyonu yardımıyla ViewPort ve buna bağlı olan RasInfo adresleri okunuyor. Amiga tüm ekranını ViewPort'ta bulunan parametreler yardımıyla belirliyor. Bunları değiştirerek ekrandaki görüntünün istediğimiz hale gelmesini sağlayabiliriz. ViewPort adreslerinin hepsini öğrenip kullanabilmeniz için iyi bir Referans kitabına ihtiyacınız olacaktır. Programımız ViewPort'taki RasInfo adlı listeyi kullanan değişiklikler yapmaktadır.
Ekrana çizilen çember ve yazılan mesajdan sonra, program Mouse'u belirtilen yere getirmenizi bekleyecektir. Daha sonra Derece ile belirtilen açıdan, sin ve cos ile hesaplanan, x yönünde ve y yönünde ekranın yeni konumu bulunacaktır. Bulunan bu değerlerin RasInfo listesinde gereken yerlere yazılmasının ardından, ViewPort'un adresiyle beraber Library'nin ScrollVPort emri çağrılması scroll'u gerçekleyecektir. Normal workbench ekranında ViewPort'un büyüklüğü ekran kadardır. Normal ekranın dışına çıkıldığında, hafızanın aslında görüntü olmayan kısımları da sanki görüntü imiş gibi ekrana getirilir. Ekranda kenarlarda çıkan görüntüler bunun sonucu. Eğer ViewPort'unuz ekrandan büyükse (Max 1024x1024), bu numaraya ilginç uygulama alanları bulabilirsiniz : Kick-Off'taki ekranın kayması sadece bir örnek.
Sonrası yine kolay, herhangi bir tuşa basılınca, program While Wend döngüsünden çıkar, ekranın konumları sıfır olarak yeniden yazılır ve yine Library komutu ile Amiga ekranı düzenler. En son iş olarak Library'lerin kapatılması yer alıyor.
Programda değişiklik yapmaktansa programdaki kullanımı göz önüne alarak kendiniz bir kaç kaydırma yapmayı deneyin.