Commodore sayı 64, sayfa 19

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 19

Bu bölgenin nasıl düzenlendiğini aşağıda görebilirsiniz:

Bu vektörlerin gösterdiği adreste bulunan rutinlerin neler yaptığını size anlatmayacağım, çünkü konumuzun biraz dışında. Merak eden arkadaşlar gerekli bilgiyi “Programcının El Kitabı” adlı Teleteknik yayınında bulabilirler. Buraya kadar, bir yükleyiciyi nasıl kendiliğinden çalışabilir ve kolay kolay çalışması engellenemez hale getireceğinizi anlattım. Buradan sonra da, yükleyicinizin başına ne tür korumalar koyabileceğinizi anlatmaya çalışacağım. Yükleyicimizin uzun olması sebebiyle, hem ilk parçanın çalışması için bozduğumuz adresleri düzeltmeye, hem de yüklenecek olan programı korumaya pek yerimiz kalmıyordu. Bu sebeple, yükleyicinin bazı parçalarını ekranın başı olan $0400 adresine yerleştirmeye karar verdim. $0400'de bulunan program parçası şöyledir:

43-44 adreslerini KERNAL rutinleri kullanarak düzelteceğimi söylemiştim, ama bu rutinin 43-44 için gereken değerleri $0281, $0282 adreslerinden okuduğunu belirtmemiştim. Gerçekten de çoğu kişi bu adreslerin kullanılabileceğinden haberdar değildir ve KERNAL kullanarak 43-44'ü düzelttiğini sanır. Fakat $0282'ye 255 değerini veren bir kişi kolaylıkla bu korumayı atlatabilir. Bu sebeple öncelikle bu adreslere almaları gereken değerleri vermemiz gerekir. KERNAL'da ilk kullandığımız rutin $E3BF adresinden başlıyor. Bu rutin, 43-44, 2048 adreslerini düzeltiyor ve $0073'de bulunan rutini normal haline çeviriyor. İkinci sıçradığımız adres olan $E453, daha çok önceden bozduğumuz adresleri temizlemeye yönelik çalışıyor. Bu arada, yığını da temizleyerek, bilgisayarın yüklemeye girişimden önce nerede kaldığını unutmasını sağlıyor. Daha sonra, basit kartuşları engelleyebilecek bir adrese sıçrıyoruz. $FD02 adresinden döndükten sonra, sıfır bayrağı (zero flag) temizse (reset) problem yok demektir. Ama eğer sıfır bayrağı kalkmışsa (set) $8004 adresinde CBM80 yazılı demektir (birileri RESET yapıldığı zaman kendi rutinini çalıştırmak istiyor diyebiliriz). BNE komutumuz, RESET'in engellenmediği durumlarda $041D'ye atlanmasını sağlar. RESET engelini farkedip, $FD50 adresine sıçradığımızda, $0200-$0400 bölgesi olduğu gibi temizleniyor ve bilgisayar kilitleniyor. $041D'den sonrasında, geçen sayıda anlattığımız işlemler yapılarak turbo çalışmaya hazır hale getiriliyor. Bu kısımda daha birçok değişik zorluk çıkarabilecek yeriniz var. Yapabileceğiniz hinliklerden bir kaçını burada sıralayım:

1) Engelleyemediğiniz kartuşlara suikast düzenleyebilirsiniz. Yani, belleği birbirini tutmayan, ilgisiz bir sürü sayıyla doldurabilirsiniz ($0801- $FFF7 arasını doğal olarak). Bu sayede hem bellekte olabilecek bir program parçacığını yok edersiniz, hem de tüm korumaları atlatan kartuşların, kayıt sırasında programı fazla sıkıştıramamasını sağlarsınız.

2) NMI vektörünü bir RTI'yı gösterecek şekilde ayarladıktan sonra, yapay olarak bir NMI yaratırsınız. Bu sayede EXPERT kartuşunun daha ileri gitmesini engellersiniz. Bunu yapabilmek için, $DD0E'ye $11 verdikten sonra sırasıyla $DD0E'ye ve $DD0D'ye $83 değerini girmeniz gereklidir. Bunlardan başka, engelleyebildiğiniz tüm kartuşları engelleyin. (Bu arada eğer arkadaşlarınızla kartuş engelleme sistemlerinizi paylaşmak isterseniz, dergimize kullandığınız yöntemleri açıklayan bir mektup yollayın.) Neyse, konuyu fazla dağıttık. Gene rutinin açıklanmasına dönelim. $0400'de işimiz bittikten sonra

$02A7'de bulunan programa da sıçrıyoruz. Burada bulunan program ise şöyle:

Ne yazık ki $0300'ü tamamen düzeltecek bir rutin bulmaya vaktim yok. Bu sebeple, geri kalan değerleri kendim düzeltiyorum. İlk başta kullandığımız rutin ($E453) yalnızca $030B'ye kadar olan adreslerin yerini normale çeviriyordu. $0324'den sonrasının değerleri $FD30 adresinden bulunabildiği için, bu değerleri $0314'e taşımakta zorlanmazsınız sanırım. Daha sonra sıçrayarak hem ekranı, hem de koruma programımızı bellekten temizliyoruz. Böylece bu aşamadan sonra programa müdahale edecek kişiler, ne tür korumalar kullandığımızı asla öğrenemeyecekler. Daha sonra da bildiğimiz şekilde programın yüklenmesini sağlıyoruz. Burada son bir şey daha söylemek istiyorum: Programınızın koruma kısmında elinizden geldiği kadar çok standart dışı komut kullanın. Mesela $F4 kodlu bir komutu monitör programınız büyük bir ihtimalle “227” şeklinde gösterecektir. Fakat program içinde bu komutla karşılaşıldığında 2 bayt süren bir NOP olarak işlem yapılır. Herhangi bir programda birden fazla bayttan oluşan (örneğin Jsr $E453) bir komutun başına $F4 $A9 baytlarını eklerseniz, programın büyük bir kısmı saçma sapan bir şekilde görünecektir. Fakat işleyişinde herhangi bir değişme olmayacaktır. Bu tür standart dışı komutların tam listesini 15. sayımızın Döküm Eki'nde bulabilirsiniz. Gelecek sayımızda, turbomuzun asıl önemli özelliği olan interrupt yükleme'den nasıl faydalanabileceğimizi anlatacağım. Fakat, bu aydan sonra, tekrar turbonun korunmamış halini kullanacağım. Çünkü, korunmuş bir programı incelemek sizin için oldukça zor olabilir (özellikle yeterli destek programınız yoksa). Daha sonra, bu yazıda gösterdiğim yöntemleri kullanarak turbonuzu istediğiniz gibi kullanabilirsiniz. Gelecek aya kadar hoşçakalın. 19

Klavyeyle gezinmek için ← ve → tuşları.