C64 için Püf Noktaları

Hafızadaki değerin belirli bir bitini okumak isterseniz, AND komutunu kullanarak istemediğiniz bitleri saf dışı bırakabilirsiniz. Mesela 56324 numaralı hafıza adresindeki değerin dördüncü bitini kontrol edelim. Eğer bu bit yanıksa, yani 1 ise, program akışı 2000 numaralı satıra, değilse bir alt satıra geçsin:

İF (PEEK(56321) AND 16) THEN GOSUB 2000

Bu adresteki değer ikili sisteme göre şu şekilde olsun:

Bit yeri :76543210 Bit değeri 00001001 16 sayısı ikili sistemde : 00010000 şeklinde gösterilir. AND işlemi uygulandığında, eğer aradığımız byte'ın dördüncü bitinin değeri bir ise (örneğin). AND işlemi doğru sonuç verecektir. Diğer bitleri okumak için aşağıdaki değerlerden uygun olanını kullanın:

Bir byte içindeki belirli bir biti yakmak için OR işlemini uygulamak gerekir. Mesela 56579 numaralı adresin dördüncü bitini yakalım

POKE 56579,PEEK(56579) OR 16
Bu biti söndürelim:
POKE 56579,PEEK(56579) AND (255-16)
Eğer başka bitleri söndürmek veya yakmak istiyor-

sanız. 16 sayısını, sizin için gerekli olan bitin yerine göre yukarıda verdiğimiz rakamla değiştirin.

İlk örneğimiz Joystick'in ateş tuşunu kontrol etmeye yarar. Eğer ateş tuşuna basılmışsa bu bitin değeri 1 olur.

OYUNLAR İÇİN KOLAYLIKLAR

Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. Manisa'dan Erhan Gündoğan arkadaşımız The Last Ninja II için yardım ediyor. Kendisine teşekkür ediyoruz. Kendisi oyunu beşinci bölümüne (The Office) kadar tamamlamış. Bu kısma kadar olan yerlerde herhangi bir sorunuz varsa kendisinden yardım alabilirsiniz. Arkadaşımız bu bölümün sonunda karşısına çıkan büyük pervaneden nasıl kurtulacağını ve beşinci bölümün başında bulunan odalardan birindeki bilgisayarı araştırdığında karşısına çıkan sayıların ne işe yaradığını soruyor. Erhan arkadaşımızın ikinci sorusu şöyle: Multi Ice II veya bu gibi diğer kartuşlarla oyunları nasıl ölümsüz yapabilirim? Oyun ve diğer birçok program kasette veya diskette şifreli halde bulunurlar. Bilgisayara yüklendikten ve RUN komutu ile (veya kendiliklerinden) çalıştıklarında, program ilk olarak içinde bulunan bir şifre çözücü ile programı deşifre edip normale çevirir. Bu işlemi 'decompile' ile karıştırmamak lazım. Eğer bir monitör veya disassembler aracılığı ile bu tür programları incelemeye alırsanız, şifreli halde oldukları için hiçbir şey anlamanız mümkün olmayacaktır. Zaten incelediğiniz program şifreli durumda birçok kullanılmayan op code içereceği için, disassembler listesinde işaretleri ile karşılaşırsınız. Fakat programı normal olarak yükleyip çalıştırırsanız ve reset ederseniz, incelemeniz mümkün olur. İncelemek için programın bulunduğu yerin dışında bulunan bir hafıza bölgesine yerleşecek monitör programına ihtiyacınız var. Eğer sabırlı iseniz her adresin değerini sıra ile değiştirip programı tekrar çalıştırırsınız. Ancak bu oldukça uzun sürecektir. (10 KB'lik bir program için yaklaşık 10000 adres denemeniz gerekiyor). Ancak oyundaki hak sayısını dikkate alırsanız, işler biraz kolaylaşabilir. Mesela oyun beş hak versin. Bu durumda içinde beş değeri olan adreslerden birisi oyunda kalan hakları gösteriyor demektir. Bu adresi bulmanızı sağlayacak bir programı BASIC ile yapabilirsiniz:

410 FOR 1-2048 TO 35000
20 IF PEEK(İ)—5 THEN PRİNT |
30 NEXT |

