PÜF NOKTASI

na kadar geliyor. Yol üzerinde bulunuyor. Vurulamıyor ve ancak üzerinden atlanarak kurtulunabiliyor. 4. BULUT: Sprite No: 4. 11. Km'den sonra gelmeye başlıyor ve tüm kalan yolda görülebiliyor. Arabanın üzerinden geçiyor. Zıplayıp ateş ederek yok edilebiliyor. Ya zıplamayın, ya da yok edin. 5. ŞEYTAN: Sprite No: 5. 26 Km'den sonra gelmeye başlıyor, 36 Km'ye kadar tepenizde dolaşıyor. Daha doğrusu zıplıyor. Ya sağa-sola giderek kaçın, ya da durun, yoksa Freddy'ye yem olursunuz. 6. KAMYONET: Sprite No: 6. 36. Km'den sonra gelmeye başlıyor ve oyunun sonuna kadar görülebiliyor. Sizi ezmek için arkadan yaklaşıyor. Vurulabiliyor, ama önce zıplayıp önünüze almanız, daha sonra vurmanız gerekiyor. Ama üzerinden zıpladıysanız dokunmayın, çünkü kayaları yok ediyor. 7. UÇAN DAİRE: Sprite No: 5-7-8, 56 Km'den sonra gelmeye başlıyor. Size mermi atıyor ve vurulamıyor. Tek kurtuluş ümidiniz kaçmak. Eğer yeterince hızlı olamazsanız, Freddy'nin rüyalarından hiçbir zaman kurtulamıyorsunuz. 76. Km'den sonra tüm yaratıklar yok oluyor ve rahat rahat araba sürmenin keyfini yaşıyorsunuz. 80 Km'lik yolu bitirdiğinizde HAPPY END sahnesini görüp mutlu oluyorsunuz. Derya Bey bu oyunu yazarken kullandığı programların da bir listesini göndermiş. Çoğunu henüz görmediysem de ne aradığınızı bilmeniz için isimlerini burada yazıyorum. Sanırım bir 45 oyun yapmaya yeterli olan malzeme, her tür iş yapmanız için yeterli olacaktır: (1) Sprite Tasarımı ve animasyonlar: PRO SPRITE. (2) Manzara karakteri: ACY-CREW LOGO EDİTÖRÜ. (3) Müzik: FUTURE COMPOSER'a ait bir blok ile, (4) Sinüs ve Swing Tabloları: BOUNCER ile. (Bu programı dergimizin 65. döküm ekinde yayınlamıştık.) Derya Bey'in yolladığı dökümanlar burada sona eriyor. Sanırım bu kadar bilgiyle makina dili bilen herkesin programı incelemesi mümkün olacaktır. Yaptığı güzel oyun ve harika grafikleri için Derya Bey'i kutluyorum ve başarılarının devamını diliyorum.

Mektuplar İçin Teşekkürler:

