İçin Püf Noktaları (6)

RUN-STOP/RESTORE

TUŞUNU ENGELLEME

Bildiğiniz gibi çalışan bir programı RUN-STOP/RES-TORE tuşlarına basarak kırabilirsiniz. Bu tuşların etkisini

POKE 808,PEEK (808)-3 komutu ile kaldırabilirsiniz. Dilerseniz aşağıdaki ufak programı yazarak POKE komutunuzun etkisini görün.

410 POKE 808,PEEK (808)-3
20 PRİNT “Bu bir denemedir”;
30 GET AS:İF A$ THEN PRİNT:PRİNT“Program
durduruldu”
POKE792,51:POKE793,255

komutlarını kullanarak sadece RESTORE tuşunu da etkisiz hale getirmeniz mümkün. Ufak bir BASIC programı ile de RUN-STOP tuşunu etkisiz hale getirebilirsiniz.

10 TRAP 100
20 PRİNT “Bu bir denemedir.”;
30 GOTO 20
400 PRİNT “RUN-STOP tuşuna basıldı.”
4140 RESUME NEXT

SAVE KOMUTUNU ENGELLEME

SAVE vektörü de hafızanın üçüncü sayfasında bulunur, 818/819 LIST komutunu engellemekte kullandığımız teknikleri burada da kullanabiliriz, mesela;

POKE 818,61:POKE 819,255

komutu ile bilgisayar kendisine SAVE komutu verildiğinde açılış ekranına dönecektir. POKE komutları ile programlarımızı nasıl koruyabileceğimizi gördük, şimdi de bir iki ufak BASIC programı vasıtası ile programlarımızı nâsıl koruyabileceğgimizi görelim. İşe program döküm ekinde bulacağınız 4 numaralı programı yazarak başlayın. Yazdığınız programı RUN 63000 komutu ile çalıştırabilirsiniz. Herhangi bir BASIC programınızın sizin için önemli olan satırlarını gizlemek istediğinizde bu satıra herhangi bir komut yazmadan evvel beş tane kolon yazın, daha sonra o satırda bulunması gereken komutları yazabilirsiniz. Gizlemek istediğiniz satırlara örnek olarak üstünde programın çalışmasını sağlayacak olan şifreyi taşıyan bir satırı örnek verebiliriz. Gizlemek istediğiniz satırları olan bir programınız varsa programınızın sonuna 63000'inci satırdan evvel bizim verdiğimiz programı ekleyin ve gizlenecek satırların başına beş kolon koyun. İlk olarak RUN 63000 komutu vererek bizim programımızı çalıştırdığınızda önünde beş kolon bulunan satırlar görünmez olacak, sadece satır numaraları kalacaktır. DELETE 63000- komutunu verdikten sonra programınızı bu hali ile tekrar SAVE edin. Yalnız dikkat etmeniz gereken nokta, eğer programınızın orijinal halini saklamazsanız bir daha gizlediğiniz satırları kendinizin bile göremeyeceğidir. Gizleyici Programımızın açıklamasını yapalım: 63000: BASIC'in başlangıcı LI değişkenine saklanıyor. Eğer bu programı C64'te çalıştırmak istiyorsanız LI—45 yerine LI—-43 yazmanız gerekir. 63020: Programdaki her byte'ı tek tek kontrol etmek yerine program bağlantılarına bakıyoruz, böylece programımız daha hızlı çalışıyor. 63030: LI-0 olduğunda program sona erer. 63040: Ekrana o anki satır numarası yazılıyor. 63050: X$ değişkeninde korunmuş satırların numarası saklanıyor. 63060: Yeni başlayacak satır LI değişkeninin içeriğine eşittir. 63070: İncelenmekte olan satırın ilk beş karakterine bakılıyor. 63080: Her normal satır, yani başında beş kolon bulunmayan satır FL değişkenini bire, | değişkenini de sekize eşitler. 63100: Eğer FL— 1 ise bir sonraki satıra geçeriz, aksi takdirde üzerinde çalıştığımız program bitmiş de- Mektir. 63110: Üzerinde çalışılan satır korunur, satırın ilk kolonuna sıfır değeri gelir. Program sıfır değerini gördüğünde bunu satırın sonuna gelinmiş kabul eder, böylece o satır varolmasına rağmen gösterilmez.