Örneğimizde programın 2048 nolu adresten başlayıp 35000 numaralı adreste bittiğini varsaydık. Bu yöntemle arama sınırını daraltabilirsiniz. Ancak hemen hatırlatalım, bu programın sona ermesi bile uzun vakit alacaktır. Örneğimizde yaklaşık 32000'lik bir döngü yapılıyor. Multi Ice II gibi kartuşların bu tür uygulamalarda büyük yardımı dokunur, çünkü çoğunda reset switch ve çok iyi bir monitör programı da bulunur. Bazı kartuşlar yardımı ile oyundaki spriteları da etkisiz hale getirmeniz, hatta spriteları değiştirmeniz mümkün olabilir.

Erhan arkadaşımızın adresi: II. Anafartalar Mah. Yükselen Aralık Sok. Grup Apt. No:4/4-a Daire 4 45020-Manisa

İstanbul'dan Birol Yaldız arkadaşımız bize aşağıdaki ipucunu göndermiş. Kendisine teşekkür ediyoruz.

Barbarian II

Rakibinizi duvara sıkıştırın, joystick'inizi ters yönde alt çapraza çekerek sürekli ateş tuşuna basın. Bir süre sonra rakibinizin öldüğünü göreceksiniz. Bursa'dan Gökhan Şenol arkadaşımız Ocak ayında bazı arkadaşlarımızın sorduğu sorulara cevap vermiş ve bize aşağıdaki ipucunu göndermiş. Kendisine teşekkür ediyoruz.

Pirates Şifreleri (1660) The Treasure Fleet

Caracas - early september Maracaibo - late september Rio de la hacha - early october Santa marta - late october Puerto bello - early november Cartegna - early december Campache - early january Vera Cruz - late january Florida Channel - late March

The Silver Train Cumana - early march

Caracas - late march Gibraltar - early april Maracaibo - late april Rio de la hacha - early may Santa marta - early june Cortegena - late june Panama - late july Puerto bello - early september

Doğru şifreyi verip işe başlasanız (yukarıda 1660 yılı için karşınıza çıkabilecek şifre sorularının cevapları bulunuyor), en az yirmi adama sahip olursunuz. Bu oyunu yeni oynayan arkadaşlarımız eğer tarihteki ünlü komutanlardan King of Pirate'ı seçerlerse 500 adam, HAPPY ve birçok gemi ile oyuna başlarlar. Oyuna başladığınız anda Petit Goave kasabasının güneyinde bulunuyorsunuz. Buradan doğru güneybatıya inerek Panama'ya gidin. Burayı ve çevresini araştırdığınızda Silver Train'i bulacaksınız.

Renegade

Eğer bölümleri kolaylıkla geçebilmek istiyorsanız, bir bölümde sol tarafa, ikinci bölümde sağ tarafa, üçüncü bölümde sağ veya sol tarafa giderek arkanızı duvara verin. Daha sonra yüzünüzü duvara dönüp gelenlere tuşuna basarak birkaç tekme atın. Fakat bir süre sonra kontrol ettiğiniz kişi yüzünü dövüştüğünüz kişiye dönecek. Bu durumda karşınızdakine uzanarak tekme atın. Eğer isabet ettiremezseniz, fazla üzülmeyin, çünkü çoğunlukla ıskalayacaksınız. Attığınız tekme başarısız olursa, rakibiniz yaklaşarak yumruk sahanızın içine girer. Kombine yumruklarla rakibinizi saf dışı edebilirsiniz. Sıra ikinci bölüme geldi. İlk olarak motosikletli serserileri müthiş uçan tekmelerinizle saf dışı bırakın. Bunlar bittikten sonra geri kalanları bir evvelki yöntemle halledin. Gelelim üçüncü bölüme, burada işimiz zor. Elindeki zincirlerle bizi öldürmek isteyen bayanlar yumruktan anlamıyor. Burada yapabileceğiniz tek şey uçarak tekme ve ters tekme. En sonda Büyük Berta var. Onu öldürmek için ona doğru koşun ve uçarak tekmeyi yapıştırın. Bunu birkaç kez tekrarlarsanız Büyük Berta saf dışı kalır. Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarla paylaşmak isterseniz, bize göndermeyi unutmayın. AMIGA'cı arkadaşlar da oyunlar hakkındaki sorunlarını, bilgilerini veya AMIGA ile ilgili diğer sorunlarını bana gönderebilirler.

MAKİNE DİLİ GET