Yavaş yavaş arkadaşlarınızdan katılımlar olmaya başladı. Kimi yalnızca yazmış olmak için, kimi yaptıklarını anlatmak için, kimi de problemlerine çözüm bulabilmek için yazmışlar dergimize. Ben yalnızca problemlerine çözüm arayan arkadaşların mektuplarını cevaplayacağım burada. Cevaplayacağım ilk mektup Mahir Çipil ve Caner Şimşir'den gelmiş. Mahir ve Caner, kendilerine CMC diyorlar. İlk C Caner, M ile Mahir olsa gerek. O zaman grubun üçüncü elemanı kim? Ama belki de Caner grubun kurucusudur ve CMC Caner Mahir Caner anlamına geliyor. Çok mu egoistçe oldu? Her neyse kısaltmalarınızın uzun hallerini yollamayı unutmayın. Benim bu konuda takıntım vardır, uzun halini bulamazsam içim rahat etmez... Bu kadar gevezelik yeter. Gelelim CMC'nin sorunlarına: CMC, introların çoğunda açıldığını, yazıların da buralardan geçebildiğini görmüşler ve bunun nasıl yapılacağını soruyorlar. Ne yazık ki bu aylık köşem oldukça dolu. Bu yüzden bu sorularının cevabını gelecek ay tam bir konu olarak vereceğim. Konunun sonunda da Hi-Res hakkında özet bilgileri sıkıştırırım. Sanırım pek tatmin edici olmadı, ama en azından gelecek ay tüm cevaplara kavuşacaklarını biliyorlar. Bu arada benim C-64 oyunlarını açıklamam gerektiğini söylüyorlar, ama ne yazık ki bu imkansız, çünkü dünyaya benim kadar beceriksiz bilgisayar oyuncusu gelmemiştir sanırım. Bu yüzden oyun açıklamalarında hiçbir zaman benim adımı göremeyeceksiniz. İkinci mektup Özgür Geşli'den geliyor. Özgür'ün asıl problemi müziklerle. Oturup nota nota müzik yazamadığını, bu yüzden introlardan müzik yürütmek istediğini söylüyor. Bu işi nasıl yapacağını anlatmamı istemiş. İlk olarak söyleyeceğim, introlardan müzik yürütmenize gerek yok. Çünkü (umarım hâlâ bu şekilde satılıyordur) FUTURE COMPOSER adlı müzik editörüyle birlikte altmış kadar müzik de verilmişti bize. Bunların yirmisi bile güzel olsa yeterince introya malzeme olur sanırım. Ya da composer programlarını kullanabilen bir arkadaş bulup ısmarlama müzik yaptırırsınız. Her neyse, ben gene de müzik sökme yöntemlerini anlatayım. İlk olarak standart bir müzik yürütme sistemi bulunmadığını söylemeliyim. Müziği yürüttüğünüzde de sadece müziği mi aldığınızdan veya müziğin birazını almadığınızdan emin olmanız zordur. Eskiden beri benim yürüttüğüm müzikler 32 bloktan aşağı inmezken, Celal'in yürüttükleri (aynı müzikler) 16 blok civarı dolaşırdı. Şanssızlığınızdan olsa gerek, müzik yürütmeyi ben anlatıyorum: İlk olarak bellekte $D400-$D420 arasında işlem yapan yerlerin bir dökümünü alın (Expert kullanıyorsanız: K * D400 D420 komutunu kullanabilirsiniz). Müziği çalan rutinin bulunduğu yerde bir yığılma gözünüze çarpacaktır. Daha sonra bu bölgelerde olan bir rutinin çağrılıp çağrılmadığına bakın (eğer Expert'ünüz yoksa önce programın başlangıcı olabilecek bir yer bulun) ve bulduğunuzda adrese sıçradığınızda bir ses gelip gelmediğini kontrol edin. Buradan sonrası size kalmış, yerini bulduğunuz müzikteki fazlalıkları ayırmanız yeterli olacaktır. Ama bir Intro'dan müzik yürütüyorsanız, büyük bir ihtimalle müzik programı $1000 veya $1003'te başlayacaktır. Future Composer'ın müziklerine (yer değiştirilmediyse) $1800'de rastlayabilirsiniz. Biliyorum, biraz kabaca anlattım ama gerçekten de anlatarak öğrenilecek bir şey değil bu sorduğunuz. En iyisi üzerlerinde uğraşarak deneyim kazanmaya çalışın. Zaten zamanla müzik rutinlerini bile birbirinden ayırmaya başlayacaksınız. İkinci sorunuzda Cycle'ın ne olduğunu ve bir Cycle'lık zamanda elektronun ne kadar ilerlediğini sormuşsunuz.

Cycle, benim tahminimce bilgisayarın saat frekansının bir periyoduna verilen ad. Fakat sadece komutların hızını ölçebilmek için kullanılan bir zaman birimi olarak düşünseniz de olur. Mesela en kısa komut olan NOP 2 cycle sürerken BIT $XX komutu 3 cycle yer. Bir cycle'lık süre içinde elektron yatay olarak sekiz piksellik (noktalık), yani bir karakterlik yol alır. Hassas ayarlar yaparken bundan yararlanmanız daha iyi olur. Mesela NOP'u zaman olarak değil de uzunluk olarak algıladığınızda hesaplarınız oldukça kolaylaşır. Bu durumda bir NOP komutu iki karakterlik, bir absolute STA komutu (STA$XXXX) dört karakterlik yol kaplar gibi düşünmeniz gerekir. Üçüncü sorunuzda ise interrupt'a giriş ayarlayan rutinde yer alan bazı adreslerin ne iş yaptıklarını sormuşsunuz. Bu konuyu yazının başlarında ele almıştım ama burada da kısaca değinmekte bir sakınca görmüyorum. Interrupt'a giriş rutininde kullanılan adresler şu işe yarar: $0314-$0315: Rutinin başlangıç adresi. Ekran modu (karakter ekranı, hi-res extended Background) ve Raster'ın 9. biti. $D012: Raster satırının ilk sekiz biti. $D01A: Yapılacak interrupt'ın türü. ($01 — Raster interrupt). Diğerleri ça-