Bildiğiniz gibi BASIC'te satır numaraları birbirlerini izleyen sırada artarlar, ancak 64000'den büyük satır numaralarını kullanmak mümkün değildir. Bu du- TUMU program koruma tekniğinde avantajımıza kullanabiliriz. Program döküm ekinde bulacağınız 5 numaralı programı korumak istediğiniz programınızın sonuna ekleyin. RUN 63000 vererek programımızı çalıştırın, sizden sıra ile saklayacağınız programın satır numaralarını değiştirme, aynen bırakma, bu işlemlere son verme seçeneklerinden birirti seçmeniz istenecek. Ancak programımızın bazı sakıncalı tarafları bulunuyor:

* GOTO ve GOSUB satır numaraları hesaplanmıyor. * Eğer 64000'den büyük bir satır numarası girerseniz bir daha bu satırı silemezsiniz. * 1'den küçük satır numaralarına atlama yapa: mazsınız.

Programımızın çalışma prensibi oldukça basit: Programımız bütün BASIC satırlarını kontrol ediyor, eğer satır numarası değiştirildiyse yeni satır numarasını ZN değişkenine veriyor ve bu değer 63110 numaralı satırda yüksek/alçak byte düzenine göre yerleştiriliyor. Daha sonra yeni değer BASIC hafıza bölgesinde eski değerin üzerine POKE yapılıyor. Koruma işlemini gerçekleştirdikten sonra DELETE 6300- komutu ile koruma programını sildikten sonra programınızı yeni hali ile SAVE edin. Artık programınız yüklendiğinde sizin vermiş olduğunuz satır numaralarına sahip olacaktır. Eğer yeni satır numarası ola- Tak 65535 verirseniz, program bu satıra geldiğinde END komutu ile karşılaşmış gibi olur, bundan başka bu satır yok olarak göründüğünden bu satırda yazılı olanları da görmek mümkün olmayacaktır. Programlarımızı çeşitli POKE komutları kullanarak veya bazı ufak programcıklar vasıtası ile nasıl koruyabileceğimizi gördük. Son olarak programımız LIST edildiğinde LIST edene nasıl sürprizler hazırlayacağgımızı göreceğiz. Aşağıdaki komut grubunu direkt modda yazın.

KEY1,CHRS(27) 4 CHRS(79) 4 “<RVSON > <SHIFT-
M> <RVSOFF >” 4 CHRS(34) 4 CHRS(20)

Şimdi programınızı yazarken istediğiniz yerlerde F1 tuşuna basın. Programınızı LİST ettiğinizde oldukça ilginç bir görüntü ile karşılaşırsınız. Programınız LIST edildiğinde bir mesaj çıkmasını isterseniz, aşağıdaki örnekleri inceleyin.

40 REM”FA <UP ><RVSON> Bu bir denemedir.
400 REM”FA <CTRL4*
200 >

Şimdiye kadarki program koruma yöntemlerimizde koruma işlemini ya program üzerinde yapmaya çalıştık ya da POKE komutları ile gerçekleştirmeye çalıştık. Bir başka yöntem olarak da disket üzerinde gerçekleştireceklerimiz ile kopyalama işlemini oldukça zorlaştırmaya çalışacağız.