Her bilgisayarda hangi tuşun basıldığını hafızada tutan bir adres vardır. Bu adreste klavyede basılan tuşun değeri saklanır. Adresteki değeri elde etmek için bu adresi kontrol eden ufak bir döngü yeterli olur. C64'te bu adresi kontrol edelim:

LDA
CMP # 10
BE© bulundu

Bakmamız gereken adres, sıfırıncı sayfadaki $C6 adresidir. Bu adreste klavyeden girilen tuşların değerlerini alabilirsiniz. Ancak bu değerler ASCII kodları değil, klavye matris kodlarıdır. Örneğimizdeki 10 değeri tuşunun klavye matris kodudur. Hiçbir tuşa basılmamışsa bu adresin değeri 64'tür.

GOSUB

BASIC'te sık sık tekrarlamak zorunda olduğunuz program parçalarını altprogram olarak yazıp, ihtiyaç olduğunda program akışını GOSUB komutuyla altprograma gönderebilirsiniz. Bunun için GOSUB komutundan sonra altprogramın başlangıç satır numarasını vermeniz yeterli olur. Makine dilinde de JSR komutu aynı işi görür. Bu komuttan sonra altprogramın bulunduğu adresi vermeniz yeterli olur. Mesela altprogram $C000'da başlasın.

JSR SCOOO

JSR $C000 komutunu veriniz. Altprogramları daha etkili kullanabilmek için parametrelerden yararlanırız. Bu bir sayı veya birkaç sayı olabilir. Parametre sayesinde altprogram, bir değişikliğe gerek kalmadan, programın farklı yerlerinde çağrılabilir. Mesela programın yavaşlamasını sağlayacak bir gecikme yapan bir altprogram yapalım. Bu altprogram, programımızın her yerinden çağrılabilmeli. Ancak her çağırışımızda farklı bekleme süreleri isteyebileceğimizden, bunu sağlayacak bir parametre kullanacağız. Altprogramlara parametre geçirmede $40 adresini kullanalım. Mesela, beş saniyelik bir gecikme isteyen bir program:

2000 LDA # $5 ;5 saniye bekle
2002 STA $40 ;parametreyi yerleştir
2004 JSR $5000 ;$5000 adresindeki alt programa git
e
.
5000 DEC $40 ;$40 adresini bir azalt
5002 BE© $500C ;Eğer $40 adresinin değeri sıfıra
ulaşırsa ana programa geri dön
5004 SO
5006 DEY ;Y yazmacını bir azalt
5007 BNE $5006 ;Eğer değer sıfıra eşit değilse
$5006'ya git
5009 JMP $5000 ;$5000 adresine git
500C RTS ;Ana programa dön

Eğer programın başka bir yerinde on saniyelik bir beklemeye ihtiyaç duysaydık bütün yapmamız gereken

LDA # SOA

komutunu vermek olurdu. Bu programı BASIC ile yazsaydık:

2000 A — 5
2010 POKE 40, A
2020 GOSUB 5000

.

©
5000 POKE 40, PEEK(40)-41
5010 IF THEN 5060
5020
5030 Yz
5040 İF Y<>O THEN 5030
5050 GOTO 5000
5060 RETURN

GoTO

Makine dilinde GOTO komutunun karşılığı JMP komutudur. Kontrol bu komuttan sonra verdiğiniz adrese geçer. Bu komut JSR komutuna benzer, ama program akışı RTS ile eski yerine dönemez. Program akışını değiştirmek için genel olarak iki yol vardır. İlk yola şartlı dallanma adını verebiliriz. Bu yol için örnek olarak

CMP #0
BE© 5000

BEQ örnek verebiliriz. BEQ: Branch if Equal (eğer eşitse dallan) anlamına gelir. Eşitlik veya eşitsizlik bir evvelki CMP (CoMPare, karşılaştır) komutu ile araştırılır. BNE: Branch if Not Equal (eğer eşit değilse dallan) anlamına gelir. BCC: Branch if Carry is Clear (eğer carry (elde var) biti sönükse dallan) anlamına gelir. Bu komutların hepsi bir şart sağlanırsa dallanma yapar. Bir şarta bağlı olmadan dallanma, program akışını değiştirmenin ikinci yoludur. JMP veya JMP komutları hiç bir şarta bağlı olmadan program akışını değiştirirler, JMP veya GOTO komutunu kullanırken dikkatli olmanızı öneririm. Çünkü çok fazla JMP komutunu kullanmak, programı anlaşılmaz hale getirecektir. Buna karşın, çoğu zaman programdaki bir sorunu çözmenin en iyi yolu bu komutu kullanmak olacaktır. JMP komutu programınızı taşınamaz hale getirir. Programın taşınması ne demek diyebilirsiniz. Mesela ufak bir program yazdınız ve bununla başka programları inceliyorsunuz. Ancak inceleyeceğiniz programlardan birisi sizin programınızın bulunduğu adreslerde yer alıyor. Bu durumda yapmanız gereken tek şey programınızı hafızanın başka bir yerine kaydırmak olacaktır. Ancak programınızda JMP komutları varsa, program yeni yerine taşındıktan sonra da JMP komutları eski adresleri taşımaya devam edeceklerdir. Mesela;

