C64 İÇİN PÜF NOKTALARI (1)

PÜF NOKTALARI (1)

TEKRAR EDEN TUŞLAR

C64 ile çalışırken fark etmişsinizdir, kursor tuşları ve boşluk tuşu basılı tutulduklarında tekrar ederler. Buna karşın diğer tuşları basılı tutsanız da sadece bir kere çalışırlar. Bütün tuşların basıldıklarında tekrar etmeleri özellikle bir program yazıyorsanız veya kelime işlem türünde bir çalışma yapıyorsanız çok yararlı olur. Tuşların tamamının basıldıklarında tekrar etmelerini sağlamak için bir tek POKE komutu yeterli oluyor. Değişikliği istersek bir program içinde, istersek direkt modda yapabiliriz. Kullanacağımız adres 650. Bu adrese 0 değerini verirsek sadece kursor tuşları tekrar eder. 128 verirsek bütün tuşlar tekrar eder. 64 değerini vererek tüm tuşların tekrar etme özelliğini kapayabiliriz, ama bu durumda boşluk tuşu ve kursor tuşları da tekrar etme özelliğini kaybederler.

10 POKE 650,128:REM tüm tuşlar tekrar eder.
20 POKE 650,0 :REM sadece cursor tuşu tekrar eder.
30 POKE 650, 64:REM tekrar etme kapanır.
Tuşların tekrar hızlarını ve tekrar etme için gecikmeleri-
ni ayarlayan değerleri 651 ve 652 adreslerinde bulabiliriz.

WAIT KOMUTU

WAIT komutu ne işe yarar? Birçok farklı BASIC dilinde bilgisayarın belirli bir süre işini bırakıp beklemesini sağlayan komutlar vardır. WAIT komutu ilk bakışta bu işi üstlenmiş görünüyor, ancak kullanımı oldukça farklı. Amacımız WAIT komutunun ne yaptığını ve ne için kullanılabileceğini açıklamak. İlk önce komutun yapısına bakalım:

WAIT A,B

A değişkeninde bir hafıza adresi olsun. WAIT komutu A değişkeninde bulunan adresin içeriğini alıp B değişkenindeki değeri ile AND işlemini gerçekleştirir. Bu işlemin sonucu sıfır değilse program akışı devam eder. A değişkeninde yer alan hafıza adresi bir giriş çıkış veya başka bir aleti ilgilendiren adres değilse veya bu adresin içeriği interrupt yolu ile değiştirilmiyorsa programınız bu noktada sonsuza kadar bekleyecek demektir. Bu yüzden programımızda WAIT komutunu kullanırken çok dikkatli olmamız gerekir. WAIT komutundan nasıl yararlanabiliriz? Mesela bazı özel tuşlar basılana kadar program akışını durdurmak istersek WAIT komutu çok işimize yarar. 653 numaralı hafıza adresinde SHIFT, COMMODORE veya CTRL tuşlarının basılıp basılmadığına dair bilgi saklanır. CTRL tuşu basılana kadar bekleyecek bir program yazalım. 10 “CTRL TUŞUNA BASIN.”

20 WAIT 653,4:REM CTRL TUSU BASILANA
KADAR BEKLE.

20 numaralı satırda bilgisayar CTRL tuşuna basılana kadar bekleyecektir. Aynı beklemeyi SHIFT ve COMMODORE tuşları için sağlamak istersek yapmamız gereken;

WAIT 653,1:REM SHIFT TUSU ICIN BEKLE
WATT 653,1:REM COMMODORE TUSU ICIN BEKLE

Herhangi bir tuşu kontrol edebilmek için 203 numaralı adresi WAIT komutu ile kullanmamız gerekir. Klavyede hiçbir tuşa basılmamışsa 203 numaralı adresin içeriği 64 olur.

Bilgisayarın bir tuşa basılana kadar beklemesini sağlayan bir program yapalım.

10 203,63
20 GET A$;

FRE FONKSİYONU

Bilgisayarı ilk açtığınızda “38911 bytes free” yani yaklaşık olarak 39Kbyte boş yerimiz olduğunu görürüz. Ama

PRINT FRE (0)

PRINT FRE(0) komutunu verdiğimizde cevap olarak -26627 değerini alırız. Bu değere göre bilgisayarın boş hafızası olmadığı gibi, 26627 byte kaybetmiş görünüyor. FRE fonksiyonunun verdiği cevabı düzeltebilmek için 2'nin 16'ıncı kuvvetine, yani 65536 sayısına FRE fonksiyonundan aldığımız cevabı eklemek gerekir. FRE fonksiyonunun niçin böyle bir hata yaptığını anlamak için nasıl çalıştığını bilmemiz gerekiyor. Artık kullanılmayan karakter dizileri çıkarılıp hafızada boş yer açılır. Bu işleme “GARBAGE COLLECTION” adı veriliyor. Bu işlemden sonra boş hafıza alanı hesaplanıyor. Bunun için $33/$34 adreslerinde tutulan dizilerin başlangıç adresinden $31/$32 adreslerinde tutulan dizilerin bitim adresi çıkarılıyor. 16-bit şeklinde elde edilen netice “floating point” şekline çevriliyor. Çeviri yapıldığı anda elde edilen netice hatalı hale geliyor. Çünkü integer halindeki sonucumuz floating point çevrimi sırasında işaretli (+ veya -) olarak ele alındığından -32768 ile 32767 arası bir sayı haline geliyor. Eğer sayımız bu işleme tabi tutulmasaydı, 0 ile 65536 arasında bir değer taşıyacaktı. FRE fonksiyonunun nasıl çalıştığını ve neyin hataya sebep olduğunu gördük. Program Eki'ndeki PROGRAMI çalıştığında FRE fonksiyonu doğru çalışır hale gelecek.

OYUNLAR İÇİN KOLAYLIKLAR

Bazı PEEK ve POKE komutları sayesinde oyunları kısa yoldan bitirmek isterseniz oyun programını yükledikten sonra söylediklerimizi uygulayın.

KRAKOUT Puan tablosuna adınızı yazmak yerine (C) yazarsanız ilk 25 düzey için sonsuz hak elde edersiniz. TRAILBLAZER

SYS64738
Sonsuz zaman için
POKE 29738,234
POKE 29739,234
Sonsuz atlama hakkı
POKE 30889,234
POKE 30890,234
POKE 30891,234
SYS 25729 oyunu başlatır.

JACK THE NIPPER

Açılış ekranında iken ZAPIT yazarsanız ekranın kenarları beyazlaşır ve oyun süresince hiç ölmezsiniz. PANTHER

SYS64738
POKE 15324,234
SYS 4096

İlk üç düzeyde hiç saldırıya uğramayacaksınız. NEMESİS Oyunu yükleyin. Ateş tuşuna basmadan evvel SHIFT tuşuna basıp dört defa boşluk tuşuna basın. Sol üst köşede bir şeyler gözükecek. Kaç oyuncu istediğinizi seçin. Oyunculardan birinin gemisi görünmez olacak. MISSION CTRL, Commodore tuşu, 2, O, R, L, 1, K tuşlarına aynı anda basın. MUTANIS Oyunu yükleyin ve bilgisayarı RESET'leyin. POKE 9273,234 POKE 9274,234 SYS 4096 Artık sonsuz hakkınız var. THE EQUALISER Oyun başladıktan sonra C tuşuna basarken RESTORE tuşuna her basışınızda bir sonraki düzeye geçersiniz. Böylece oyuna istediğiniz düzeyden devam edebilirsiniz.