Püf Noktaları

en zak

di Oyun oynarken en büyük yardımcımız hiç kuşkusuz Joystickfir. BASIC purogramlarımızda Joystick kontrolunu nasıl sağlayabiliriz? Aşağıdaki kısa program bize bu kontrolu veriyor:

10. DIM J(40) : B-56320 : FOR A- 1 TO 10 : READ J(A):
NEXT
20 DATA 1,5,0,7,8,6,0,3,2,4
30 AND 15)) 4 128-8 *(PEEK(B) AND 16)
40 PRİNT J : GOTO 30
10 ve 20. satırlar programı çalışmaya hazırlıyor. Bu

iki satırın Programın başında olması gerekir. 30 numaralı satırda Joystick değerleri J değişkenine okunuyor. Bu değişkenin alabileceği değerler ve bu degerlere karşılık gelen yönlen şöyledir:

Joystick Yönü

Merkez Kuzey Kuzeydoğu Doğu

J'nin değeri

- Güneydoğu Güney Güneybatı Batı Kuzeybatı

AR

Eğer ateş tuşu basılıysa bu değerlere 128 eklenir. Mesela Joystick güney yönünde iken ateş tuşu basıl-

Burak KİPER

Mışsa J değişkeninin değeri 133 (128 133) olur. Program bu haliyle ikinci porta takılı Joystick değerlerini okur. Birinci portu okumak için 30, satırdaki B—56320 değişkenini B—56321 olarak değiştirin.

OYUNLAR İÇİN KOLAYLIKLAR

Burada sözü oyunlar için çeşitli kolaylıklar ren arkadaşlarımıza bırakıyoruz. Şafak Yavuzlar arkadaşımız bize aşağıdaki ipuçlarini göndermiş. Kendisine teşekkür ediyoruz.

Bombjacek İl
POKE 7053,200 : SYS39712 (sonsuz hayat hakkı)
Gameover
POKE 15244,234
POKE 15245,234
SYS 2304 (sonsuz hayat hakkı)

The Living Davlighis POKE 4390,238 SYS 4352 Metrocross

POKE 413501,243
POKE 13502,234
SYS 4096 (Sınırsız zaman)

Nemesis

POKE 5868,255
SYS 5768 (255 hak) ©
Zynaps
POKE 37281,255
SYS 5768 (255 hak)
Zynaps
POKE 37281,255
SYS 32769 (255 hak)

The Sentinel

1318 nolu alana ulaşmak için gerekli kod: 58896035 ©

ACE Il

Hing-Score tablosunda “DUSTY BUG” yazdığınızda ölümsüz bir pilot olursunuz.

Mystery of the nile 1. Düzey password'ü 2. Düzey password'ü 3, Düzey password'ü HF576170V

Kars-Sarıkamış'tan Murat Pirim arkadaşımız bize aşağıdaki İpuçlarını göndermiş. Kendisine teşekkür ediyoruz.

1942 Oyuna başladıktan sonra RESTORE tuşuna basın karşınıza çıkacak menüde * ve - tuşlarıyla İstediğiniz düzeyi seçebilirsiniz. İstanbul'dan Altay Genç arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.

Target Renegade Rakiplerinizi motosikletten düşürdüğünüzde biri sizi yakalarsa, yüzünüz sola dönükken Joystick'i sağ alt çapraza getirip ateş tuşuna basın. Yüzünüz sağa dönükse, sol alt çapraza getirip ateş tuşuna basın. Orhun Coşkun ve Hümeyra Demircioğlu arkadaşlarımız bize aşağıdaki ipuçlarını göndermişler. Kendilerine teşekkür ediyoruz.

Oyunu yükleyip resetleyin.
POKE 25117,173
SYS 24576
P.Bmx Simulation
Oyunu yükleyip resetleyin.
POKE 8692,0
SYS 4096
Missin A.D
Oyunu yükleyip restleyin.
POKE 46774,165
SYS 23154
Garfield
Oyunu yükleyip resetleyin.
POKE 25370,173
POKE 25389,173
SYS 35329 (Daha çok enerji alırsınız.)
Kunofu Master
Oyunu yükleyip resetleyin.
POKE 34142,128
SYS 32768
Thundercats
Oyunu yükleyip resetleyin.
POKE 35088,173
SYS 2061 (Sonsuz hak)

