Bu sayfadaki yazılar
Sayfanın metni
Sayfa 38
move.l — #$1234,d0 tst.l dO bne NEgual Tts NEgual: d0 rts
leştirir. Aşağıdaki örnekte register'ı kontrol edilir ve bu register'ın içeriği pozitif bir sayıysa register içeriği silinir. Negatif olduğu durumlarda da içerik aynen kalır.
move.l — #50,d0 tst.l dO bpl Pos Pos: cir.l dO Tts
12. BMI komutu da BPL gibi çalışmaktadır. Aralarındaki tek fark, BMI'nin negatif değerlerde dallanma gerçekleştirmesidir. Aşağıdaki örnekte d0'ın içeriği negatif olduğu zaman NEG label'ına dallanılır ve burada da d0'ın içeriği silinir.
8. BEQ komutu son karşılaştırma işleminin sonucunun belirtilen değere eşit olduğunda istediğimiz label'a dallanmamızı sağlar. Aşağıdaki örnekte d0'a #$1234 değeri yazıldıktan sonra, bu register'ın içeriği #$1234 değeri ile karşılaştırıldığından sonuç eşittir çıkacaktır ve programa EQUAL rutininden devam edilecektir. Burada da d0 register'ı -1'e ulaşana kadar bilgisayarımızın Power Led'ini kapatıp açıyoruz. DBF komutu her seferinde d0'ın içeriğini otomatik olarak 1 azaltmakta ve -1'e varıldığında da döngüden çıkmayı sağlamakta. Eğer d0'ı kendisinden farklı bir değer ile karşılaştırırsak, programın NEQUAL satırına gitmemiz ve d0'ın içeriğini silmemiz sağlanacaktır.
move.l — #$1234,d0 cmp.l #$1234,d0 bne NEgual beg Egual Egual: behg #1,$bfe001 dbf d0,Egual
TİS NEQUAL: dü Tts E 9. BVC komutu Overflow flag'i (V-flag) 0 ise belirtilen label'a dallanmamızı sağlar. Bildiğiniz gibi Overflow flag'i taşma olup olmadığını haber verir. Bu durumda BVC yardımıyla taşma olmadığında dallanma gerçekleştirebilirsiniz. Aşağıdaki örnekte ilk önce d0'a -43 yazılmakta, ardından da bu değere 40 eklenmektedir. Taşma olabilmesi için değere en az 43 eklenmesi gerektiğinden Overflow flag'imiz sönük kalacaktır ve program da NOPE label'ından devam edecektir. Burada da d0 register'ımızı temizliyoruz. Taşma olsaydı Power Led'inin konumu değişecekti.
move.l — #-43,d0 add.l #40,d0 bvc Nope behg #1,bfe001 Tİs Nope: d0 Tits
10. BVS ise bir önceki komut olan BVC'nin tersi işlem yaparak Overflow flag'inin yanık olduğu durumlarda dallanma gerçekleştirecektir. Deminki örneği biraz değiştirmemiz sayesinde aşağıdaki örneği elde ettik. Burada d0'ın içeriği olan -43'e 100 değerini ekleyerek taşma flag'imizin yanmasını sağladım. BVS komutu ile de taşma flag'i 1 olduğunda (ki 1), YEPP label'ına dallanma gerçekleşmekte. YEPP label'ında da d0 register'ının içeriğini silmekteyiz. Taşma olmasaydı programın işlemesi BCHG komutundan devam edecekti ve Power Led'imizin konumu değişecekti.
move.l — #-43,d0 add.l #100,d0 bvs Yepp behg — #1,bfe00l Yepp: cir.l d0
11. BPL komutu, TST ile beraber kullanıldığında register içeriğinin pozitif bir değer olup olmamasını kontrol ederek pozitif olduğu durumlarda bizim istediğimiz bir label'a dallanma gerçek-
move.l — #-76,d0 tst.l d0 bmi Neg Tts Neg: cirl d0
13. BGE komutu, karşılaştırma sonucu hangisinin diğerinden büyük ya da eşit olduğunu öğrenmemizi sağlar. Aşağıdaki örnekte d0 ve d1 register'larının içerikleri karşılaştırılıyor. d1'in içeriği d0'ın içeriğinden (-100) daha büyük olduğuna göre şartımız gerçekleşmekte ve programa VAGIN label'ından devam edilmekte. Burada da iki register'ın içerikleri değiştirilerek programdan çıkılmakta.
move.l — #100,d0 move.l — cmp.l bge Vagin Tts Vagin: exg dO,d1 Tts
14. BLT komutu CMP işleminden sonra destination register'ı içeriğinin source register'ı içeriğinden daha küçük olduğu durumlarda dallanmamızı sağlamakta. BLT komutu BGE'nin tamamlayıcı komutudur. Aşağıdaki örnekte d1'in içeriği d0'dan küçük olduğundan, programa VAGIN label'ından devam edilir. Burada her iki register içeriği de silinecektir.
move.l — #512,d0 move.l — — d0,di bit Vagin Tts Vagin: d0 cir.l di
rts 15. BGT yardımıyla CMP komutundaki 2. register içeriğinin 1. register içeriğinden büyük olup olmadığı kontrol edilebilir ve sadece büyük olduğu durumlarda belirtilen label'a dallanma gerçekleştirilir. BGE komutu için vermiş olduğum örnek, aynen bu komut ile de kullanılabilir. Sadece 4. satırı değiştirmeniz yeterlidir. iü
16. BLE komutu da BGT'nin tamamlayıcısıdır ve örnek olarak da BLT komutu için vermiş olduğum örneği kullanabilirsiniz. DBzz komutları, Bzz komutlarının tam tersi işlemi yaparlar; belirtilen şart gerçekleşmişse programa kalınan yerden devam ederler. Şartın gerçekleşmediği her durumda da verilen label'a dallanmanız sağlanır. Szz komutları, Bzz ve DBzz'den farklı olarak dallanma yaratmazlar. Sadece şart gerçekleşmişse belirtilen register ya da adres içeriğini -1 yaparlar. Diğer durumlarda belirtilen register ya da adres içeriği 0 olacaktır. Artık komutlarla ilgili tüm sorularınızı cevapladım. Umarım bu kısa komut listesi işinize yarar. Artık bu seferlik de hoşçakalın demekten başka şey kalmıyor geriye. Bir dahaki ay artık Gelişmiş Assembler köşesine biraz ağırlık vermek istiyorum. Şimdiden ağzınızı sulandırayım; gelecek ayki yazımda ufak bir intro rutini vermeyi planlıyorum. Biraz değişiklik herkesin hakkı. Haydi hoşçakalın ...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 39
Evet, uzun bir aradan sonra yeni bir raytracing utility'si ile beraberiz. Bu sefer daha önceden tanıtmış olduğum bir program olan Pixel 3D'yi tekrar tanıtma gereği buldum. Nedeni de programın yeni versiyonunun çıkmış olması. Bu yeni versiyonda program baştan aşağı değişmiş durumda. Programcılar oturup baştan yazmışlar. Programın görünüşü bir hayli güzel; ben 3 boyutluymuş gibi gözüken gri gadget'ları zaten hep sevmişimdir. Bunlar insana ROM 2.0 kullanıyormuş hissini vermekte. Bütün programcılar bu stili kullansa, ne güzel olacak bütün programlar. Her neyse, dediğim gibi bu sefer çok güçlü bir converter programıyla karşı karşıyayız. Bu programla LightWave 3D, Imagine, 3D Pro, Sculpt 3D, TurboSilver, VideoScape 3D ve DXF AutoCAD için obje dataları yaratabilirsiniz. Nasıl, program yelpazesi hayli geniş, siz ne dersiniz? Program yüklendiğinde, karşımıza iki bölüme ayrılmış bir pencere çıkmakta. Bunun üst kısmı boş. Alt kısımda ise çeşitli gadget'lar yer alıyor. Herhangi bir resim datası yüklemeye kalktığınızda, data convert edilerek pencerenin üst kesimindeki boş alanda görülecektir. Şimdi dilerseniz altta yer alan gadget'ları sırayla tanıtmaya başlayalım. İlk iki gadget Objects başlığı altında bulunmakta olan Load ve Save. Load ile daha önceden hazırlanmış bir objeyi yükleyebilirsiniz. Burada, objenin hangi program için hazırlandığı fark etmiyor; program yüklenen dosyayı otomatik olarak inceleyip kendisini buna göre uydurarak yükler. Tabii ki objenin yukarıda saymış olduğum programlardan birinde yüklenebilmesi gerekmekte. Aynı şekilde convert işleminden geçen bir resmi de obje olarak kaydetmek için Save gadget'ını kullanıyoruz. Burada karşımıza
Tanımı: Normal bir IFF resmi üç boyutlu obje datasına çevirerek, bunun üzerinde değişiklik yapmamızı ve bunu, kullandığımız raytracing programı için obje datası olarak kaydetmemizi sağlar.
bir pencere çıkarak bize objenin hangi program standardında kaydedilmesi gerektiğini soracak. Buradaki gadget'lardan birini klikleyerek uygun bir cevap verdikten sonra karşımıza çıkan file-requester'da objenin path'i ve ismi belirlenebilir.
İkinci başlık olan Bitmaps altında bulunan iki gadget yardımıyla, dilediğimiz bir resmi yükleyebilir ve onun üzerinde değişiklikler yapabiliriz. Import gadget'ı, IFF resmi yüklememizi sağlamakta, Karşımıza bir file-requester çıkacak ve obje haline getirilecek IFF resim dosyasının path'ini ve ismini belirlememiz istenecek. Config gadget'ı ise convert işlemi sırasında kullanılacak belirlememizi sağlamakta. Bu gadget'ı kliklediğimizde, karşımıza bir pencere çıkmakta,
Bu penceredeki parametreler de kısaca şöyle: Conversion Mode yazısının hemen sağında yer alan gadget yardımıyla dönüşüm tipini belirleyebiliriz. Burada beş ayrı tipte çevrim yapmak mümkün. İlki olan Color, renkli bir IFF resmi renkli bir obje datasına çevirmemizi sağlar. Burada IFF resimdeki renkler aynen korunur. Manual yardımıyla bu pencerede yer alan diğer parametrelere göre çevrim yapabiliriz. Defined 1 ve Defined 2 ile, yine sizin parametrelere çevrim yapılabilmekte. Bu parametreler Manual'ın aksine, bir defa ayarladıktan sonra diskete kaydedilebilir. Bundan sonra program her yüklendiğinde bunları kullanır ve çevrimi sizin tanımladığınız parametrelere göre yapar. Son mod olan Mono ise, tek renkli olarak çevrim yapılmasını sağlamakta. IFF resim renkli bile olsa çevrim sırasında bu göz ardı edilerek tek renge düşürülür. Extrusion Set # ve Extrusion Value 1, Extrusion Value 2 yardımıyla, yaratılan objenin derinliğini artırabiliriz. Bu, objenin sizin belirleyeceğiniz uzaklığa kopyalanmasıyla gerçekleşir. Yaratılan ilk yüzeye ait noktalar ikinci yüzeydeki karşılıklarıyla da birleştirilerek bu kenarların yüzeyler oluşturması sağlanacak. Intensity Range, IFF resimde flu olarak bulunan pikselleri daha koyulaştırarak belirgin olmalarını sağlar. Grid Unit Size yardımıyla, objenin görüldüğü pencerede istediğimiz boyutta bir tel örgü yaratabiliriz. Bu şekilde objenin boyutlarını tam olarak görebiliriz. Spin gadget'ı yardımıyla objeyi, merkez ekseni etrafında döndürerek daha karışık bir obje yaratabiliriz. Justification, objenin merkez eksenine göre nerede yer alacağını belirler. Center, objeyi merkezlerken, Top merkez ekseninin üst yarısında bulunmasını, Bottom ise alt yarıda bulunmasını sağlar. Rotation Axis gadget'ı ile Spin modu kullanıldığında objenin hangi eksen etrafında döndürülerek yeni objenin yaratılacağını belirleyebiliriz. Bu gadget şu üç konumdan biri olabilir: X-Horiz, Y-Vert, Z-Forw. Bundan sonraki iki gadget olan Degree Value 1 ve Degree Value 2'ye dönüş açıları girilir. Slice Count, spin işlemi sırasında kaç ara yüzey yaratılacağını belirlememizi; Radius offset ise, spin sırasında objenin merkeze olan uzaklığını belirlememizi sağlar. Line Smoothing gadget'ı, çevrim sırasında kullanılacak çizgi düzeltme algoritmalarından birini (Alg1 ya da Alg2) seçmemizi sağlar. Bu penceredeki son gadget'lar da kısaca şöyle; Load Settings ile daha önceden hazırlanmış bir parametre dosyasını yükleyebilir, Save Settings ile tam tersi işlem yaparak o anki parametreleri (Defined1 ve Defined2 modları için) diskete kaydedebiliriz. Clear gadget'ı ise yapılan tüm ayarlamaları siler. Son gadget olan Continue, ana çalışma ekranına dönmemizi sağlar. Ana ekranda üçüncü kolon olarak gözüken değerler (Location) objenin o anki konumunu belirleyen rakamlar. Aslında objenin konumu sabittir, objeye bakış açısını sadece değiştirebiliriz. İlk parametre Heading, x ekseni üzerindeki dönüş açımız. Pitch ise y ekseni üzerindeki dönüş açısını belirler. Son parametre olan Bank ise, z ekseni üzerindeki dönüş açısı. Bu değerler, VideoScape 3D'deki gibi çalışmaktadır. Üçüncü kolonun yanında yer alan ok işaretleriyle objeye bakış açımızı değiştirebiliriz. Dört büyük ok işareti bakış noktasının pozisyonunu değiştirmemizi sağlar. Bu dört ok işaretinin ortasında yer alan Draw gadget'ı objenin yeni koordinatlarında tekrar çizilmesini gerçekleştirir. Bakış açısını değiştirirken, daha hızlı bir işlem sağlayabilmek için bu sırada dörtgen bir prizma olarak görülecek. İstediğimiz koordinatı ayarladıktan sonra Draw gadget'ı yardımıyla objenin yeni koordinatında çizilmesini sağlayabiliriz. Gelelim ufak ok işaretlerine. Solu gösteren ok ile z ekseni üzerinde sağa doğru (yukarıdan bakıldığında) dönme gerçekleştirirken sağa bakan ok ile de ters yönde dönme sağlayabiliriz. Yukarı bakan küçük ok bakış noktasının z parametresini azaltır, aşağı bakan ise bu parametreyi artırır. Display başlığı altındaki gadget'lar da görüntü üzerinde değişiklik yapmamızı sağlar. Sol taraftaki 4 gadget olan Wire (tel grafik), Solid (dolu tel grafik), Shade (tonlamalı) ve Color (renkli) çizim modlarından birini seçmemizi sağlar. Unutmayın, bu modlar aynı sıralamaya göre çizimden önceki hesaplama süresini arttırırlar. Data gadget'ı ise objenin geneli hakkında bir bilgi edinmemizi sağlar. Karşımıza bir pencere çıkacak ve bu pencerede bir sürü değer gözükecektir. Bu değerler kısaca şöyle: Point Number, objede yer alan noktaların adedini, Polygon Number ise yüzey adedini gösterir. Largest Polygon değeri bize kaç adet büyük yüzey bulunduğunu gösterir. Object Width (en), Object Heigth (boy) ve Object Depth (derinlik) ise objenin boyutlarını gösterir. Bu pencerenin sağ tarafında yer alan gadget ve parametrelerle obje geneli hakkında değişiklikler yapabiliriz. İlk parametre olan Point Reduction objedeki noktaların %90 olarak azaltılmasını sağlar. Aynı şekilde de Face Reduction yüzeyleri %90 olarak azaltır. Flipped Polygons her yüzeyin ters yüz edilerek tekrarlanmasını sağlar. Bu özellikle VideoScape 3D programında gerekli olmakta. Bu şekilde yaratılan yüzeyler her iki taraftan da bakıldığında görülebilir. Polygon Division ise yüzeyleri geniş yerde bölmeyi sağlar. Bu şekilde obje daha düzgün görülebilir. Perform Manipulation gadget'ı ile yukarıda ayarladığınız parametrelerin obje üzerine uygulanmasını sağlamakta. Son üç gadget'ı açmışsanız bu biraz zaman alabilir. Continue gadget'ı ile ana ekrana dönebilirsiniz. Ekranın sağ tarafında yer alan dört gadget ise programın genelinde kullanılan bazı parametreleri belirlememizi sağlar. Memory kliklediğimizde karşımıza bir pencere çıkar. Burada programın kullanacağı hafızanın genişliğini belirlemelisiniz. Daha fazla nokta kullanmak için ayarı da aynı oranla artırmalısınız. Aşağıdaki ufak listede nokta ve yüzey sayılarına göre ne kadar hafıza gerektiği belirtilmekte: