KÜÇÜK AMA MARİFETLİ İKİ PROGRAM
Retro bilgisayarMerhaba... 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
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.