İlk yöntem olarak disket üzerindeki bir TRACK'ı tah- TİP edeceğiz, ancak bu işi yaparken disket sürücüye sizin için önemli olmayan bir disket takın. Aşağıdaki programı çalıştırdığınızda sizden tahrip etmek istediğiniz track numarası sorulacak. Bu track'de herhangi bir program bulunuyorsa çalışmaz hale geleceğinden bir disket monitörü ile kindinize boş bir track bulmanızı tavsiye ederiz. Bu işlemin sonunda disketiniz kopya edilmeye çalışılınırsa oldukça zor ve yavaş kopya edilir.

410 İNPUT
20 OPEN 1,8,15
30 OPEN
4.“U4 2 O" TR;O
SO PRİNT 41,“M-E“CHRS(163)CHRS(253)

Üstteki programı kullanarak hem C428'de hem de C64'te disketinize hata yazdırabilirsiniz. Disket üzerinde uygulayabileceğimiz diğer bir yöntem de disketinizin DİRECTORY'sini silmektir. Böylece disketinizin içeriğini meraklı gözlerden korumuş olursunuz. Yalnız aşağıdaki programı çalıştırdıktan sonta disketinizin directory'si tamamen silineceği için disketinizde neler olduğunu bir yere yazın.

410 OPEN 1,8,3,
20 OPEN
30 PRİNT # 4,CHRS(20)CHRS(20)CHRS(20)
CHRS(0)CHRS(0)
40 PRINT # 18”
50 PRİNT
60 END

Bütün yaptığımız directory'nin başına bir sıfır yazmak. Siz LOAD"$”,8 ile yüklediğinizde yazdığımız sıfir program sonu gibi davranıyor, böylece LIST ettiğinizde hiçbir şey göremiyorsunuz.

ÖNEMLİ ADRESLER

Şimdi C4128 modunda önemli olan bazı adresleri göreceğiz. İlk olarak Makine Dili ile ilgilenenler için makinenin sıfırıncı sayfasında kullanabilecekleri yerleri söyleyelim.

$FA ile $FF arası kullanıma açıktır. $24'ten $2C'ye kadar, $50'den $55'e ve $59'dan $62'ye kadar olan bölgeler de geçici kullanımlar için müsaittir.

Sıfırıncı sayfanın içeriğini hafızanın başka bir yerine kaydedip, bu kısmın kullanımından sonra sakladığınız değerleri yerlerine yerleştirmeniz mümkündür. Ancak sıfırıncı sayfada işlem yaparken özellikle aşağıdaki adreslere büyük dikkat göstermeniz gerekiyor, çünkü bu adresler (BANK 1) işletim sistemi veya BASIC tarafından kullanılıyor. 59-60 O anki BASIC satir Dikkat etmeniz gereken adresler: numarası 0041-0042 — 65-66 — O anki DATA satır $15, $48, $2D, S3E, S90'dan SPA, numarası SAO'dan $A2, SA7, SAB, $B4'den $B6, SBD, $CO, 0047-0048 — 71-72 — O anki değişken ismi sC8'den $D8. 73-74 — O anki değişkenin adresi Aşağıda bazı önemli adresleri ve ne işe 0074-0075 — 146-1417 Otomatik satır artış yaradıklarını göreceğiz: aralığı 0077 119 Renk kaynak numarası HEX 0084 132 Multicolor 1 0005-0009 5-9 SYS, yazmaç değerlerinin — 0085 133 Multicolor 2 saklanması (A,X,Y.SR/SP) 0086 134 Grafik önplan rengi — 45-46 Belirteç: BASIC'ın 0090 444 — Durum değişkeni ST başlangıcı (BANK 0) 0098 152 Açık dosya sayısı 002F-0030 Belirteç: Değişkenlerin 0099 153 — Giriş aracı (normal başlangıcı olarak 0) 0031-0032 49-50 Belirteç: Dizilerin 00B2-00B3 178-179 Belirteç: Teyp başlangıcı tamponunun başlangıcı 0033-0034 54-52 Belirteç: Dizilerin sonu 00B7 183 Dosya ismindeki harf 0035-0036 — 53-54 Belirteç: Karakterlerin sayısı depolanması (aşağı 00B8 184 © anki dosya doğru) 00B9 185 O anki araç 0039-0034 57-58 Belirteç: sınırı 00DO 208 — Klavye tamponundaki

