Joystick'in numaraları

ekran üzerindeki işaretimizi,

Hazır

programlarda eğer joystickten yararlanmaya (0) ve 1'in artık hepimiz alıştık. Ama numaraları yeni arayışlar olmaksızın kendimiz joystickle hareket ettirebilir miyiz? Bu konuda Commodore el kitabı yetersiz kalıyor. Verilecek on BASIC satırı, belki de kullanışlı bir menü için zemin oluşturabilecektir.

Öncelikle, joystickle yönlendireceğimiz işaretin ne olacağını saptamamız gerekiyor. Dikkatimizi asıl bu işaretin nasıl joystickle yönlendirileceği meselesinde yoğunlaştıracağımızdan, işaret olarak basit bir negatif basılmış boşluk karakteri kullanacağız. Öncelikle joystick'i bilgisayara bağlayan kapının değerine ihtiyacımız var. Eğer ikinci joystick girişini (Port 2) kullanıyorsak bu değer 56320. bellek hücresindedir. Port 1 kullanılsaydı, adres 56321 olacaktı. Ekran üzerinde yönlendirme yapabilmemiz için, ekranın başlangıç (1024, sol üstte) ve bitiş (2023, sağ altta) adresleriyle, ekrandaki her noktanın rengini kontrol edecek renk belleğine ihtiyacımız var; bu her ekran noktasına 54272 eklenerek bulunur. O halde programımız, 10 PO=56320:EKRAN=1024:RENK=54272 satırıyla başlayacaktır. Bundan sonra işaretimizi ekrana getirebilmemiz için kullanılacak işareti PEEK ile okuyoruz ve ME değişkenine aktarıyoruz. Sonra kodu 160 olan işaretimizi POKE ile ekrana yazıyoruz. İşletim sistemi ise ekranın mevcut rengini 646. bellek hücresine yazıyor; buradan bizim bu değeri PEEK ile okumamız mümkündür. 20 ME=PEEK(EKRAN):POKE EKRAN,160:POKE EKRAN+RENK,PEEK(646)

Şimdi sıra joystick'e geliyor. 30 JS=PEEK(PO):HAREK=0 HAREK, Joystick'ten gelen komutlara bağlı olarak, işaretimizin nasıl hareket etmesi gerektiğini hesaplarken kullanacağımız değişkendir. Joystick kapısında bir bayt bulunmaktadır. Bu bayttan bizi ilgilendiren kısım ilk 5 bittir. Dolayısıyla bir AND işlemcisi ile bitlerin teker teker ayrılması gerekiyor. Eğer joystickten bir komut gelmişse, bu komutun yönüne bağlı olarak bu bitlerden biri 0 değerini alır; hareketsizlik durumuna ise 1 karşılık gelir (Dikkat, işin püf noktası burada). Ekranda yukarı doğru bir hareket oluşturmak için, işaretin şimdiki pozisyonundan 40 çıkarılır. 40-70 satırları joystickten gelen komutlara bağlı olarak işaretin gitmesi gereken yeni pozisyonu hesaplar.

30 1F (IS ANDI)-0 THEN HAREK - HAREK—40
50 IF (IS AND 2)-0 THEN HAREK - HAREK * 40
60 1F (JS AND 4) -0 THEN HAREK - HAREK—İ
70 1F (İS AND8)-0 THEN HAREK - HAREK 4 1

Bu yöntemle, diyagonal hareketler de sağlanabilir. Örneğin sola doğru hareket -39 değeriyle gerçekleşir. Geldik ateşleme düğmesine! Bu düğmede basıldığında programın sona ermesini istiyoruz. Bu sırada doğal olarak, kursorumuzun altındaki işaretimizi yeniden üretiyoruz. 80 IF (JS AND 16)=0 THEN POKE RESİM,ME:END Ekrandan dışarı “taşmamak” için, HAREK'in değerlerinin 1024 ile 2023 arasındaki alanda bulunup bulunmadığının denetlenmesi gerekiyor. 90 IF HAREK<1024 OR EKRAN+HAREK>2023 THEN HAREK=0 Artık sıra HAREK'in hesaplamış olduğumuz değerine göre işaretimizi, dolayısıyla hesaplanmış hareketleri ekran adresine eklememize geliyor. Son yapılacak iş, işaretimizi ekranda hareket ettirebilmek için 20 satırına geri dönüşü sağlamaktır: 100 POKE RESİM,ME:EKRAN=EKRAN+HAREK:GOTO 20

Oyun kolunu Port 1'e takmak istersek, yalnızca 10 satırında bir değişiklik yapmamız gerekir. Bu da adresin 56321 olmasıdır. Yani, 10 PO=56321.

İki oyun kolunu aynı anda kullanmak istiyorsak, değiştirilmesi
gereken satırlar şunlardır:
10 Pl — 56321:P2 — 56320:RE — 1024.
30 J1- PEEK(P1):)2—
HAREK-0
UFAK...TEFEK...UFAK...TEFEK...UF
NOT(NOT J1 OR 12):