Combat School Program döküm ekindeki programı yazıp çalıştırın.

Boy
Oyunu yükleyip resetleyin.
POKE 4768,133 : POKE 4769,20
POKE 39927,96 : POKE 2048,32
POKE 2049,104 : POKE 2050,13
SYS 2560

Firetrack Oyunu yükleyip çalıştırın. <- (sola bakan ok), 9, Boşluk tuşu Bu üç tuşa aynı anda basın.

Hemen hemen bütün ipucu gönderen arkadaşlarımız SAMURAI WARRIOR oyunu hakkında bilgi vermişler. Bu oyunda sonsuz enerjiye sahip olmak için F tuşuna basmak gerekiyor. Bize bu bilgiyi gönderen bütün arkadaşlara teşekkür ediyoruz. Yerimiz kısıtlı olduğu için gönderilmiş olan diğer kolaylıkları yayınlamaya gelecek ay devam edeceğiz. Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarıyla paylaşmak isterseniz bize göndermeyi unutmayın. Adresimiz:

Şimdi bazı arkadaşlarımızın oyunlar hakkında sordukları sorulara cevap verelim: İstanbul'dan Emre Işıklar AMIGA'daki iki oyunla ilgili bilgi istiyor: F-18 Interceptor oyununda düşen pilotu kurtarma görevinde ne yapmak gerek?

55

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$

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

Merhaba arkadaşlar, merhaba matematik meraklıları... Bundan böyle, yaklaşık 12 ay boyunca bu köşemizde her ay yeni bir matematik bulmacası yer alacak. Eğer okul sıralarında matematikten nefret eder hale gelmediyseniz, sorulardan ve onları çözmekten zevk alacağınızı tahmin ediyorum. Gelelim oyunun kurallarına... Bu, kesinlikle bir yarışma değil. Amacımız, bilgisayarımızı kullanarak, hem çözmek, hem matematiğin s8

Tuna Ertemalp bazı gizli kalmış güzelliklerini keşfetmek, hem de zekamızı ortaya koymak. Her ay yayınlayacağımız ilginç matematik problemlerinin ortak yanı, bilgisayarla çözülebilir olması. Sizin amacınız, problemi çözen mümkün olduğu kadar kısa ve hızlı bir program yazmak. Bu programı herhangi bir bilgisayarda (Commodore 64, Commodore 16, Plus 4, AMIGA, PC, veya başka markalar) herhangi bir bilgisayar dilini (Basic, Pascal, C, Logo, Fortran, Cobol, PL/I, APL,

Lisp, Prolog, Makina dili vs.) kullanarak oluşturabilirsiniz. Ancak, biz problemin çözümünü bir ay sonra, gene bu köşede, Commodore 64'de çalışan bir Basic program olarak yayınlayacağız. Tabii ki bu çözüm, problemin muhtemel çözümlerinden sadece biri olacak. Amacı, eğer kendiniz çözememişseniz, size yol göstermek. Gelelim bu ayki sorumuza...

PROBLEM 1:

“Ne yapıyorsun kızım sen” diye sordu David. Maddie, hızlı hızlı hesap makinesinin tuşlarına basıyordu. “Demin aldığım dört eşyanın toplam kaç para tuttuğunu hesaplıyorum, David” cevabını verdi Maddie. “Sonuç, $7.47.” “Saçmalama Maddie, gene yanlış yapıyorsun” diye çıkıştı David, “artı yerine çarpıya basmışsın!” Maddie tersledi: “Hiç fark etmez!” David, haklılığını kanıtlamak için, masanın üzerinden atladı ve hesap makinesini Maddie'nin elinden kaptı. “Tabii ki toplama ile çarpma arasında fark vardır, ve bunu galiba senden başka herkes bilir” dedikten sonra, o dört malın fiyatını toplamaya başladı. Sonuç: $7.47. Şaşırma sırası David'de, alay etme sırası da Maddie'deydi artık... Evet arkadaşlar, bu dört malın tek tek fiyatlarını bulabilecek bir program geliştirebilir misiniz?