Bu sayfadaki yazılar
Sayfanın metni
Sayfa 56
Düşen pilot bir adanın çok yakınında bulunuyor.
Çok alçaktan geçerek suya düşmüş paraşütü görebilirsiniz. Ancak alçaktan uçarken adaya çarpmamaya dikkat edin. Sudaki paraşütün üzerine gelmeden az evvel SHIFT F tuşlarına basarak yardım eşyasını fırlatın. Ancak bu işlemin zamanlaması çok önemli. Eşyanın uçaktan çıktıktan sonra uçağın hızıyla atış noktasından daha ileriye düşeceğini hesap etmeniz gerekiyor. Bu oyun toplam altı görevden oluşuyor. Son görevi tamamlamak için denizaltıdan çıkacak tüm uçakları yok etmeniz yeterli olur. (2) Ferrari Formula 1 oyununda yarışlar sonu ermiyor. Eğer sabırla 99 turu tamamlarsanız yarışın bittiğini görürsünüz. Oyunun başında çıkan menüden üç turluk yarış ayarlamanız mümkün.
BASIC PROGRAMLAR
Program döküm ekindeki ikinci program karakter setini hafızanın başka bir yerine taşımayı amaçlıyor. Program karakter setini ROM'dan RAM'in 12288 adresine taşıyacak. Karakter setini hafızanın başka bir dilimine taşımak için 30. satırdaki 48 sayısını değiştirin. Hafıza 256 byte'lık dilimlere ayrıldığından 48 * 256 = 12288 adresini veriyor. 20. satır yeni karakter setinin tanımlanması için gerekli POKE komutlarını içeriyor. Son olarak yeni karakter setinin ilk karakteri tanımlanıyor. Örneğimizde ' @ ' karakteri boşluğa çevriliyor. Bu yöntemle tüm karakter setini istediğiniz harflere çevirebilirsiniz. Bu programı hem C-64 için, hem de C-128 için ayrı ayrı veriyorum. Kullanıcıdan veri alırken kullandığımız INPUT komutunun en büyük dezavantajlarından birisi bazı karakterler girildiğinde ?EXTRA hatasını vermesidir. Bu hataya sebep olan karakterlerden en sık karşımıza çıkanı virgüldür.
C-64'te bu sorunu, INPUT komutundan evvel POKE 631,34 : POKE 198,1 komutlarını vererek çözebiliriz. INPUT komutundan evvel kullandığımız POKE'lar klavye buffer'ına tırnak işaretini gönderiyor. INPUT komutu virgülü tırnak içinde kabul eder. Bu işlemi C-128'de yapmak için
POKE 842, 34 : POKE 208,1 komutlarını kullanın. Bu uygulamanın bir kötü yönü var. Eğer kullanıcı programın ne yaptığını bilmeden tırnak açarsa, bizim açmış olduğumuz tırnağın etkisi kalmaz. Ve hata mesajı ortaya çıkar. Bu hataya başka bir çözüm de ROM'daki bir rutini kullanmak olabilir. C-64'te bu rutin 44025 adresinde başlıyor. Rutin basılan tuşları okuyup, bunların ASCII değerlerini 512 numaralı adreste başlayan veri giriş buffer'ına saklıyor. SYS 44025 komutunu girdikten sonra PEEK(512) ve daha sonraki adreslerin değerleri girilen yazıyı verecektir. Veri sonu 0 değerli bir byte ile temsil ediliyor. Aşağıdaki programı deneyin:
40 PRİNT “BİR İSİM GİRİN” 20 SYS 44025 30 FOR X-512 TO 600 40 A-PEEKOX) 50 1F Az0 THEN X-900 : GOTO 70
“60 B$—B$4 CHRS(A)
70 NEXT 80 PRİNT “YAZDIĞINIZ İSİM : ”;B$
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 57
Eğer programı C-128'de kullanmak isterseniz, 20 numaralı satırı;
20 BANK 15 : SYS 20371 olarak değiştirin. 30. satırdaki FOR...NEXT döngüsünü FOR X=512 to 771 olarak değiştirin. ?EXTRA IGNORED hatasının dışında bazı karakterler de INPUT komutunda veri olarak kullanıldıklarında çeşitli sorunlara sebep olurlar. Yukarı ve aşağı kürsor tuşları ekranın kaymasına sebep olurlar. CLR tuşu ekranın silinmesini sağlar. Eğer ekranda yazılı menü varsa kaybedilmiş olur. Böyle bir durumdan kaçınmanın tek yolu bu tür sorunlara yol açan tuşları etkisiz hale getirmek olacaktır. Program döküm ekindeki üçüncü program bunu yapıyor. Program BASIC ve KERNAL'ı ROM'dan RAM'e kopyalıyor. Bundan sonra klavye matrisinde değişiklik yaparak virgül, kolon, kürsor-yukarı, kürsor-aşağı, CLR ve HOME tuşlarını etkisiz hale getiriyor. Bu işlemden diğer tuşlar etkilenmemekte. Klavye matrisi 60289 adresinde başlıyor. Bu programı tek başına veya büyük bir program içinde alt program olarak kullanabilirsiniz. Altı tuşu etkisiz hale getirmek için programınıza INPUT'dan önceki satırda POKE 1,53 komutunu ekleyin. Bu tuşları tekrar aktif hale getirmek için POKE 1,55 komutu yeterli olur.
10 POKE 1,53 20 İNPUT AS : PRİNT A$ 30 POKE 1,55.
İlk POKE virgülü etkisiz hale getireceğinden direkt modda POKE komutunu vermek mümkün olmayacak. RUN/STOP-RESTORE tuşlarına basarak klavyeyi eski haline getirebilirsiniz.
MAKİNE DİLİ
Alfabetik sıraya göre BASIC komutlarını makine dilinde nasıl gerçekleştirebileceğimizi göreceğiz. Bir komut için benim vereceğim makine dili rutini çok başka şekillerde de yazılabilir. Bunların kimisi daha kısa, kimisi anlaşılması daha zor ama daha az hafıza harcayan veya daha hızlı rutinler olabilir. Ben, programlaması daha kolay ve anlaşılabilir olan rutinler vermeye çalışacağım. CLR BASIC'te bu komutu kullanarak değişkenleri silebilirsiniz. NEW komutuna bu yönüyle benzer ama programı silmeyerek ondan bu noktada ayrılır. Makine dilinde CLR komutunu programın hazırlık safhası sayabiliriz. Bu kısımda programda kullanacağımız belirteç, sayaç ve işaretler gibi veriler için gerekli hafıza bölgesini sıfırlarla doldururuz. Bir makine dili program başlamadan evvel bazı değişkenlerin sıfıra eşitlenmesi gerekir. Eğer bu değişkenler hafızanın farklı yerlerinde yer alıyorlarsa bunları tek tek sıfırlamak gerekir:
200LDA $0 2002 STA $1990 ; Değişkenlerden birini sıfırla 2005 STA $1994 ; Diğer değişkeni sıfırla.
Burada değişken olarak tanımladığımız aslında bir hafıza adresi. Adresler programın ihtiyacına göre farklı farklı değerler saklamada kullanılabileceğinden BASIC'teki değişkenlerin işlevlerini görürler. Eğer bütün değişkenleri programın sonuna koymuşsanız işler çok daha kolay demektir. Değişkenlerin olduğu bölgede kurulacak bir döngü ile tüm değişkenler sıfırlanabilir:
2000LDA $0 2002 LDA $0F ; Y yazmacını sayaç olarak kullanı- yoruz Bu örnekte 15 değişkeni (byfe) sıfırlıyoruz.
2004 STA $199,Y ; 15 değişkenin en büyüğü 2007 DEY 1008 BNE $2004 ; Y Değişkeni sıfıra doğru saysın.
Y sıfır olana kadar döngü $2004 adresine geçecek. Bu şart tamamlandığında program $200A adresindeki komuttan devam edecek.
CONT : BASIC'te bu komutla STOP'la durdurulmuş programın devam etmesini sağlayabilirsiniz. Ancak makine dilinde çalışan bir programı RUN/STOP tuşuyla durdurmak mümkün olmaz. İsteğe göre basılan bir tuşu kontrol eden bir rutin yazılabilir. Eğer basılan tuş STOP ise BRK komutuyla program durdurulabilir. Gelecek yazımıza bu işi yapacak programla devam edeceğiz. Şimdilik hoşçakalın. 57