$0A20 2592 Klavye tampon büyüklüğü 2816-3007 Kaset tamponu $0C00-$0DFF 3072-3583 RS-232 giriş-çıkış tamponları $1000-$4009 4096-16393 Programlanmış tuşların uzunluğu $400A-$4351 Programlanmış tuşların içeriği $41E9-$44EA LIGHT PEN değerleri Kullanılmıyor $4210 16912 BASIC'ın sonu $421B-$424F 16923-16975 RND seed değeri $4300-$47FF 17152-18431 Kullanılmıyor $1C00-$FDFF 7168-64511 BASIC RAM hafızası (text) Ekran hafızası (Hİ-RES) $4000-$FDFF 16384-64511 BASIC RAM hafızası (Hİ-RES) $0400-$FDFF 1024-64511 BASIC değişkenleri, diziler, karakterler (BANK 1) $D000-$DFFF 53248-57343 Karakter üretim ROM'u (BANK 14) $4000-$CFFF 16384-53247 ROM: BASIC (BANK 15)

DO00-DO2E 53248-53294 40-kolon video çip 8564 (BANK 15) DA400-D41C 54272-54300 SID 6581 (BANK 15) D600-D604 54784-54785 VIC-II (8563) (BANK 15) 57344-65279 ROM: KERNAL (BANK 15) Yukarıdaki tabloda yer yer BANK sözcüğü geçmekte, nedir bu BANK? C128'de hafızanın çeşitli düzenlenme şekillerini BANK ile ifade ediyoruz. Bu metodda hafıza birimleri birbirlerinin üstünde bulunuyor, daha doğrusu iki hafıza harf sayısı BANK'ı aynı adres aralığında yer alıyor. Ama bir 212 Basılan tuş kodu. eğer kerede sadece BANK'lardan birisi kullanılabiliyor. tuşa basılmamışsa — 88 iş 00D6 214 Klavyel/Ekran'dan girdi C4128'in adresinin oldukça ilginç bir görevi 00D7 215 40/80 kolon: 0-40 kolon var: Bu adresin içerdiği değere göre Cb4 O0E4 228 O anki ekran aşağı modunda mı, C128 modunda mı, yoksa CPM ile marjını mi çalıştığımızı anlıyoruz. Bu adreste yer alan O0E5 229 O anki ekran yukarı değerin bitleri çok önemli düzenlemeleri ifade marjını ediyor. O0E6 230 O anki ekran sol marjını BİTO : O00E7 231 — O anki ekran sağ marjını — BİT 1.2 : Bu bitlerin fonksiyonu yok O0EB 235 Ekran satırındaki kursörün — : FSDIR kontrol biti yeri BİT 4,5 : İki yönlü olan bu bitler, kartuş girişini O0EC 236 Kürsörün bulunduğu sıra veya EXROMIİN kullanımını kontrol eder, 237-238 Maksimum ekran satırı ve eğer kullanılıyorsa kontrol C&4 moduna kolonu geçer O0F4 241 Karakter rengi BIT6 : Bu bitin değeri C64 veya C128 00F9 249 Zil sesini kapatma modlarının seçimini yapar. 0-C128 250-255 Kullanılmıyor 1-C64 0312-0313 — 786-787 Kullanılmıyor Makine RESET edildiğinde veya ilk O34A-0353 — 842-851 Klavye tamponu açıldığında C428 modu aktiftir. 03D2-03D4 Kullanılmıyor BİT7 : RESET sırasında 40/80 kolon tuşunun 03E£2 994 Arkaplan rengi basılı olup olmadığını kontrol eder. 0400-07E7 — ekran hafızası 0580 kolon 1-40 kolon ni