Bu sayfadaki yazılar
Sayfanın metni
Sayfa 41
Selam Assembler'cılar!.. Geçen ay hatırlarsanız intuition text rutinlerini açıklamış ve intuition'un window'lara kazandırdığı özelliklerden bazılarını incelemiştik. Bu ay ise geçen ay incelediğimiz message port'a biraz detaylı olarak bakacağız.
İsterseniz message port'un ne olduğunu kısaca izah edeyim. Amiga Intuition sistemini hazırlayanlar, sistemin herkese açık şekilde olmasına dikkat etmişler. Bunu da, exec ve intuition işletim sistemini parçalara ayırarak halletmişler. Bunun yararı, her bir parçanın gerektiğinde başına buyruk çalışabilmesi. Ama her biri gerektiğinde diğer birimlerden bilgi alabilmeli. Çünkü ne kadar birbirlerinden ayrı çalışsalar da, birbirlerini rahatsız etmemeleri gerekmekte. Bunu toplumda yaşayan insanlara benzetebiliriz. Her insan başkalarını rahatsız etmediği, onların haklarına tecavüz etmediği sürece özgürdür. Aynı şekilde intuition'da değişik işlemleri gören birimler de diğer birimlerin işlevlerini engellemedikleri sürece istediklerini yapabilmektedirler.
Her bir birimin bir diğerini rahatsız etmemesi için birbirleriyle belli bir şekilde komünikasyon sağlamaları gerekir. Birimler bu komünikasyonu da mesaj port'u adını verdiğimiz ayrı bir birim yardımıyla yapmaktadırlar. Bu mesaj port'unu da birçok sahibi olan bir posta kutusuna benzetebiliriz. Posta kutumuzun sahipleri intuition ve exec işletim sistemlerinin parçalarıdır. Bunların arasında klavye kontrolü, port kontrol birimi ve disk kontrol birimi gibi bir sürü birim var. Diğer bir birime mesaj göndermek isteyen birim, mesajını paketleyerek mesaj portuna bırakır. Tabii bu mesajın üzerinde kimden geldiği, kime gideceği ve boyutu da kayıtlıdır. En son olarak da mesajı gönderen birim mesaj port kontrol birimine bir mesaj bırakıldığını ve bunun kime gideceğini bildirir. Bu sayede her seferinde doğru mesajların doğru birimlere dağıtılması sağlanır. Mesaj artık yeni sahibini mesaj port'unda beklemektedir. Birimlerin her biri belli zaman aralıklarıyla posta kutusunu (mesaj portunu) kontrol ederek, kendilerine mesaj bırakılmış mı diye bakarlar. Kendilerine mesaj varsa hemen bunu alırlar ve mesaj portu kontrol birimine de kendilerine gönderilmiş olan mesajı aldıklarını belirtirler. Daha sonra da aldıkları mesajı gerektiği şekilde işlerler ve gönderen birime mesajın alındığına dair bir teşekkür notu (yine bir mesaj) gönderirler.
Nasıl, pek de zor değilmiş değil mi? Şimdi gelelim bu anlatılanları gerçekte oldukları gibi görmeye... Zaten işin en zevkli kısmı da bu.
ÖMER SİNAN POLAT
Bir mesajı nasıl göndereceğinizi bildikten sonra Amiga'nın exec ve intuition'u ile yapamayacağınız şeyler yoktur. Evet, tüm işlemler sonuçta mesaj portuna bağlıdır. Ancak bu şekilde işlemlerin hepsinin düzgün ve isteğe uygun olması sağlanır. Mesaj portuyla yapılabilecek işlemler arasında klavyeden harf okuma, disketten ya da diskete bilgi aktarımı, paralel ve seri portlar yardımıyla çift yönlü bilgi aktarımı vardır. Tabii bu örnekler, Amiga'nın kendisi kadar geniş ve sonsuz. Her işlem değişik bir sürü işlemin yapılmasını sağlamakta. Fakat biz artık o kadar derinlerini incelemeyeceğiz; zira öyle bir işe kalkışsak, yazı dizimiz daha en az 3-4 sene rahatlıkla uzayabilir.
Yukarıda da belirttiğim gibi artık mesaj portunu kullanmaya geçebiliriz. Bunun için listesini yayınladığımız programı girmeniz gerekmekte. Bu programın yaptığı, kısaca şöyle: Bir ekran, bunun üstünde de maksimum boyutlarda bir pencere açılır. Pencere kapama ikonunu kliklediğiniz zaman, yeni bir pencere çıkarak emin olup olmadığınızı sorar. Burada biraz daha güzel bir teknik kullanarak gadget kullandım. Gadget'ları daha ileride detaylı olarak göreceğiz; fakat merak edenler yine de aşağıdaki kısa açıklamalardan biraz da olsa bilgi kapabilirler. Umarım bu kadar bilgi hemen aklınızı karıştırmaz; zira gadget'lar Amiga Intuition'unun en önemli özelliklerinden biridir ve oldukça karışıktırlar. Bütün programın açıklanmasına isterseniz hemen geçelim:
Start label'ı ile başlayan satırlardaki işlemleri, herhalde artık hepiniz anlamışsınızdır, graphics ve intuition library'leri açılmaya çalışılmakta ve başarı elde edildiğinde programa devam edilmekte. Eğer bu iki library'den herhangi biri değişik bir neden yüzünden açılamazsa, otomatik olarak program bitiş kısmına (duruma göre EXIT2 ya da EXIT1 rutinleri) dallanarak açılan library varsa onları kapar ve programdan çıkar. Library'ler açıldığında bunların base adresleri (hafızadaki kopyalarının bulundukları adresleri) INTBASE ve GFX-BASE isimli iki değişkene kaydedilir. Daha sonra ne zaman bu library'lerden birini kullanmak istiyorsak, onun base adresini a6 register'ına atmamız yeterli olacak. Bu sayede her seferinde library'i açma zahmetinden de kurtuluruz. Ayrıca bir library üst üste açılmaya kalkışıldığında, her seferinde hafıza giderek azalacaktır, zira library'ler açıldıktan sonra kapanana ya da bilgisayar reset'lenene kadar hafızada yer kaplayacaklardır. Programımıza kaldığımız yerden devam edelim. Deminki teknikle screen ve window'umuz da açılmakta. Bu tekniği bundan sonra devamlı kullanmanızı tavsiye ederim. Ancak bu sayede programınızın %100 hatasız çalışacağından emin olabilirsiniz. Hata çıksa bile, bu library ya da screen açılamadı gibi basit bir hata olmaz. Assembler'a başlarken birçok arkadaşımın ve benim başımıza gelen en büyük sorun buydu. Uzun ve detaylı bir program hazırlarız ve bunu çalıştırmaya kalkıştığımızda hata çıkar ve aklımıza hemen en uğraştırıcı kısımlarda hata olduğu gelir. Oysa genelde hafıza dolduğundan (library kapama alışkanlığımız daha yoktu) yeni bir library ya da window açılamamakta ve bizi saatlerce uğraştırmaktaydı.
Screen ve window açıldıktan sonra, bir rast-port'u screen'e tanımlıyoruz. Window ve screen adreslerini de bu arada bir değişkene koymayı unutmuyoruz. Bu, bize programdan çıkışta window'u tekrar kapayabilmek için gerekli. Tabii yine bir hata olduğunda program bunu algılayacak ve duruma göre CLOSE 1 ya da CLOSE2 isimli alt rutinlere dallanacak. EVENTWAIT isimli rutin, tüm işlemimizi yapan kısım; burada devamlı window'un kapatma ikonu kontrol edilmektedir. İlk önce a6'daki adresi bir değişkene koyuyoruz. Ardından;
move.l windoprt,a0 satırı ile işlem kontrol rutini için ön hazırlığımızı yapıyoruz. Bu rutin yardımıyla, istediğimiz herhangi bir window'da önemli bir işlem gerçekleştirildi mi diye kontrol edebiliriz. Bunun için ilk önce window'umuzu gösteren pointer adresini, a0 register'ına atamamız gerekli. EVENT rutini, adresi verilen window'a ait bilgileri kontrol ederek bir işlem yapılıp yapılmadığını kontrol eder ve işlemin niteliğine göre bir değeri d4 değişkenine koyar. Biz de window pointer'ımızı a0'a yerleştirdikten sonra, 'bsr EVENT' satırı yardımıyla bir işlem gerçekleştirildi mi diye kontrol ediyoruz. Rutinden geri dönüşte DEPO değişkeninin içeriğini tekrar yerine, yani a6 register'ına koyuyoruz. Artık sırada d4 register'ının içeriğini kontrol etmek ve buna göre bir işlem yaratmak var.
AMIGA ASSEMBLER
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 40
Diyelim ki bu parametredeki değer, "2 - 1 - 3 - 1" olsun. Bu durumda kursor ilk sütunda nota yazıldıktan sonra 2. sütuna atlar. Bu durumda ise kursor 2. sütun üzerinde nota yazılmasını beklemektedir. Nota yazılınca bu sefer 1. sütuna gider. Eğer kursoru 3. sütuna taşırsanız kursor nota yazıldıktan sonra yine 3. sütuna gidecektir. 4. sütunda ise nota yazılınca kursor yine 1. sütuna gidecektir.
Ekran renklerinin ayarlanması:
"Multi" parametresinin hemen altında ise ekran renklerini tek tek ayarlayabileceğiniz 8 renklik bir palet bulunmaktadır.
Undo: Palet üzerinde bir renk tanımlarken bir hata yaptığınızda bu komutu kullanarak bir evvelki konuma geri dönebilirsiniz.
Cancel: Bu komut ile yeni palet tanımlamaktan vazgeçebilirsiniz. Bu komut işlediğinde ise palet renkleri bu menüye ilk girdiğiniz şeklindeki en son konumuna geri döner.
Def: Bu komut; palet renklerini tracker programının seçtiği esas renklerine çevirir.
Key Rep: Bu komut sayesinde iki tuş basışı arasındaki geçen zamanı ayarlayabilirsiniz.
Accidental: Bu parametre sayesinde yarım sesli notaların diyez mi veya bemol mü olarak yazılacağını seçebilirsiniz.
Print Song: Bu komut ile parçanızın printer'dan yazılı çıktısını alabilirsiniz.
Split: Split konumunu açar kapatır (Bkz. Sample, Split, Trans).
Filter: Filtreyi kapatıp açar. Showdec: Bu parametre "ON" konumundayken programdaki tüm rakamlar decimal olarak, "OFF" konumundayken ise hexadecimal olarak yazılır.
Autodir: Bu parametre "ON" konumundayken "Disk Op." menüsüne her girişinizde disketin directory'si tekrardan alınır, "OFF" konumundayken ise bu durum gerçekleşmez.
Mod.only: Bu parametre "ON" konumundayken "Disk Op." menüsünde directory aldığınızda sadece başında "Mod." takısı olan dosyalar ekrana gelir.
MIDI: MIDI bağlantısını buradan açıp kapatabilirsiniz.
Merhabalar!!! Geçen sayıda bir player programını sizlere tanıtmıştım. Bu ay yine sizlere, sadece tracker programlarında yapılmış parçaları çalan bir program değil, popüler birçok programın modüllerini çalabilen bir program sunuyorum. Bu muhteşem ve süper player'ın adı "Noise Player". Program, Noise Tracker, Sound Tracker 2.3 ve 2.5, Future Composer, Delta Music 2.0 ve 2.1, Sound Monitor, Sidmon, TFMX Editor ve Jam Cracker isimli programlara ait tüm modülleri çalabilmektedir.
Programın çalışabilmesi için, disketinizde "Libs" directory'si altında "Req.Library" dosyasının da bulunması gerekmektedir.
Program direkt CLI'dan çalışmaktadır. Programı çağırırken ilk önce "Noiseplayer", sonra program opsiyonlarından sizin seçtiğiniz türe ait olanının kodunu ve daha sonra da çalınacak parçanın ismini yazmalısınız. Örneğin:
1 > NoisePlayer -m 1 Wamight 1991 Bu opsiyonlar ve ne işe yaradıklarına gelince: - m#: Bu opsiyon sadece modülü yükler ve çalar.
Not: Opsiyonların açıklanmasında "#" işaretini göreceksiniz. Bu işaretin bulunduğu yere 1 ile 6 arası bir rakam yazmanız gerekmektedir. Bu rakam modül çalındıktan sonra programdan nasıl çıkılacağını belirten bir kod numarasıdır. Bu kodları birazdan göreceğiz.
Clear: Bu komut ile tüm parametreler el değmemiş hale gelir.
Exit: Bu komut ile bu menüden çıkabilirsiniz. Sample, Split, Trans: Bu parametreler sayesinde klavye üzerindeki dört tuşu; belli bir enstrüman ve notayı çalmak için programlayabilirsiniz. Burada:
Sample: O satıra ait tuşun hangi enstrümanı kullanacağını belirtir.
Split: O satırda bulunan nota değeri klavyede bir tuşu temsil eder.
Trans: Split'de belirtilen tuşun Sample'da belirtilen enstrümanı hangi nota tonunda çalacağı burada belirtilen nota değeri ile saptanır.
2. sayfa: Timing: Bu parametre "CIA" konumundayken parçanın hızı Tempo parametresiyle ayarlanabilir. Ancak "VBLANK" konumundayken tempoyu sadece eski tracker programlarında olduğu gibi ayarlayabiliriz.
Tempo: Bu parametreye vereceğimiz 32- 255 arası bir değer ile programın ilk yüklendiğindeki parça temposunu belirtebiliriz.
Speed: Eğer timing parametresi "vblank" konumundaysa parçanın ilk yüklendiği sıradaki tempo değerini bu parametreyle ayarlamamız gerekir.
Spektrum Analizör ve Vu-Metre
renklerinin ayarlanması: Spektrum analizör ve vu-metrelerin çubuklarının renklerini tanımlarken çubukların ince çizgisel satırlardan olduğunu göreceksiniz. Bu satırların üzerinde gidip gelebilen bir de sarı renkli bir kursor göreceksiniz.
Edit: Bu parametre "Vu-Mtr" konumundayken vu-metre renklerini değiştireceğiz anlamına gelir. Eğer "Analyzer" konumundaysa bu sefer spektrum analizörün renklerini değiştireceğiz anlamına gelir.
Spread: Bu komut ile farklı renkler taşıyan iki satır arasında renk geçişi sağlayabilirsiniz.
Mods: Bu parametredeki boş kısma modüllerin hangi sürücüden ve hangi directory altından yükleneceğini (/kaydedileceğini) yazmalıyız.
Songs: Bu parametredeki boş kısma song
- p#: Modülü yükler ve modül arka planda çalmaya devam eder. Bu sırada başka bir programı daha çalıştırabilirsiniz. - n: Bu opsiyonu kullandığınızda, çalınacak parçanın ismini belirtmeniz gerekmez. Çünkü bu opsiyonla birlikte program Req.Library dosyasını kullanarak, modülleri tek tek yükleyebileceğiniz bir modül yükleme menüsü karşınıza getirir. Bu menü yardımıyla modülleri tek tek yükleyip dinleyebilirsiniz.
Get Dir: Bu komut ile takılı olan disketin directory'sini alabilirsiniz.
Cancel: Programdan çıkabilirsiniz. OK: Eğer modül veya modülleri dinlemek istiyorsanız, bu komutu kullanmalısınız.
dosyalarının hangi sürücüden ve hangi directory altından yükleneceğini (veya kaydedileceğini) yazmalıyız.
Sample: Bu parametredeki boş kısma enstrümanların hangi sürücüden ve hangi directory altından yükleneceğini (/kaydedileceğini) yazmalıyız.
PtDir: Bu parametredeki boş kısma preset listesinin hangi sürücü ve hangi directory'den yükleneceğini (/kaydedileceğini) yazmalıyız.
Max List: Preset listesine en fazla kaç enstrüman ismi kaydedebileceğimizin sınırını bu parametredeki değere yazmalıyız.
Dma Wait: Dma kanallarının bekleme süresi bu parametre ile ayarlanabilir.
Tuning Tone: Sampler menüsünde kullandığımız akort sinyalinin tonunu vereceğimiz nota değeri ile ayarlayabiliriz.
Nosamples: Bu parametre "ON" konumundayken bir modül yüklenebilir ancak modüle ait enstrümanlar yüklenmez.
Blankzero: Bu parametre "ON" konumundayken rakamların sol taraflarında kalan boş haneler '0' rakamıyla doldurulur.
Showdirs: Bu parametre "OFF" konumundayken "disk op." menüsüne her girişinizde disketin directory'si karşınıza gelmez.
Slow publ: Bu parametre "ON" konumdayken "FastMem" de kullanılabilir.
CutToBuffer: Bu parametre "ON" konumda ise "Sampler" menüsünde çalışırken kesip attığımız tüm ses grafiği parçaları buffer'a otomatik olarak kopyalanırlar.
Load Loop: Bu parametre "ON" konumundayken enstrümanlar eğer "LOOP" konumundaysalar "Loop" şeklinde yüklenirler.
Slow mode: Protracker'da çalışırken sayısal parametrelerin sağında ve solunda oklar bulunmaktadır. Soldaki oklara basarak rakamı arttırabilir, sağdaki oklara basarak da rakamları azaltabilirsiniz. Eğer bu arttırma ve azaltma işlemlerini mouse'un sağ ve sol tuşlarına birlikte basarak yaparsanız rakamlar daha hızlı azalıp çoğalır. Ancak "Slow mode" parametresi "OFF" konumundaysa bu işi gerçekleştirebilirsiniz, "ON" konumunda bu işlem gerçekleşmez.
Hide/Display .info files: Directory alırken info dosyalarının gösterilmesini veya gösterilmemesini sağlar.
Multi select: Sol shift tuşunu ve sol mouse düğmesini kullanarak birden fazla modülü seçebilir ve hepsini sırayla dinleyebilirsiniz.
- i: Bu opsiyonda da parça ismi yazmayacaksınız. Program bu opsiyonla birlikte çağrıldığında, program hakkında küçük bir açıklama ekrana gelir. Buna gerek duymayacaksınız; çünkü, bu açıklamayı size ben zaten veriyorum.!!!
Şimdi de modül çalındıktan sonra programdan çıkış şeklini belirtmemizi sağlayan kodları tanımaya geldi.
1 : Sol mouse tuşuna basılarak çıkılabilir. 2: Sağ mouse tuşuna basılarak çıkılabilir. 3: Ancak her iki mouse tuşuna basılarak çıkılabilir. 4 : Sol Amiga tuşu ve Control tuşlarına aynı anda basıldığında programdan çıkmanızı sağlar.
5 : Escape tuşuna bastığınızda programdan çıkmanızı sağlar.
6 : Bu kodla programdan hiç çıkılmayacağını modülün devamlı çalacağını belirtmiş olursunuz.
Evet bu seferlik kısa bir sohbet oldu !!!! Bu programı edinmek isteyenler "ZOMBIE BOYS MUSIC COMPACT" adlı bir disketin içinde bulabilirler. Bu disket "BRONX" isimli Türk bir cracker grubu tarafından düzenlenip ülkemizde dağıtılmış. Bir başka yazıda birlikte olmak ümidiyle HOŞÇAKALIN.