Bu sayfadaki yazılar
Sayfanın metni
Sayfa 47
Bölüm 4 Emir 'Skate' Akaydın
Test Platformu dokümanlarında dördüncü ve "son" bölüme geldik. İlk üç sayıda çapraz geliştirmeyle ilgili bilmeniz gereken birçok temel kavramı irdeledik. Bundan sonrası sizin Commodore 64 üzerindeki yeteneklerinizi geliştirmeniz ve yeni efektler kodladıkça PC gibi platformlardan nasıl faydalanabileceğinizi daha iyi öğrenmenizden ibaret. Ama bu işi tamamen size bırakmadan önce son bir örnek göreceğiz. Bu seferki örneğimiz 90'lı yıllarda Commodore 64 demolarında sıkça rastladığımız bir demo efekti olan $d017 sprite stretch efekti. Bir de buna yan border açma, renk geçişi ve sinüs efektleri eklenince ortaya hoş bir örnek çıkıyor.
DİKKAT!!! Aşağıda anlatılan kavramların birçoğu ileri derecede VIC (Commodore 64'ün grafik çipi) bilgisi gerektirmektedir. Eğer bu konularda başlangıç seviyesindeyseniz, belirli bir yerden sonra doküman sizin için gittikçe zevksizleşecektir. Bu durumda test platformu bölüm 1'den 3'e kadar olan kısım size daha çok hitap ediyor demektir. VIC konusunda temel bilgilere sahip olmadan bu dokümanı okumanız olumsuz sonuçlar doğurabilir.
Doğrudan Sonuca Gitmek
Bu son bölümde lafı hiç dolandırmadan yapmak istediğimiz efekti, efekt için çözmemiz gereken problemleri ve bunların PC kullanarak çözeceğimiz kısımlarını inceleyeceğiz. Ancak bu defaki efektimizin özelliği PC'ye ihtiyaç duymaması. PC'yi bu defa bir nevi pseudocode yazma ve bu kodu test etme aracı olarak kullanacağız. Böylece Commodore 64 üzerinde efektimizi kodlamaya başlamadan önce bazı kod parçalarımızın düzgün çalıştığından emin olacağız.
Efektimizde kullanacağımız öğeler:
1. 8 sprite'ı sağ ve sol ekran sınırlarına denk gelecek şekilde basma 2. Yan border açma 3. FLD (Flexible Line Distance) 4. $d017 stretch (Sprite'ları Y ekseninde uzatma) 5. Uzama (stretch) tablosu üretme (Lineer İnterpolasyon) 6. Yumuşak renk değiştirme 7. Yumuşak sinüs hareketleri için bir sinüs tablosu
Bunlar efekti elde etmemiz için yapmamız gerekenler. Peki hangileri bize ne tür problemler çıkarıyor ve nasıl çözüyoruz tek tek inceleyelim.
8 sprite
Aslında bu çok basit bir işmiş gibi görünse de bilinmesi gereken bir püf noktası var.
Şekil 1.
Öncelikle sprite koordinatları ($d000-$d00f) ve X koordinatlarının 9. bitleri ($d010) hakkında bilgi sahibi olmanız gerekiyor. Bu bilgiler programcının el kitabı ya da diğer birçok Commodore 64 dokümanından öğrenilebileceği için bu noktada üzerinde çok fazla durmuyorum. Asıl bilinmesi gereken şey x=0 koordinatına basılan bir Commodore 64 ekranının en solundan (borderlar da dahil olmak üzere) 8 pixel yana denk geldiğidir. Yani borderlar açıkken ekranın en soluna bir sprite basmak istediğinizde x > 0 demek yeterli olmaz. Negatif değerlere gitmemiz lazım. Bunu yapmanın yolu ise $d010 adresindeki 9. bitden geçiyor. Bu biti ilgili sprite için set etmek, yani 1 yapmak lazım. Eğer 0 numaralı sprite'ı kullanırsak 0. bit=1 olduğundan;
lda #$01 sta $d010
dememiz gerekiyor. Ancak işin ilginç tarafı mantıken $d000'ın (0. sprite X koordinatı) $ff değerini aldığında $00'ın bir solundaki pozisyon olması gerekirken $ff değeri verdiğimizde (9. bit'i de set iken) sprite'ın ekrandan kaybolduğunu görürüz. Çünkü 0'ın solu $ff değil $f7'den başlar. Kısacası;
$d010 = $00; $d000 = $00 >> 0. Sprite ekranın en solundan 8 pixel sağda
$d010 = $01; $d000 = $f7 >> 0. Sprite ekranın en solundan 7 pixel sağda
$d010 = $01; $d000 = $f0 >> 0. Sprite ekranın en soluna yapışık
$d010 set iken X ekseninde genişletilmemiş yani normal boyutlardaki bir sprite ($d01d = 0) $f0-$d9 değer aralığında, X yönünde genişletilmiş sprite (0. sprite için $d01d = 1) $f0-$c1 aralığında ekranın solunda görüntülenebilir. Elbette ki $f0 değeri küçüldükçe sprite ekranın solundan dışarı çıkmaya başlayacaktır. Sprite ekranın solundan çıktıktan sonra $78'den büyük değerler için görüntülenemez. Ancak $77 ve daha küçük değerlerde bu defa sprite ekranın sağından içeriye girecektir. Dolayısıyla ekranın sağına yapışık X ekseninde genişletilmemiş sprite'ın X koordinat değeri $60, genişletilmişin ise $48 olmalıdır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 46
adresinden;
1. BoingBag 1 2. BoingBag 2 3. 2 Contribution
4. BoingBag 2 Locale (Türkçe)
dosyalarını indirin, daha sonra bu dosyaları e-UAE'nin kurulu olduğu dizindeki AmigaSYS3Plus/Work/Archives/ dizinine kopyalayın. Böylece AmigaOS masaüstünüzdeki Work disk bölümünde bulunan Archives klasöründen bu güncelleme dosyalarına erişebileceksiniz.
Önce sisteminizde CD-ROM'u mount edin. Bunun için masaüstünüzde boş bir yerde sağ tıklayın, Tools menüsünden CD-Rom Mount seçin ve device unit numarasını seçin "Mount" tıklayın. (benim sistemimde Unit0 idi hatırlarsanız) Böylece CD-ROM mount edildi, AmigaOS 3.9 CD'si sürücümüzde olsun, bundan sonra güncellemelere geçebiliriz.
Güncellemeleri sırasıyla yapınız, öncelikle BoingBag39-1.lha dosyasını çift tıklayın, karşınıza Packmaster programının penceresi gelince "Unpack" düğmesini tıklayın. Arşiv dosyası Ram Disk'e açılacaktır. Bundan sonra Ram Disk'e girerek BoingBag3.9-1 klasörüne girin ve install simgesini çalıştırın. Bütün sorulara "Proceed" diyebilirsiniz, dil seçim ekranı geldiğinde Türkçe'yi işaretleyin, devam edin. Güncelleme bittiğinde sistemi reboot edin. Tekrar açıldığında aynı işlemleri yaparak BoingBag39-2.lha dosyasını kurun, reboot edin. Bundan sonra BB3.9-2-Contribution.lha dosyasını kurabilirsiniz, bu opsiyonel bazı yazılımlar içermektedir, kurmanız şart değil. En son olarak da Türkçe dil güncellemesi için BB3.9-2-turkce.lha dosyasını kurunuz. Böylece sistemimiz gerekli güncellemeleri de içerir hale gelmiş oldu.
Artık mevcut işletim sisteminiz üzerinde çalışan sanal bir OS 3.9 kurulu Amiga'nız var, güle güle kullanın:)
Önümüzdeki sayılarda bu konuda detaylı bilgiler vermeye devam edeceğim, yazı hakkında takıldığınız ya da merak ettiğiniz konuları bana e-posta ile yazabilirsiniz:
Gelecek sayılarda görüşmek üzere...
datura (at) inbox (nokta) com
Şekil 16. Amiga 1200
Ek bilgi;
Amiga modellerinde fabrika çıkışı olarak gelmekte olan donanımsal özellikler tablosu
Amiga |Amiga |Amiga |Amiga |Amiga |Amiga 1000 |500 5004 (600 1200 |4000 İşlemci |68000- (68000 |68000 (68000 168020 |68040 Kicks- |1.2 1.3 2.0x 2.0x 3.x 3.x tart Chip 256kb (512kb |1 mb 1mb (2mb |2mb Mem Chipset |OCS OCS ECS ECS AGA AGA