Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
13. $F76A adresindeki rutin, program adı, başlangıç-bitiş adresi ve program tipinin bulunduğu kayıt başlığını (header) kasede kaydeder. 14. $F838 adresinde bulunan rutin, ekrana “Press Record&Play on tape” mesajını yazar ve teyp tuşlarından birine basılmasını bekler. 15. Bu adresler gerçekten de bütün değişiklikleri normale çevirir. Fakat 43-44'ün değerleri $0281, $0282 adreslerinden okunur. Yani bir kırıcı $0282'nin değerini $FF yaparsa gitti korumanız... Bunun yanında birçok arkadaşınızın da belirttiği gibi $FD02'ye sıçrayarak RESET kontrolü yapmadığımız için, RESET veya RESTORE'a dayanıklı bir program kullanarak programımızı kırabilirler. 16. $8004 adresine CBM80 (ASCII kodlarıyla değil... Sırasıyla şu baytları girmelisiniz: $C3 $C2 $CD $38 $30) yazarsanız ve $8000-$8001 ve $8002-$8003 adreslerini istediğiniz rutini gösterecek şekilde (alçak-yüksek bayt formatında) ayarlarsanız RESET ve RESTORE durumunda sizin ayarladığınız adreste bulunan rutine sıçranır. Yazılarımda CBM80'in kodlarını vermediğim için ASCII ve CBM80 yazılır diyen arkadaşlarınızın da cevaplarını doğru saydım. 17. C şıkkı. Sırasıyla $DC0F'ye $11, $DD0F'ye $83 verirseniz kendi NMI'ınızı yaratabilirsiniz. 18. A registerinin değeri $EA olur. $F4 kodlu DOP (Double NOP) komutu, $F4-$A9 çiftinin tek bir NOP komutu gibi görülmesini sağlar ve geriye LDA #$EA komutu kalır. 19. Tüm belleği ($0801-$FFF7 arasını) birbirini tutmayan baytlarla doldurup, yüklenen kısacık bir programın bile yüzlerce blok tutmasını sağlardık tabii ki. Bu baytlar $00,$01,$02 gibi sırayla gidebilir ya da tamamen tesadüfi olabilir. Bu tamamen sizin seçiminize kalmış bir olay. Yarışmamızın şampiyonu Selçuk Aygüney'in üşenmeyip de denediği bu yöntemle, MULTI ICE II, bomboş bir hafızayı 4 dakika 12 saniye içinde 198 blok olarak kırıyormuş. Kendisine ilgisinden ve sabrından dolayı çok teşekkür ediyorum. 20. $0318-$0319 adresleri, KERNAL ROM'u yerindeyse NMI rutinini gösterir. Bu adreslere alçak-yüksek bayt formatında yazacağınız adreste bulunan rutin her RESTORE tuşuna basıldığında çalıştırılacaktır. 21. Blok sayısı yazılacağına göre ilk olarak 65. sayıdaki yazıda anlatılana benzer şekilde iki basamaklı sayıları ekrana yazacak rutini yazmak gerekiyor. Daha sonra yüklenmekte olan adresin yüksek baytını A registerine alıp, bu değerden 8 çıkartmamız gerekir. Artık blok sayısını gösteren bu değeri ekrana basabiliriz. Tabii ki bu biraz saçma bir program oldu. Her bayt okunduğunda (ya da her taramada) bir kez çalıştırıldığı için çok RASTER satırı yer. Oysa şöyle bir program yazsaydık daha kısa ve etkili bir yöntem kullanmış olurduk (hem de onluk sistemi kullanabilirdik): Program yüklemeye başlamadan önce ekrana 000 yazılır. Yükleme yapılırken, yüklenmekte olan adresin yüksek baytı değişirse, ekrandaki bu sayının en sağdaki basamağı bir artırılır (INC $0402 gibi). Fakat artırmadan önce karakterin dokuz olup olmadığına bakmamız gereklidir. Eğer karakter dokuzsa, bu basamağı sıfırlayıp bir soldaki basamağı artırmamız gerekir (9 kontrolünü yaparak). Bu şekilde bir blokta bir kez birkaç baytın değeriyle oynanır o kadar. 22. $D012 adresi, (Makine Dilinin Püf Noktaları'nı okuyan herkesin bildiği gibi) ekranı tarayan elektronun hangi satırda bulunduğunu gösterir (Yalnızca iki sekiz biti $D012'de bulunur. 9. bit için $D011'in son bitine bakmanız gereklidir). Aynı zamanda bu adrese yazdığınız bir değer, elektronun her bu değere gelişinde bir IRQ oluşmasını sağlar. 23. Y'yi başlatmışız. Bu sayede tüm satırın son karakterle aynı değeri almasını sağlamış oluruz. Yani ilk olarak $07E7'deki baytı $07E6'ya alırız, sonra da $07E6'daki baytı $07E5'e alırız.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
Sonunda tüm satırı aynı karakterle doldurmayı başarırız. Bu komik hatadan kurtulabilmek için de Y'yi 0'dan başlatıp #$27'ye kadar artırmamız gerekir. Bu soruda da bulunan baskı hatası sayesinde yeterince dikkatli olmayan arkadaşlarımız da yarımşar puan topladılar bu sorudan (LDY #$27 yazdığımız için Y'nin değerinin her zaman #$27 olmayacağını söyleyenlerden bahsediyorum). 24. IRQ yükleyicimiz, sizi daha önce de uyardığım gibi $2D-$2E (BASIC programının sonunu gösteren adresler) adreslerinin değerlerini düzeltmiyor. Bu yüzden sizin de düzeltmediğiniz bu adresler, büyük ihtimalle $0803'ü gösterir durumda kalıyor program yüklendikten sonra. İlk değişkene değer verdiğiniz anda da, programınızın ortasına komik komik şeyler yazılıyor (değişkenle ilgili bilgiler). Program da uçmuş olduğu için çalışamıyor. Olay bundan ibarettir. 25. İlk olarak da LDA ve STA'yı nereye ekleyeceğinizi bulursunuz. Sonra da burada hemen önce en az üç baytlık bir-iki komut bulursunuz ve bu komutları bir yere not edersiniz. Bu komutların kapladıkları baytların başına JMP $0000 yazarsınız ve geriye bir ya da iki bayt artarsa bunları NOP'larla kapatırsınız. Sonra birkaç komut alabilecek bir boş alan bulursunuz. Bu alana ilk olarak not aldığınız komutları, sonra da eklemeniz gereken komutları yazıp RTS ile işinizi bitirirsiniz. Bu rutinin başlangıç adresini kafanızda sürekli tekrarlayarak programın başında JMP $0000 yazdığınız yere dönersiniz ve bu komutu JSR Adres (Adres — kafanızın içinde dolaşan adres) ile değiştirirsiniz. Eğer tek hata buradaysa programınızın çalıştığını görür zevkten dört köşe olursunuz. Evet, şimdi de heyecanla beklenen an geldi. Yarışmaya cevap gönderen arkadaşların aldığı puanları açıklıyorum:
1. Selçuk Aygüney: 24/24 2. Serkan Zoroğlu: 23.5/24 3. Ertuğrul Cem Özdamar: 22,5/24 4. İsmail Şahin: 22/24
5. Onur Malkoç: 22/24 6. Olcay Ergün: 22/24 7. Caner Şimşir: 21/24 8. Şemseddin Moldibi: 18.5/24 9. Fatih Dikbaş: 17.5/24 10. Mustafa Özenç: 17.5/24 11. Erkan Doğan: 13/24 12. Tolga Özdemir: 12/24 13. Sinan Acıöz: 7.5/24
Yukarıdaki arkadaşlarımızın tümüne yarışmaya olan katılımlarından dolayı teşekkür ediyorum. Bu arada 22 puan alan üç kişi arasında yapılan kurada kaybeden Olcay Ergün'e derin üzüntülerimi iletiyorum. Umarım şevkini yitirmez ve diğer yazılarda da yapmayı düşündüğümüz yarışmalara katılır. Abonelik kazanan bütün arkadaşların abonelikleri 69. sayıdan itibaren başlayacak. Hepsini başarılarından dolayı kutluyorum. Şimdi de yazılan mektuplara ve sorulara cevap kısmı:
1. Olcay Ergün: Ne yazık ki şu anda 64 donanımıyla ilgili yazılar yazabilecek elemanlarımız yok. Bu yüzden 64'ün kapılarıyla ilgili yazılar için biraz beklemeniz gerekecek. Bu arada 6800 yazılarıyla ilgili düşünceniz de ne yazık ki gerçekleşemeyecek. Şimdi bile AMIGA yazılarının çok fazla olduğunu söyleyen 64'çüler, bir de 68000'e başlarsak bizi linç ederler sanırım. Bu arada cevaplarınız arasında bulunan soruları da cevaplayayım: Turbo yükleyicide NMI'ı neden bir RTI gösterecek şekilde ayarladığımızı sormuşsunuz. Biliyorsunuz Turbomuz KERNAL'ı kaldırarak yükleme yapıyor ve $FFFA ve $FFFB'ye bir değer vermemiz gerekli (KERNAL yerinde olmadığı için burada herhangi bir değere rastlayabilirsiniz). Eğer bir RTI'yı göstermezsek, herhangi bir anda RESTORE'a basıldığında burada gösterilen garip rutinlere dallanılır. Biz RESTORE'u etkisiz hale getirmek istediğimiz için interruptlar için RTS yerine kullanılan RTI'yı