Commodore sayı 68, sayfa 46

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 46

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

Klavyeyle gezinmek için ← ve → tuşları.