lışma, light-pen vb. interrupt'ların yapılmasını sağlar. $DC0E-$DC0D: CIA 1 zamanlayıcısıyla yapılan interrupt'ları ve zamanlayıcının çalışma şeklini (tek atışlı, devamlı geriye sayış, vb.) kontrol eder bu adresler. Gerekli değerleri vererek Raster'dan başka interrupt'ın oluşmasını engelleyebiliriz. 4. Sorunuzun cevabı ise çok basit. Mesela ekranın en üzerinde yazıyı kaydırıyor olun. $30-$32 gibi bir raster satırında gerekli y pozisyonunu $D016'yı kullanarak ayarlayın, daha sonra kayan yazıların bulunduğu satırlardan sonraki bir raster satırında (1*1 karakterlik yazı kayıyorsa $40 fazla bile gelir) $D016'ya $C8 (multi-color için $D8) verin. Bu sayede ekranın alt kısmındaki yazıların da kayan yazıyla birlikte oynamasını engellemiş olursunuz. Bu konuları önceki sayılarda oldukça detaylı bir şekilde anlattım. Eğer bu yazıları okumadıysanız, eski sayılarımızı ele geçirin ve bir okuyun. Mektubunuz için de çok teşekkürler. Üçüncü ve son mektup da Gökhan Keser'e ait. 1. ve 2. sorusunun cevabını 69. sayıda vermeye çalışacağım, çünkü bu sayıda örnek program için yerimiz kalmadı. Ama çoğu arkadaşınızın yakındığı logo sallama rutiniyle ilgili sorunu bu sayıda cevaplayacağım. Sizlerden gelen yakınmaları görünce gerekli yazıya göz attım ve kendimden utandım. Hem programlar yanlış basılmış, hem de gerekli programlar döküm ekinde çıkmamış. Neyse, hatamı burada telafi etmeye çalışacağım. Bu sayıda anlatacağım logo-swing programı bir logoyu değil, yalnızca bir satırlık bilgiyi sallıyor, ama ekrana basılan satır sayısını arttırarak herhangi bir logoyu da sallayabilirsiniz. İlk olarak swing sinüslerinin yapılmasını anlatacağım. Programın en başında sinüs tablosunun boyutunda bir FOR döngüsü açıyoruz. (0-255 — 256 bayt). Daha sonra gerekli bayta karşılık gelecek olan değeri hesaplıyoruz, yani sinüs fonksiyonunun bu baytta alacağı değeri buluyoruz. Eğer tam bir sinüs kullanacaksanız, formülümüz: INT (GENLİK*SIN(R/ToplamBayt*2*PI) + GENLİK) olur. Eğer eski sayıları da istiyorsanız, ikinci GENLİK değerini eklemeyebilirsiniz. Bu K değerini 7 ile AND'lediğinizde, değerin bir karakter uzunluğu olan 8'in tam katından kaç fazla olduğunu buluruz (25 değeri için, 25 AND 7=1). Bu sayede gerekli karakteri bastıktan sonra ekranı yumuşak olarak ne kadar kaydırmamız gerektiğini buluruz (25 için gerekli karakter ve ekran 1 piksel yanda olacak). Ama bu kayma miktarı sağa kayma miktarı olmasına karşılık, $D016'da sola kayma miktarı tutulur. Bu yüzden bu değeri 7'den çıkararak sola kayma miktarını (0-7 arası bir değer) buluruz. Y=(K-(K AND 7))/8 işlemi sayesinde tam sayı olarak kaçıncı karakterin ekrana basılacağını hesaplarız. Bu baytları gerekli tablolara yazarak işimizi bitiririz. Bu program için gerekli tablolar: Karakter sayısı: $C100; $D016'nın değeri: $C200; $D016'nın değerini yazarken, bulduğumuz sayıya 192 ekleyerek, 38 kolonluk, multi-color olmayan bir ekranda çalışmasını sağlayabiliriz. Eğer 192'yi burada eklemezsek programda STA $D016'dan önce ORA #$C0 komutunu