Commodore sayı 68, sayfa 24

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ı.