2000 JMP $2005
2003 LDY
2005 LDA # $5

Eğer bu programı 5000 adresine taşırsanız her şey doğru çalışacak, fakat JMP komutu hâlâ aynı yere akışı yönlendirecektir. Sizin JMP komutunu JMP $5005 şeklinde değiştirmeniz gerekir. Bunun gibi, programınızdaki tüm JMP adreslerini tekrar hesaplayıp değiştirmek gerekir. Programı taşımak için monitörünüze şu komutu vermeniz yeterli olur:

T 2000 2006 5000

T $C000 $C0FF $5000 T'den sonraki ilk rakam taşınacak adresin başlangıcını, ikincisi bitimini, üçüncüsü de yeni yerin adresini belirtir. Eğer programınızı ilerde başka bir yere taşımanız gerekirse, yapacağınız en iyi şey LABEL (etiket) kullanmanıza izin verecek bir assembler ile çalışmak olacaktır. Böyle bir assembler ile çalışırken kontrolün geçeceği adresleri bilmek zorunda değilsiniz. Adres yerine label kullanırsınız. Assembler, sizin yerinize gerekli hesaplamaları yapar. Programın yerini değiştirmek istediğinizde bütün yapmanız gereken * = ile başlangıç adresini değiştirmek olur. Buna bir örnek verelim:

JMP ikinci bölüm
LDY#3
ikinci bölüm LDA 5

AMIGA

Genellikle AMIGABASIC ile 640 * 200'den büyük pencere açamazsınız. Bu durumda ekranın alt kısmında 56 piksellik boş yer kalır. Başka bir deyişle ekranın sadece %78'ini kullanabilirsiniz. Eğer ekranın tamamını kullanarak 640 * 256'lık bir çözünürlük elde etmek isterseniz aşağıdaki ufak programı deneyin:

SCREEN 1,640, 256,2,2
27
WINDOW 1
PRİNT “DEVAM İÇİN RETURN TUŞUNA BASIN”
İNPUT CEVAPS
WINDOV CLOSE 2
SCREEN CLOSE 1

AMIGABASIC ile yazdığınız bir programın disketi takar takmaz çalışmasını ister misiniz? Eğer cevabınız evetse,

ED s/startup-sequence komutu ile startup-sequence dosyasına girin ve AMIGABASIC program-ismi komutunu ekleyin. Program-ismi yerine çalışmasını istediğiniz programın ismini yazın. Artık programınız kendiliğinden çalışacaktır. ARKANOİD oyununda bir kolaylık ister misiniz? Gemi göründüğünde boşluk tuşuna basın ve 'DOG' kelimesini yazın. Bu kelimeden sonra RETURN tuşuna basmadan bir kere daha boşluk tuşuna basın. Oyun sırasında üzerinde DS yazılı olan bir kapsül düşecek. Bu kapsülü yakalayın. Oyunda sesin kaybolduğunu göreceksiniz. Sesi elde etmek için 'A' tuşuna basın. Artık aşağıdaki tuşlardan birine basarak istediğiniz kapsülün düşmesini sağlayabilirsiniz:

B: Catch (yapışkan) L: Lazer P: Player S: Slow (topu yavaşlatır) F: Final Round (son bölüm)

