C64 için Püf Noktaları
SYS KOMUTU SYS komutu SYSTEM kelimesinden geliyor. Bu komut çalıştığında BASIC devre dışı kalıyor ve kontrol çağrılan makine dili programına geçiyor. Bu program çalışmasını bitirdiğinde kontrol tekrar BASIC'e geri dönüyor. Bu yüzden SYS komutunu BASIC'teki GOSUB komutuna benzetebiliriz. SYS'den hemen sonra gelen sayı makine dili programın çalışmaya hazırlık adresidir. Bu adresi SYS komutu ile kullanarak programın başlamasını sağlamış oluruz. Genellikle programın başlangıç adresi ile SYS adresi aynıdır. Eğer programı başlatmak için gerekli SYS adresini bilmiyorsanız, programın hafızaya yüklendiği ilk adresi deneyin. Eğer program sorunsuz çalışırsa SYS adresini buldunuz.
Makine dili programın hafızaya yüklendiğinde hangi adreste yer alacağını bulmak için disketten veya teypten programın ilk iki byte'ını GET komutunu kullanarak okuyun. Bu iki adresi low/high formatında kullanarak programın hafızaya yükleme adresini bulabilirsiniz. Bunun için high byte'ı 256 ile çarpın ve sonuca low byte değerini ekleyin. Elde edeceğiniz sayı programın hafızaya yerleşmeye başladığı ilk adrestir. Bu sayıyı SYS komutunda kullanarak başlangıç adresi olup olmadığını anlayabilirsiniz. Ancak şansınız yoksa program kilitlenir veya çalışmaz. Çünkü programın gerçek başlangıç adresi hafızadaki ilk adres değil demektir. Bu durumda yapabileceğiniz tek şey programı bir monitör aracılığı ile inceleyip program akışından başlangıç adresini bulmaya çalışmak olacaktır.
OYUNLAR İÇİN KOLAYLIKLAR
Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. Kerem Doğueri ve Burçin Kermen arkadaşlarımız bize aşağıdaki ipuçlarını göndermiş. Kendilerine teşekkür ediyoruz. Mission AD POKE 46774,165 SYS 23154 Boulderdash II POKE 25088,128 Bouldersash POKE 16470,128 Flashbier POKE 8884,255 SYS 26769 Camels POKE 11626,255 : POKE 11639,255 SYS 4096 Hero POKE 12807,203 Runner POKE 7892,255 Bonka POKE 3290,169 : POKE 3291,0 POKE 3292,234 : SYS 2304 Lazarian POKE 9556,169 : POKE 9558,234 : Scooby Doo POKE 7450,96 SYS 2560 Supacathatroopa POKE 23899,16 Bmx Simulator POKE 8692,0 : SYS 4096 (zamanı durdurur)
POKE 9557,0
SYS 2072
Giresun'dan Yüksek Gürsoy arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. Aşağıdaki POKE'ları yazmadan evvel oyunu yükleyin, POKE'ları yazın ve RUN ile programı çalıştırın.
POKE 16877,173
POKE 16457,173
POKE 2180,255
POKE 2175,99 (99 hakkınız olur)
POKE 9450,173
Hard Hat Muck Laser Strike Commando Ghost'n Goblins Jumpman Junior
Fire Ant POKE 27568,100 Dig Dug POKE 10473,255 Seafox POKE 7337,173 POKE 4446,173 R-Nest POKE 2759,100 Decathlon POKE 9450,173
Buck Rogers POKE 2490,9
Kars'tan Murat Pirim arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.
Fire Power (AMIGA) Oyunda ikinci bölüme geçebilmek için düşmanın ana cephane merkezini yok edin. İçinde bulunan aleti alıp üstünüze geri dönün ve garajınıza girin. İkinci düzeye geçmekle beraber dört hakkınız olacaktır. Arkın Kora arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. Samurai Warrior Skorlar tablosuna “CHEAT” yazarsanız oyuna ikinci bölümden başlarsınız. Starguake Oyunu yükledikten sonra resetleyin.
POKE 3661,169 (sonsuz hak) POKE 19161,169 (sonsuz bulut) POKE 9559,169 (sonsuz mermi) POKE 3546,234:POKE 3547,234 (sonsuz enerji) POKE 4614,96 (Düşmanları POKE) (Oyun hızlanır) SYS 3075 Great Giana Sisters Oyunu yükledikten sonra resetleyin. POKE 8257,173 (Sınırsız kızkardeş olur) SYS 2098 Battle Ships (AMIGA) Oyuncu sayısı seçilmeden evvel HELP tuşuna basılırsa 40 atış yapılır. - Lüleburgaz'dan Umut Bozkurt arkadaşımız bize ACE-2'nin kontrol tuşlarını göndermiş. Kendisine teşekkür ediyoruz. Uçak-1 (F-18 Hornet) Joystick port-1'e takılır. F : Gücü arttırma S : Gücü azaltma X : Haritayı gösterir E : Silah seçimi Uçak-2 (F-15 Eagle) Joystick port-2'ye takılır. H : Gücü artırma K : Gücü azaltma V : Haritayı gösterir U : Silah seçimi
Diğer Kontroller F3 : Oyunu bitirme F5 : Oyun sırasında müziği açıp kapama
Uçak bilgileri Durdurma hızı : 440 Knots Tavan : 60000 feet
İdeal uçuş yüksekliği 30000 feet veya daha yüksek. Silahlar: Makineli tüfek (C) Menzil — 1 mil Isı güdümlü füzeler (H) Menzil- 1 mil Radar kontrollü füzeler (R) Menzil — 25 mil hedefi izler. Havadan karaya/denize Menzil — Yükseklik 2000 feet'den ve hız 500 knot'tan az olmak koşulu ile kara ve deniz hedeflerini vurur. İzmir'den Özgür Öğret arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. Frightmare Havada uçuşan medusa başlarını, kuşları ve benzeri nesneleri vurursanız rüya durumunuz yükselir. Böylece kadehleri toplamanıza gerek kalmaz. Cihan Çapan arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. Dandare II RUN/STOP tuşuna ilk defa bastığınızda oyun duruyor, ikinci basışta zaman duruyor. Engin Akbulut arkadaşımız bize Power at sea oyununun bitirilmesinde yardımcı olacak ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. (1) Başlangıçta seçimlerde 40 fuel 6000 asker almanızı önerilir, çünkü benzin yetiyor ama bazen 5000 asker yetmiyor. (2) Bir destroyere rastladığınızda önce hiç bombardıman uçağı kaldırmayın. Çünkü bunlar çok yavaş hareket ediyor ve hemen vuruluyor. Önce avcı uçaklarıyla destroyeri tarayın ve gri noktalar halinde hasar meydana getirin. Sonra bombardıman uçağıyla saldırıya geçin ve pike yaparken nişangah beyaz olunca bombayı bırakın. Geminin battığını göreceksiniz. (3) Üstlerde yeşillik içindeki toplar için topunuzu 15 dereceye ayarlayın ve diğerleri için 5 derece yapın. En sondaki beton koruganlar için topunuzu 20 dereceye ayarlayın ve koruganların tam kenarında ateş edin. Çoğu topu yok edersiniz, üssün durumu kötüleşiyorsa, mesela Strong'dan Medium'a, Medium'dan Strong'a, böylece askerden tasarruf ediyorsunuz. (4) Rotada değişiklik yapmak isterseniz tuşuna basarak işaretlediğiniz noktaları silebilirsiniz. Engin arkadaşımız takıldığınız noktaları kendisine sorabileceğini söylüyor, adresi aşağıda:
Engin Akbulut Batı Loj. Cerbe A/3 Gölcük/Kocaeli
Kdz. Ereğli-Zonguldak'tan Yavuz Güçeri arkadaşımız bize The way of exploding fist II oyununun bitirilmesinde yardımcı olacak ipuçlarını göndermiş. Kendisine teşekkür ediyoruz. Bir kavgadan sonra tükenen enerjimiz zamanla yenileniyor. Fakat eğer adamımızı müziğin değiştiği (bu çok önemli) bir yere bir defa sokup çıkartıp sonra tekrar sokarsak enerji bir birim artıyor. Böylece mesela bir yoldan mağaraya girerken girip çıkarak beklemekle 3-4 dakika kadar süren enerji toplama işini halledebiliriz. Yavuz arkadaşımızın bir de sorusu var: Soru: BASIC'te uzun DATA'ları (mesela sprite dataları ya da karakter datalarını) READ-DATA ile kolayca okuyoruz. Bu işi makine dilinde nasıl yapabiliriz. Benim düşündüğüm tek tek LDA-STA ile tüm dataları girmek. Cevap: Bu işlem düşündüğünüz gibi LDA-STA yolu ile yapılabilir. Ama eğer datalarınız çoksa bütün hafızayı bu iki komuta harcamak zorunda kalırsınız. Benim verdiğim ufak program tek çözüm değil ama sizin için bir başlangıç noktası olabilir. Ve benim verdiğim yöntem bir kerede en fazla 255 data okuyabiliyor.:
LDX SFF :
Dön DEX : X yazmacını bir azalt
LDA $adres, X ; adres— dataların başlagıç ad-
resi
STA $adres, X
BNE Dön ; Eğer X yazmacı sıfıra eşit değil-
se DEX komutuna git
RTS : Çağıran programa geri dön
İzmir'den Ömer Atamer arkadaşımız Football Director programında başarılı olmak için neler yapması gerektiğini soruyor? Football Director oyununda başarılı olabilmek için iki faktör var. Bunlardan ilki kulübün mali durumunu en iyi düzeye getirmek, diğeri ise doğru oyun taktiği ve oyuncu seçimi ile takımınıza başarılı sonuçlar aldırmak. Mali faktörün önemli olmasının sebebi yeni oyuncu alabilme gücü. Eğer takımınıza yeni ve kaliteli oyuncu almazsanız, takımı ne kadar iyi yönetirseniz yönetin belirli bir seviyenin üstüne çıkamazsınız. Daha da kötüsü mali sıkıntı yüzünden elinizdeki yıldız oyuncuları da satmak zorunda kalabilirsiniz. Bu durum takımın mevcut gücünün de düşmesine yol açar. Takımın mali gücünü yani parasını nasıl artırabilirsiniz. Görünüşte iki yol var: (1) Paranızla hisse senedi almak ve bunlar değerlenince satmak. (2) Oyuncu alıp satmak, Ancak her iki yolda da pazar kazanıyor görünseniz de vergi kesintisi gibi giderler yüzünden zarara girip elinizdeki paradan da oluyorsunuz. Paranızı değerlendirmenin en iyi şekli, kaliteli oyuncu almak olacaktır. Bütün sezon boyunca sadece iki oyuncu almak yeterli olur. Geri kalan parayı da muhtemel para açıklarına yedek olarak saklayabilirsiniz. Alacağınız oyunculardan birisi kaleci diğeri de forvet elemanı olmalı ve her ikisinin de minimum yeteneği altı veya yedi üstünde olmalıdır. Bu sayede hem kalenizi güvenceye almış olacak hem de takımın gol atma yeteneğini arttırmış olacaksınız. Para kazanmanın tek yolu maçlarda başarılı sonuçlar elde etmek olur. Özellikle kupa maçlarında tur atladıkça alacağınız para miktarı artacaktır. Takımın başarısı için takımı çalıştırın, ama bunun sabır veya iki saati geçmesin. İlk onbiri mümkün olan en iyi elemanlardan kurun. Mali gücünüz arttıkça takımın diğer mevkilerindeki oyuncuları da iyileri ile değiştirin. Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarla paylaşmak isterseniz bize göndermeyi unutmayın. Adresimiz:
MAKİNE DİLİ
END Bir makine dili programı sona erdirmenin çeşitli yöntemleri vardır. Mesela $4003 adresine veya $4000 adresine JMP yapabilirsiniz. Eğer makine dili programı BASIC'ten SYS komutuyla başlatırsanız RTS ile BASIC'e dönebilirsiniz. Her JSR komutunun karşılık gelen bir RTS komutu vardır. JSR komutunu kullandığınızda stack'a dönüş adresi yerleştirilir. RTS komutuna sıra geldiğinde stack'taki adres kullanılarak geri dönülür. RTS komutu kullanılmadan başka bir JSR komutu gelirse, buna ait dönüş adresi stack'ta ilk adresin üstüne yerleştirilir. Buna göre iki JSR komutundan sonra stack'ta iki dönüş adresi bulunur. İlk RTS komutuna sıra geldiğinde en üstteki dönüş adresi kullanılır. Böylece program akışı en son kullanılan JSR komutundan sonraki komuta geçer. BASIC'te kullanılan SYS komutunun etkisi makine dilindeki JSR komutu gibidir. BASIC'e dönülmesi gereken adres stack'a yerleştirilir. Makine dilinde hiç JSR kullanılmadan veya JSR karşılığı olmadan kullanılan RTS komutu stack'ten BASIC'e geri dönüş adresini alır. Bir makine dili programı sona erdirmenin başka bir yolu da BRK komutunu kullanmaktır. Eğer bu komut C-128'de kullanılmışsa BRK komutu sonrası makine dili monitöre girersiniz. Bu tür bir kullanım genellikle program geliştirme sırasında veya hata arama sırasında kullanılır. Hata bulunduktan veya program sona erdikten sonra bu komutu RTS ile değiştirmek uygun olur. Programınızın incelenmesini istemiyorsanız işlevini tamamladığında durmasını engellemeniz gerekir. Bunun en iyi yolu da sonsuz döngülerdir. Bu yöntemin uygulanışını en iyi oyunlarda görebiliriz. Bu oyunlardan çıkmanın tek yolu bilgisayarı kapatıp açmaktır. (Ama elimizde imkan varsa resetleme yolu ile programı inceleme şansımız vardır.) Sonsuz döngüye bir örnek vererek END komutunun karşılığını tamamlayalım. Bu örneği kullanarak klavyeden istediğiniz bir tuşu okumanız mümkün olacaktır.
ATLALDAS$D4 ; basılan tuşun saklandığı hafıza ad-
resi
CMP 88 ; eğer bu değer 88 ise hiç bir tuşa ba-
sılmadı demektir.
BERATLA ; döngüye devam et
$D4 adresinde 88 değeri varsa hiç bir tuşa basılmamış demektir, sonsuz döngüye devam et. Eğer bir tuşa basılmışsa kontrol BEQ komutundan sonraki komuta geçer ve A yazmacında basılan tuşun değeri bulunur.
AMIGA
İlk konumuz son derece güncel bir olay olan virüsler. Şu ana kadar bilinen ve başımızı derde sokan iki virüs vardı: SCA ve BYTE BANDIT. Şimdi bilinen virüslerin sayısı beşe ulaşmış durumda. Fakat yeni çıkanlardan sadece DASA adındaki üçüncü virüs Türkiye'ye girmeyi başardı. Bu ve diğer beş virüse karşı en etkili virüs killer ise Guardian isimli program. Bunun elinden kurtulan virüs henüz yok. Virüs killer programı olarak arkadaşlarımız virüse karşı nasıl korunabilirler? Disketlerinizin korumasını daima kapalı tutun. Bu durumda diskete yazmak imkansız olduğundan virüs giremeyecektir. Yeni aldığınız disketlerin sağlığından emin olmadıkça bu disketleri çıkardıktan sonra bilgisayarınızı açıp kapatın. Resetlemek hiç bir işe yaramaz, AMIGA'da Guru'dan sonra en can sıkıcı olaylardan birisi READ/WRITE ERROR'dür. Bu mesajla genellikle disketten bir program yüklerken karşılaşırsınız. Bu mesaj sizin için çok değerli bir programın kaybını işaret ediyor olabilir. Mesajla karşılaştığınızda hemen ümitsizliğe kapılmayın ve RETRY seçeneğini en az beş kere deneyin. Çoğu kere durumun düzeldiğini göreceksiniz. Eğer bütün bunlara rağmen durum değişmezse hâlâ programı kurtarmak için bir şansınız vardır. Ancak biraz CLI kullanarak uğraşmak gerekecek, ilk olarak CLI ekranını açın ve; ED s/startup-sequence yazın. Karşınıza çıkan bilgisayarın açıldığında takip edeceği işlemlerdir. Eğer ana programın öncesinde, gibi komutlar varsa ve READ/WRITE ERROR burada ortaya çıkıyorsa programı kurtarma şansınız vardır. Ana programı anlamak için sıra ile her satırın başındaki isimleri kullanarak,
LIST isim komutunu verin. Burada çıkan değer 50000'den büyükse büyük ihtimalle programı bulduğunuz demektir. Bunun üstündeki isimlerin (satır başlarına) başlarına noktalı virgül koyup yeni startup-sequence'i SAVE edin ve tekrar deneyin. Şansınız varsa program kurtulur. Bu söylediğim işlemleri kesinlikle arızalı disketin bir kopyası üzerinde yapın. Karşılaşabileceğiniz startup-sequence'a bir örnek:
£CHO “Hoşgeldiniz...”
DİR RAM:
CMOPY DFO:MYC RAM:
AMIGABASIC
ENDCLİ
Bu örnekte ana program AMIGABASIC'tir. Startup-sequence'i sadece ana programın çalışabileceği şekilde ayarlarsak aşağıdaki dosyayı elde ederiz: ;ECHO “Hoşgeldiniz...” ;DIR RAM: DFO:MYS RAM: AMIGABASIC ENDCLI
AMIGABASIC ile hazırladığınız programlarda açacağınız window'ların maksimum ölçüleri ekran çözünürlüğüne eşit değildir. Maksimum ölçüler window'ların boyutlarının sabit ve sabit olmayan türde olmasına göre de değişiyor. Bu ölçülere göre maksimum window büyüklükleri:
Maksimum Ekran Boyut window çözünürlüğü değiştirme (0,0)-(631,186) 640 * 200 Hayır (0,0)-(417,186) 640 * 200 Evet (0,0)-(631,386) 640 * 400 Hayır (0,0)-(617,386) 320 * 400 Evet (0,0)-(311,186) 640 * 200 Hayır (0,0)-(297,186) 320 * 200 Evet 320 * 400 Hayır (0,0)-(297,386) 320 * 400 Evet
Normalde kullanılacak window'u belirleyemezsiniz. Ama istenilen window'un kullanılacak window olarak tanımlanması dolaylı yoldan yapılabilir. Aktif olmasını istediğiniz window'u normal olarak açın. Daha sonra aynı isimle window'u tekrar açarsanız aktif olduğunu görürsünüz, mesela;
WINDOW 2,“DENEME”,(40,10)-(100, 100),27, 1
WINDOW 2,"DENEME”
Ancak kullandığımız bu yöntemin bir dezavantajı var. İkinci window komutu çalıştığında, window'un içindeki yazıların tümü siliniyor. WINDOW 2 ile WINDOW OUTPUT 2 komutları arasında başlangıçta bir fark yokmuş gibi görünse de önemli bir fark var: WINDOW 2 ile belirtilen window'u en üste çıkarır ve onu aktif duruma geçirirsiniz. WINDOW OUTPUT 2 komutu belirtilen window'u aktif hale getirir ama en üste çıkarmaz. Şimdilik hoşçakalın...