AMOS
Retro bilgisayarMurat YILDIZGÖRER & Hayrettin YILDIZ Sevgili arkadaşlar! Bu ay yine yeni bir AMOS köşesiyle birlikteyiz. Bu ayki temel konumuz, Sprite'lar ve Bob'lar. Bunların ardından, okuyucu mektupları bölümü bulunuyor. Şimdi, sözü fazla uzatmadan konumuza geçelim. SPRITE'LAR VE BOBLAR: AMIGA'nın donanımı vasıtasıyla, ekranda hareketli objeler oluşturabilirsiniz. Bunu gerçekleştirebilmek için önünüzde iki seçeneğiniz bulunuyor: Sprite'lar ve Bob'lar. Çeşitli yerlerde rastlamış olabileceğiniz bu iki obje türünün de birbirlerine oranla avantaj ve dezavantajları var. Şimdi, bu avantaj ve dezavantajları inceleyelim.
SPRITE'LAR (HARDWARE SPRITES): AMIGA'nın donanımı (DENİSE) tarafından oluşturulurlar. Ekrandan tamamen bağımsız olduklarından, hareketleri fazla vakit almaz; yani oldukça hızlıdırlar ve bulundukları ekranda Double Buffer yapmak gerekmez. Donanım sayesinde, ekran oluşturulurken otomatik olarak saniyede 50 (veya NTSC ise 60) kere yeniden çizilirler. Genişlikleri 16 nokta ile sınırlıdır, ancak yüksekliklerinde herhangi bir sınırlama yoktur. Ayrıca, bir ekran satırında (scanline) en fazla *8 adet 3 renkli sprite” veya “4 adet 15 renkli sprite” görüntülenebilir. Yani, bu sınırlamaya uyarak, ekranda 8'den fazla sprite gösterebilirsiniz. Ayrıca, birkaç sprite'ı yanyana göstererek, daha genişmiş gibi görünen sprite'lar meydana getirebilirsiniz. Hatta, AMOS bu işlemi, sizin yerinize seve seve üstlenecektir. Sprite'ların paletleri, üzerinde bulundukları ekranın, 16 ile 31 arasındaki renkleri ile belirlenir. Buradan da anlayacağınız gibi, kullandığınız ekran 32 veya 64 renkli ise, sprite renkleri ve ekran renkleri çakışacaktır. Bu yüzden, böyle bir ekranda, paletinizi dikkatlice düzenlemelisiniz. Ancak, ekranınız 32 renkten daha az renge sahipse veya HAM (4096 renk) modunda ise, sprite renkleri, ekran renklerinden tamamen bağımsız olacaktır. Sprite'larınız eğer 15 renkli ise, bu renklerin (17-31 arası, 16. renk saydamdır) hepsini de kullanabilirler. Eğer sprite'larınız 3 renkli ise, durum biraz daha değişir. Sprite'lar, ikili gruplar halinde, paletin bu kısmından (17-31) renklerini alırlar.
Sprite 0 ve 1: 17-19. renkler Sprite 2 ve3: 21-23. renkler Sprite 4 ve 5: 25-27.renkler
Sprite 6 ve 7: >29-31. renkler Eğer sprite'larınız 3 renkliyse ve ekranda 8'den fazla sprite kullanacaksanız, sprite'larınızın dikey hareketleri sonucunda, renklerinde değişiklikler olabilir. Çün-.
kü, bilgisayar tarafından otomatik olarak, bu fazladan sprite'ların hareketleri sonucunda çakışmalar olup olmadığı araştırılır ve çakışma varsa (örneğin, o yatay pozisyonda, aynı numaralı bir sprite daha varsa) o ekran satırında kullanılmamış olan bir başka sprite ekrana getirilir. Bu sprite- "ın rengi de daha önceki sprite'ın rengi ile aynı olmayabilir. Bu yüzden ekrana 8'den fazla *3 renkli sprite' getirecekseniz, tüm sprite çiftlerinin renklerini aynı yapın ki, değişen renkler, istenmeyen görüntülere yol açmasın. Ayrıca, yatay olarak 8'den fazla (3 renkli) sprite çakışırsa, fazladan sprite'lar görüntülenmez. Kullanacağınız sprite'lar 15 renkli olacaksa ve ekranda 4'den fazla sprite kullanacaksanız, tüm sprite'lar zaten aynı renkleri kullanacağından, yukarıdaki problemle karşılaşmazsınız. Ancak, yatay olarak, 4'den fazla (15 renkli) sprite'ın çakışmamasına dikkat edin. Mouse göstergeci, normalde sıfırıncı sprite olduğundan, 17-19 arası renkleri değiştirerek, rengini ayarlayabilirsiniz. Ayrıca, bir sprite'ınız 15 renkli olacak diye, kalan sprite'larınızı da 15 renkli yapıp sayılarını yarıya indirmeniz gerekmez. Yani ekranda (aynı yatay pozisyonda); *O adet 15 renkli” ve *8 adet 3 renkli” *| adet 15 renkli” ve *6 adet 3 renkli” *2 adet 15 ve *4 adet 3 renkli” *3 adet 15 renkli” ve *2 adet 3 renkli” *4 adet 15 renkli” ve “O adet 3 renkli” sprite gösterebilirsini Sprite'lar ile ilgili bir diğer nokta da, koordinat sistemlerinin açtığınız ekrana bağlı olmayışıdır. Yani sprite'lar hardware koordinat sistemini kullanırlar. Açılan ve Screen Display ile pozisyonu değiştirilmeyen bir 320x256'lık ekranın sol üst köşesi, hardware koordinatlarına göre (128,42)'dir. Ekranınız 320x200'lük ise, bu değerler (128,50)'dir. Yani, sprite'ınızı ekrana yerleştirirken ya *x pozisyonuna 128” ve *y pozisyonuna 42 (veya 50)” ekleyeceksiniz veya daha doğru bir yol olan, X Hard() ve Y Hard() fonksiyonlarını kullanacaksınız. Örneğin, 4 no'lu sprite'ınızı ekrandaki (75,100) noktasına yerli recekseniz, şu yöntemi deneyebilirsiniz: Sprite 4,X Hard(75),Y Hard(100),1 X Hard() ve Y Hard() fonksiyonları, parantez içindeki ekran (screen) koordinatlarını, donanım (hardware) koordinatlarına dönüştürürler. Bu komutların tersi şekilde işlev gören bir komut çifti daha var: X Sereen() ve Y Sereen() komutları da, parantez içindeki donanım (hardware) koordinatlarını, ekran (screen) koordinatlarına çevirirler. Bu komut çiftini de, sprite'ların bulundukları pozisyonları değerlendirirken kullanabilirsiniz. Buna örnek olarak, bir hardware sprite'ı olan mouse göstergecini verebilirsiniz. Aşağıdaki dönüşümler sonucunda, mouse göstergecinin ekranın neresinde bulunduğunu öğrenebilirsiniz: Screen(X Mouse) : Y-Y Screen(Y Mouse) Bu kadar açıklamadan sonra, şimdi de sprite komutlarını inceleyelim: * Sprite n,x,y,i Sprite kullanımındaki temel komuttur ve numaralı sprite'ı, verdiğiniz pozisyonda, “i' numaralı imaj şeklinde görüntü- İer. Sprite numarası normalde 0-7 arasında olmalıdır. Ancak, ekranda 8'den fazla sprite kullanacaksanız, sprite numaraları mutlaka 7'den yüksek olmalıdır. Aksi takdirde, bazı sprite'larınız görüntülenmez. Çünkü öncelik ilk 8 sprite'a (0-7 arası numaraya sahip sprite'lar) verilmiştir. Yani ekranda 0-7 arasındaki numaraya sahip sprite'ların hepsi ekranda ise, ekrana daha başka sprite getiremezsiniz. * Set Sprite Buffer n Yazımızın başında, bir sprite'ın yüksekliğinde herhangi bir sınırlama olmadığını belirtmiştik. Ancak, AMOS'ta sprite'ların yükseklikleri normalde 128'i aşamaz. Bu değeri, ya CONFIG.AMOS programı ile değiştirirsiniz veya Set Sprite Buffer n komutunu kullanarak, 'n' yerine vereceğiniz bir değer ile bu sınırlamayı aşabilir ve yüksekliği 128'den büyük olan sprite'ları da ekrana getirebilirsiniz. Bu değer, 16 ile 256 arasında olabilir. Ancak bu durumda canacak olan hafıza miktarını da göz önünde bulundursanız iyi olur. Gerekli hafıza miktarı: Hafıza — n * 96 byte'tır. * Sprite Update Off / On Normalde tüm sprite'lar, verdiğiniz koordinatlarda anında görüntülenirler. Ancak bu olay, bazen amaçlarınıza uygun olmayabilir. Bu durumda, Sprite Update Off komutunu vererek sprite'ların, koordinat değişimlerinde yeni koordinatlarında görüntülenmelerini iptal edebilirsiniz. Bu durumdan kurtulmak için de, Sprite Update On komutunu verebilirsiniz. * Sprite Update Sprite Update Off ile sprite yenilenmelerini (refresh) kapadıysanız, Sprite Update komutunu her verişinizde, sprite” rınızın yeni pozisyon ve şekillerinin, çerli olmasını sağlamış, yani onları tazel miş olursunuz. * —X Sprite(n) *n' numaralı sprite'ın o anki dikey pozisyonunu, bu fonksiyon yardımıyla öğrenebilirsiniz. * <Y Sprite(n) *n”' numaralı sprite'ın o anki yatay pozisyonunu, bu fonksiyon yardımıyla öğrenebilirsiniz. X Sprite() ve Y Sprite() fonksiyonlarının verdiği değerler donanım (hardware) koordinatları cinsindendir. * —J Sprite(n) *n' numaralı sprite'ın o anki şekil numarasını, bu fonksiyon yardımıyla öğrenebilirsiniz.
BOB'LAR (BLITTER OBJECTS): Sprite'ların aksine bob'lar, yazılım ürünüdürler. Ancak ekrana getirilmelerinde AMIGA'nın özel bir birimi olan BLITTER'dan yararlanılarak maksimum hız elde edilir. Ekranın birer parçasıdırlar. Paletleri ise, ekran paletinin tamamen aynısıdır. Yani, bob'un 1. rengi, ekranın da 1. rengidir. Yazılım ürünü olduklarından dolayı, esnekliği de beraberlerinde getirmişlerdir. Yani büyüklük ve sayılarında sınırlayıcı etken sadece hafızadır. Renk sayıları ise ekranın renk sayısı ile sınırlıdır. Ancak, bu kadar avantajlarının yanısıra, bazı dezavantajları da bulunmakta. Bu dezavantajlar şöyle özetlenebilir: 1. Bob'lar, altlarında bulunan ekran parçasının da hafızada bir yere kopyalanması gerektiğinden, sprite'lardan daha fazla hafızaya gereksinim duyarlar (Ancak bu engellenebilir.). 2. Ekrandaki bob'ların sayısı arttıkça, (sprite'ların aksine) çizim işlemleri uzayacağından dolayı, bob'larınızın hareketleri akıcılığını kaybeder, yani yavaşlar. 3. Ekranda bulunan bob'ların çizimleri, tarama satırı ekranı görünür ekranı çizmeye başlayana kadar bitmiyorsa, bob'larda istenmeyen bir kırpışma meydana gelir. Bu kırpışmayı önlemek için, görünen ekranın (physical screen), görünmeyen bir kopyası (logical screen) daha alınır ve tüm bob çizim işlemleri önce bu ekranda yapılır. Sonra, görünen (physical) ve görünmeyen bu iki ekran yer değiştirir ve görünen ekran görünmez hale, görünür ekran da görünür hale gelir ve bu işlem böylece devam eder. Bu yönteme Double Buffering adı verilmiştir. Bu sayede, bob kırpışmaları önlenir. Ancak, açılan bu ekstra ekran da hafızada, orijinali kadar yer işgal eder.
Şimdi de bob'lar ekrana getirilene kadar izlenen aşamaları inceleyelim. 1. Ekranda daha önce bulunan tüm bob'lar temizlenir (Bob Clear). Yani, bob'ların altlarında kalan ekran parçaları, eski yerlerine kopyalanır ve ekranın bozulması önlenir. 2. Bob'ların pozisyonları değiştirilir. 3. Bob'ların yeni pozisyonlarına çizilmeden önce, altlarında kalacak olan ekran bölgesi, bir hafıza bölgesine kopyalanır. 4. Bob'lar, yeni pozisyonlarına çizilir (Bob Draw). Normalde bu işlemlerden, 1, 3 ve 4 numaralı olanlar, AMOS tarafından otomatik olarak düzenlenirler ve sizin bunlardan haberiniz dahi olmaz. 2. aşamadaki işlem ise, sizin tarafınızdan gerçekleştirilir. Uzun zaman bob'ları kullandığınız halde bu adımlardan haberiniz dahi olmayabilir. Ancak, bazı durumlarda, AMOS'un gerçekleştirdiği bu adımlar işinize gelmeyebilir. Bu yüzden, bu mantığı kavradıktan sonra, her türlü sorununuzu çözebilirsiniz. Eğer AMOS'un bu adımları otomatik olarak gerçekleştirmesinden memnun değilseniz, manual modu seçersiniz (Bob Update Off) ve tüm bu işlemleri gerekli komutları vererek kendiniz gerçekleştirirsiniz. Karmaşık konulara daldığımız için bizleri bağışlayın. Şimdi de sık kullanılan bazı bob komutlarını inceleyelim. * Bob n,x,y,i Bob kullanımındaki temel komuttur ve 'n' numaralı bob'u, verdiğiniz pozisyonda, 'i' numaralı imaj şeklinde görüntüler. * Double Buffer Bob'ların ekranda titremelerini engellemek amacıyla kullanılır. Daha geniş açıklamasını yukarıdaki paragraflarda bulabilirsiniz. * Limit Bob n,x1,y1 to x2,y2 'n' numaralı bob'un verilen dörtgensel bölgenin dışında görüntülenmemesini sağlar. Bu komutu hiç parametre vermeden kullanırsanız (yani 'Limit Bob' olarak) daha önce verilen Limit Bob komutlarını geçersiz kılar, yani bob'larınız, normalde olduğu gibi tüm ekranda görünür hale geçer. * Bob Update Off/ On Normalde tüm bob'lar, verdiğiniz koordinatlarda anında görüntülenirler. Ancak bu olay, bazen amaçlarınıza uygun olmayabilir. Bu durumda, Bob Update Off komutunu vererek bob'ların, koordinat değişimlerinde yeni koordinatlarında görüntülenmelerini iptal edebilirsiniz. Bu durumdan kurtulmak için de, Bob Update On komutunu verebilirsiniz. * Bob Update Bob Update Off ile bob yenilenmelerini (refresh) kapadıysanız, Bob Update komutunu her verişinizde, bob'larınızın yeni pozisyon ve şekillerinin geçerli olmasını sağlarsınız; yani, onları tazelemiş olursunuz. * X Bob(n) 'n' numaralı bob'un o anki dikey pozisyonunu, bu fonksiyon yardımıyla öğrenebilirsiniz.
Y Bob(n) 'n' numaralı bob'un o anki yatay pozisyonunu, bu fonksiyon yardımıyla öğrenebilirsiniz. Bob(n) 'n' numaralı bob'un o anki şekil numarasını, bu fonksiyon yardımıyla öğrenebilirsiniz. Şimdi de bu kadar teoriden sonra, biraz da pratiğe geçelim. Aşağıda, bob'larla ilgili örnek programımız yer alıyor.
AMOS (C) 1990 — Buropress Software, Ltd.
BOB (BLITTER OBJECTS) ÖRNEK PROGRAM #1
dok
R-13 : Rem DAİRELERİN YARICAPI
N-7:Rem DAİRE SAYISI (MAX:
INIT
IMAGESİR|
ACTIONIN|
Procedure INIT
Screen Open 0,320,256,4,Lowres
Hide : Curs Off
Flash Off : Cls 0
Palette 0,$FFF,SAAA,$666
End Proc
Procedure İMAGESİR|
For To 3
Ink A
Circle R,R,R
Paint R,R
Get Bob A,0,0 To R*242,R*242
Next
Cis 0
End Proc
Procedure ACTIONİN|
Randomize Timer
Synchro Off
Double Buffer
Priority Reverse On
Ün X$4"(1,4,6)01
PEY5/013X.12X.120.22
Y$-"(1,1,2X
2M1,1,201,-1,2X(1,-2,2)
For A-0 To N
X-Rnd(240) : YARnd(200)
For C-A To A4(N41)*2 Step
Add F,1,1 To 3
Set Bob C,1,,
Bob C,X,Y,F
Channel C To Bob C
Move X C,X$
Move Y C,Y$
Move On C
Synchro
Wait Vbi
Next
Next
Repeat
Synchro : Wait Vbi
Until Mouse Key
Fade 4 :
Repeat
Synchro : Wait Vbi
Until Timer>60
Screen Close Screen
End Proc
Artık bu ayki okuyucu mektuplarına geçebiliriz. İlk olarak; köşemizin okurlarından sayın Çağatay Ündeğer'in sorunlarını çözmeye çalışalım. 1. AMOS, Türkçe klavyeye nasıl çevrilir? Bu problemi çözebilmek için ilk önce, bir Türkçe karakter seti çizmelisiniz. Bu işlemi, herhangi bir ticari font editörü veya bilgisayarınızla birlikte verilen Extras disketindeki FED (Font Editor) programıyla gerçekleştirebilirsiniz. Normalde, kodları 32-127 arasında olanlar, standart karakter setinde kullanılır. Ayrıca, AMOS da, 0-31 arası kodları ve 128-159 arası karakterleri, bazı özel amaçlara yönelik olarak kullandığından, Türkçe'nin özel karakterlerini bu aralıklara da koyamıyoruz. Bu yüzden, Türk harfleri için, 160-255 arasındaki ASCII kodlarını kullanmalıyız. Biz, bunun için, 160-171 arası karakterleri kullanıyoruz. Bu ilk aşamayı hallettikten sonra, bu karakter setini kullanabilmeniz için şu yolu izlemelisiniz.
Önce, FONT CONVERTER.AMOS programı yardımıyla, karakter setinizi AMOS'un standart font dosyası (Default.Font) haline dönüştürmelisiniz. Yalnız, bunu yapabilmeniz için, karakter setinizin, 8x8 ebatında ve 'Fixed Width' olması yani tüm karakterlerin genişliklerinin sabit olması gerekir. FONT CONVERTER.AMOS programı, karakter setinizi FONTS: directory'sinde arayacağından, ilk etapta, yaptığınız karakter setini açılışta kullanacağınız disketin FONTS directory'sine kopyalamalısınız. Örneğin, fontunuz, 'X' ismindeyse, 'X' directory'sini ve 'X.font' dosyasını, AMOS'u yüklerken kullandığınız diskete kopyalayın. Ardından, bilgisayarınızı resetleyin ve bu diski takarak AMOS'u yükleyin ve FONT CONVERTER.AMOS programını yükleyip çalıştırın. Program, çalıştıktan sonra farenin sağ tuşu ile, menüyü çıkartın ve buradan, yaptığınız fontun ismini seçin. Bilgisayar, fontları kendi formatına geçirdikten sonra SAVE CURRENT AMOS FOLDER seçeneği ile, fontu kaydedin. Karakter setinizi, AMOS'un formatına geçirmeyi başardınız. Ne var ki, klavyenizin bu haliyle Türkçe karakterlerinize ulaşamazsınız. Bu yüzden, KEYBOARD DEFINER.AMOS programı ile, Türkçe karakterlerinizi çeşitli tuşlara yükleyip, bu tuşların görevlerini de, ALT, SHIFT veya her ikisinin de birlikte kullanılmasıyla elde edilen bir tuş kombinasyonuna aktarmalısınız. Tüm tuşları tanımladıktan sonra da, AMOS SYSTEM directory'sindeki DEFAULT.KEY dosyasının üzerine kaydedin. Geçmiş olsun, artık tamamen Türkçe bir AMOS disketine sahipsiniz. Hatta, CONFIG.AMOS programıyla, AMOS'taki tüm yazıları da Türkçe'ye çevirebilirsiniz.
Yalnız, her şey bununla bitmiyor. Türkçe fontunuzu, bu yöntemle Text komutuyla kullanamazsınız. Çünkü bu komut, grafik komutları kapsamına giriyor. Eğer mutlaka Text komutunu kullanacağım diyorsanız, izleyeceğiniz yol, AMOS'taki Setfont komutunu kullanmak olacak. Bu komutun kullanımı ise; Setfont n şeklinde. Burada, 'n' yerine, fontunuzun numarasını vereceksiniz. Bu değeri de, deneme-yanılma yoluyla elde edebilirsiniz. Ayrıca, aşağıdaki prosedürü kullanarak da, Türkçe fontunuzu kolaylıkla, Text komutuyla kullanılır hale getirebilirsiniz.
“* *
AMOS (C) 1990 *
Europress Software, Ltd. — *
*
İSMİ VERİLEN FONTU — *
* KULLANMAPROSEDÜRÜ *
*
alel
FONT KULLAN|"Font-
Ismi",Font-Boyu|
FONT KULLAN|"Topaz",9)
Text 0,100,"Bu bir font bulma prosedu-
rudur.”
Procedure FONT KULLAN|A$,BOY|
If Then Pop Proc
Get Fonts
A$-Upper$(A$)
Do
Inc N : F$-Font$(N) : If F$-"" Then
N—-I : Exit
F- Val(Mid$(F$,30,4)) :
(F$,Instr (F$,".font")-1)
If Upper$(F$)-A$ and(F-BOY or
BOY>-0) Then Set Font N : Exit Loop
End
2. AMOS'ta müzik ve efektler nasıl kullanılır? Müzik kullanabilmen için, ya AMOS'un dahili müzik komutlarını kullanarak müziğini hazırlaman ya da Sonix, Sound/Noise-Tracker veya GMC programlarından herhangi biri ile hazırlanmış bir müziği, uygun converter programı ile AMOS formatına geçirmen gerekiyor. Sound/Noise-Tracker programlarını AMOS formatına çeviren programın ilk versiyonunda (orijinal AMOS 1.1 ile verilen) bazı hatalar bulunuyor. Bu yüzden, AMOS 1.2 ile birlikte verilen SoundTracker 2 1.AMOS programını kullanmalısın. Yalnız, bu programla çevrilen müzikler ile kullanılamaz. AMOS 1.2 veya daha üst versiyonlarda kullanılabilir. AMOS'un dahili ses komutları ve efekt kullanımı da, dergimizin 15, 16 ve 17. sayılarının AMOS köşesinde daha önceden açıklanmıştı. Okuyucularımızdan sayın Ertuğrul Deniz'e de Ramos'un tüm versiyonlarını gönderdik, içi rahat etsin... Bir diğer mektubu da, Çanakkale'den sayın Ali Hatay göndermiş. Sprite'lar ve Türkçe karakter seti konusundaki sorularınızı, bu ayki yazımızın içerisinde bulabilirsiniz. Disketleriniz de adresinize postalandı. ile ilgili olan sorunuzu da, bir aksilik olmazsa, gelecek ay geniş olarak ele almayı düşünüyoruz. Ancak size ve tüm okurlara tavsiyemiz; en kısa zamanda AMOS 1.3'ü kullanmaya başlamanız olacaktır... Sevgili arkadaşlar; nasıl yazacağımızı bilemiyoruz. Klasiğin de klasiği oldu artık ama, AMOS ile yaptığınız program veya prosedürleri, public domain olarak, bize gönderin. Programınız, eğer güzelse, kısmen veya tamamen yayınlanabilir. Gönderdiğiniz programlardan oluşacak olan AMOS arşivinden, bize disket gönderen herkes yararlanabilecek. Bu arşivden faydalanabilmeniz için, en az bir program göndermeniz gerekiyor (Tabii ki posta pulunu da eklemeyi ihmal etmeyin). Kendi yaptığımız Public Domain programları da arşive koyduk bile. Ancak gönderdiğiniz programlar Compile edilmemiş olmalı. Haydi iş başına. Bu aylık da bu kadar. Gelecek ay, Compiler ve AMOS'un yeni versiyonlarının kazandırdığı ekstra komutları tanıtmaya çalışacağız. Örnek programlarımız da eksik olmayacak. Bye...