Eğer F kapsülünü yakalarsanız en son bölüme geçersiniz. Oyunu tamamlamak için buradaki yaratığı yok etmeniz yeterli olacaktır. Hiç CLI ile çalıştınız mı? Eğer cevabınız evetse, CLI'daki en can sıkıcı şeyin yanlış yazılan bir satırın tekrar yazılması zorunluluğu olduğunu biliyorsunuzdur. Workbench 1.3'ün en güzel yanlarından birisi, kullanımı daha kolay bir komut arabirimi içermesi. Yeni arabirimin adı SHELL. SHELL'i kullanmak için Workbench 1.3 disketindeki SHELL ikonunu açmak gerekiyor. Bunu yaptığınızda karşınıza CLI'dekine benzer bir pencere açılacak. Her yeni SHELL ilk olarak S:Shell-Startup dosyasını çalıştırır. Bu dosyadaki ilk komut,

PROMPT “%N.%S” %S parametresi ekrana bulunduğunuz directory'nin yazılmasını sağlar. Mesela DEVS directory'sindeyken

1.DEVS:) 28 yazısı çıkar. PROMPT komutunu istediğinize göre değiştirmeniz mümkündür:

PROMPT “Şu anki yer 26$; Shell sayısı ver:” şeklindeki bir değişiklik ekrana,

Şu anki yer DEVS:; Shell sayısı 1; komut ver:

mesajını çıkarır. Shell-Startup dosyasındaki diğer iki komut:

ALIAS XCOPY CLONE
ALIAS ENDSHELL ENDCLİ

dir. ALIAS komutu ile istediğiniz bir komutun adını değiştirebilirsiniz. Ancak bu işlem RENAME komutunun yaptığından farklıdır. RENAME komutu ile ismi disket üstünde değiştirirken, ALIAS komutu mevcut komutun başka bir isimle daha çağrılmasını sağlar. ALIAS komutunun iki parametresi bulunuyor. İlk parametre komutun yeni ismi, ikinci parametre yeni isimle çağıracağınız komuttur. Bir komuta () parantezlerini ekleyerek, ALIAS komutundan bu komuta parametre geçirebilirsiniz. Mesela,

XCOPY dosya/ TO dosya2
komutu,
COP TO dosya2 CLONE

komutuyla aynı işi yapar. Shell () parantezlerden sonra yazılanları parametre olarak komuta gönderir. Örneğimizde CLONE, COPY komutuna parametre olarak geçirilmiştir. ALIAS komutuyla yaptığınız isimleri görmek için;

ALIAS demeniz yeterli olur. Bir ismi silmek için,

ALIAS isim yazmanız yeterli olur. Şimdilik hoşça kalın!..

AMIGA ve Mouse

SAYIN Commodore Dergisi yetkilileri, Derginizin her sayısını alıyorum ve zevkle okuyorum. Yayınlamış olduğunuz “masa üstü yayıncılık” yazısı çok ilgimi çekti. Ancak, bir şeyi çok merak ediyorum. Örneğin, bu masa üstü yayıncılık programlarının herhangi biriyle bir sayfa düzenledik. Elimizde bulunan konu ile ilgili bir fotoğrafı, bu sayfaya yerleştirmek istedik. Bunu nasıl gerçekleştirebiliriz? Bunu gerçekleştirecek bir cihaz var mı? Varsa, fiyatı ne kadardır? Diğer bir sorum ise, “mouse” hakkında. AMIGA için geliştirilmiş bir MOUSE Türkiye'de var mı? AMIGA'yı, bu cihazla telefona bağlayabilir miyim? Bu MOUSE'un fiyatı nedir? Sorularıma cevap vereceğinizi umuyorum. Saygılarımla Mert Yaldız

SAYIN Mert Yaldız, çeşitli masa üstü yayıncılık programları ve yazı programlarının bazıları, yazı metni içinde resim kullanmanıza izin verir. Bu resimleri isterseniz Deluxe Paint II gibi bir resim programında kendiniz çizerek veya hazır bir resmi kullanarak elde edebilirsiniz. Etrafınızdaki bir eşyanın resmini kullanmak isterseniz ilk olarak bu eşyanın resmini kamera yardımı ile almanız gerekir. Bu işlemi bir ara birim sağlıyor. Aldığınız resmin renklerini dilerseniz değiştirmeniz mümkün. Özellikle resmi siyah beyaz aldıysanız bir resim programı yardımı ile resmi renklendirebilirsiniz. Resmi elde ettikten sonra gerisi bu resmi yayıncılık programından çağırmak olacaktır. Her AMIGA bilgisayarı mouse ile birlikte verilmektedir. Mouse, bilgisayarı telefona bağlamaya yarayan bir alet değil, bilgisayarı klavyeye bağımlı olmadan kullanmanızı sağlar.