C-128 İçin Püf Noktaları (5)
Klavye
BASIC komutları GET, GET KEY ve INPUT dışında özellikle Makine Dili kullanıcıları için klavyeyi okumanın çok çeşitli yolları bulunmaktadır. SIFIRINCI SAYFADA (ZERO PAGE) 213 numaralı adreste bilgisayar son basılan tuşun değerini saklar. Burada saklanan değer ASCII değeri değildir. Bunun yerine bilgisayarın ROM'unda yer alan tablodan çıkarılmış değerlerdir. C64 son basılan tuşun değerini 203 ($CB) adresinde saklar. Bu değerler C128'de yer alan yeni tuşlar yüzünden her zaman C64'tekilerle aynı değildir. Bir başka değişiklik de hiçbir tuşa basılmadığında C64'te 64 değeri saklanırken C128'de 88 değeri saklanır. Aşağıda C128'in yeni tuşlarının değerlerini bulabilirsiniz.
HELP-tuşu 64
TAB-tuşu 67 ESC-tuşu 72 LİNE FEED 715
Klavyenin alt kısmında RETURN tuşunun yanında bulunan cursor tuşlarından başka üst kısımda da cursor tuşları bulunuyor. Bunların değerleri ile alttaki cursorların değerleri farklıdır.
Cursor Yukarı 83 Cursor Aşağı 84 Cursor Sola 85 Cursor Sağa 86
C128'de bir de nümerik tuş takımı bulunuyor bu tuşların da değeri klavyedeki diğer sayısal tuşların değerlerinden farklı.
Tuş Klavye Nümerik Tuş Takımı 1 56 72 2 59 68 3 8 79 4 44 69 5 16 66 6 19 77 7 24 70 8 27 65 9 78 0 50 81 . 44 82 ENTER 4 76 * 40 73 - 43 74
Joystick Portu'nun 213 ($CD) adresine değişik bir etkisi var ama ne yazık ki bu adres joystick'i okumak için yararlı değil. Eğer joystick'i ileri iterseniz bu adresteki değer değişmez.
Joystick Durumu Adresin değeri Yukarı 88 ALT tuşu basılmış gibi Ortada 88
92 SHİFT tuşu basılmış gibi
Ateş tuşu basılı Sola 90 CTRL tuşu basılmış gibi Sağa 91 Aşağı 88
Aşağıdaki ufak programla BASIC 7.0'daki GETKEY komutunu gerçekleştirebilirsiniz:
10 IF PEEK(213)—88 THEN 10
20 GET A$
30 PRİNT AS
40 GOTO 10
Aynı programı Makine Dilinde üç satırda yazabiliriz:
LDA $D5
CMP $58
Loop
Döngüden çıktığımızda A yazmacında basılan tuşun değeri bulunur.
Geçen bölümde çubuk grafikleri C128'in hazır grafik komutlarını kullanarak gerçekleştirdik. Bu bölümde daire grafik yapacak bir programımız var. Programın kendisini program döküm ekinde bulabilirsiniz. (Program 1) Programımızın ana hatlarını açıklayalım: 100-140 Kullanılacak renkler ayarlanıp ekran temizleniyor. 170-190 Programda kullanılacak diziler hazırlanıyor.
200-260 Seçtiğiniz madde sayısınca verileri giriyorsunuz. 270-370 Alınan veriler işleniyor. 380-410 Ekran temizlenip grafik ekranına geçiliyor ve daire çiziliyor. 420-680 Grafik çiziliyor. 730-780 Programın nasıl devam etmesi gerektiği kullanıcıdan soruluyor. Program döküm ekinde 6 numaralı programı yazarak bilgisayarınızda hem analog hem de dijital bir saat sahibi olabilirsiniz. Programın açıklanması: 130-220: Saat çiziliyor. 230-430: ZAMAN yazısı çiziliyor. 440-570: Saati kuruyoruz. 580-800: Her defasında zamanı yeniliyor ve her saniye sonunda ses çıkartıyor.
KENDİNİ DEĞİŞTİREN PROGRAMLAR
Bir program yazarken genellikle programımızı belirli bir konuyu halledecek şekilde hazırlarız. Bizim amacımız hazırladığımız programın çalışırken kendisine yeni program satırları eklemesi, yani kendisini değiştirmesidir. Sanırım çalışan bir programa yeni program satırları eklemek teknik açıdan oldukça zor, ancak biz daha kolay bir yol kullanacağız. İlk olarak programı durduracak sonra ekleyeceğimiz satırları ekleyip programı tekrar çalıştıracağız. Bütün bu işleri yapmamızda klavye tamponu büyük rol oynuyor. Aşağıdaki kısa programı yazıp çalıştırın.
10 TP-842
20 POKE
30 POKE TP4-
40 POKE TP <4 2,ASC(“S”
50 POKE TP 4 3,ASC('T”
60 POKE TP-4-4,13:REM
70:
80 POKE 208,5
90 END
Üstteki ufak programı çalıştırdığınızda programın devamlı olarak kendisini LİST ettiğini göreceksiniz. Programımız 20-50 satırlar arasındaki komutlar ile klavye tamponuna LİST komutunu gönderiyor, 60 numaralı satırda ise tampona RETURN tuşu gönderiliyor. 80 numaralı satır ile klavye tamponuna beş karakter gönderdiğimizi belirtiyoruz. Programımız nasıl çalışıyor? Program 90'ıncı satıra geldiğinde çalışmasını bitiriyor, ancak daha evvel klavye tamponuna konmuş olan LİST komutu programın LİST edilmesini sağlıyor. İsterseniz siz de programı değiştirerek LİST yerine RUN komutunu yazdırın, bu arada en sona RETURN tuşunun kodunu eklemeyi unutmayın.
GİRİŞİ
Şimdi de yazımızın başında belirttiğimiz gibi çalışan bir programı değiştirelim. Program döküm ekin-
) ) ) RETURN tuşu deki programı yazıp çalıştırmadan evvel SAVE edin. Programımızın 10-50 satırları arasında formülü kullanıcıdan İstiyoruz. 60-90 arası satırlar yeni bir satır üretilmesini sağlıyor. 100-120 satırları ile klavye tamponuna RETURN tuşunun ASCİİ kodu olan 13'ü gönderiyoruz ve 130'uncu satırda POKE 208,4 satırı ile klavye tamponunda dört değer olduğunu belirtiyoruz. Bundan sonra programımız otomatik olarak 500'üncü satırdan başlıyor,
DATA SATIRLARI ÜRETİMİ
Özellikle makine dili bir programı BASIC programımıza DATA satırları olarak eklemek istediğinizde çok faydalı olabilecek bu programı, Program Döküm Eki'- nde bulabilirsiniz. Programımızı yazımızın başında söylediğimiz yöntemler ile yaptığımız için detaylı bir açıklamasını vermeyeceğiz. Programı yazdıktan sonra çalıştırmadan evvel muhakkak SAVE edin, çünkü program çalışmasını biftirdiğinde kendisini de tamamen silmiş olacak. DATA satırları haline getireceğiniz makine dili programın başlama ve bitiş adreslerini bilmeniz gerekiyor. Bundan başka hafıza düzenlemesini de (normalde BANKO) bilmeniz lazım. Bu bilgilerden sonra ilk satır numarasının kaç olması gerektiğini ve satırların kaçar kaçar artması gerektiğini de programa vermeniz gerekiyor. Yalnız ilk satır numarası olarak en küçük 1300 verin, aksi takdirde program çalışması sırasında kendisinin üstüne yazar. Programımız çalışmasını bitirdiğinde kendisini DE-LETE kornutu ile silip öyle duracak. Program çalışmasını bitirdikten sonra istediğinize göre RENUMBER komutu ile program satır numaralarını değiştirebilirsiniz. Şimdi bazı adreslerin işlevlerini görelim.
C128 Anlamı 208 198 Klavyeden gelen karakterlerin sayısı. 842-851 631-640 Klavye tamponu; maksimum 10 byte saklanabilir. 2592 649 Klavye tamponunun maksimum büyüklüğü (410)
çalışan bir programı da kendi kendisini değiştirecek şekilde programlamak mümkün ancak modunda bunu gerçekleştirmek çok daha kolay, çünkü C64 modunda iken program satırlarını değiştirmeniz halinde tüm değişkenler sıfırlanır. C128'de ayrı bir hafıza bölgesi (BANK 1) değişkenler için ayrıldığı için değişkenlerin sıfırlanması sorunu ile karşılaşmıyoruz. Gelelim klavye tamponuna, klavye tamponu genelde bize yeterli olan on byte uzunluğundadır, eğer on byfe size yeterli olmazsa kullandığınız komutların kısa şekillerini kullanabilirsiniz. Diyelim buna rağmen on byte ihtiyacınızı karşılamadı, o zaman TAB-bit hafızasını silerek klavye tamponunu maksimum yirmi byte uzunluğa çıkarabilirsiniz. Ancak klavye tamponu yirmi byte uzunluğa çıktıktan sonra TAB tuşu doğru olarak işlemez. Klavye tamponunun genişletilmiş hali ile bu bölge hafızada 842-861 adresleri arasında yer alır. Klavye tamponunu POKE 2592,20 komutu ile değiştirebilirsiniz.
PROGRAM KİLİTLERİ
Yaptığımız programların başkaları tarafından kurcalanmasını veya kopya edilmesini İstemiyorsak r.e yapabiliriz? İlk olarak POKE komutları vasıtası ile, daha sonra ise özel programlar aracılığı ile programlarımızı kilitlemeye çalışacağız. Hemen belirtelim, göreceğimiz koruma teknikleri sadece bir önlem niteliğindedir programınızı yüzde yüz bu yöntemlerle koruyamayabilirsiniz ama hiç olmazsa bu İşle uğraşan bir kişinin işini oldukça zorlaştırırsınız. POKE komutları kullanarak yapacağımız program kilieemesinin ufak bir dezajantajı var, program içinde kullandığınız POKE komutlarının işe yarayabilmesi İçin önce programın çalışması gerekir.
LIST KOMUTUNU ENGELLEME
C128'de hafızanın üçüncü sayfasında LİST komutu için olan vektörü işaret eden bir göstergeç vardır. Bu vektör 774/775 (80306/$0307) adreslerine sahiptir.
POKE 774,61:POKE 775,255
komutlarını yazın ve LİST komutunu verin. Karşınızda açılış ekranını bulacaksınız. Şimdi;
POKE 774,38:POKE 775,255
komutunu girip LİST komutunu yazdığınızda sadece programınızın satır numaralarını göreceksiniz. Gördüğünüz gibi göstergeçleri değiştirerek inanılmaz şeyler başarabilirsiniz.
65