Bu sayfadaki yazılar
Sayfanın metni
Sayfa 54
Komut Kısaltması İşlevi —
FORWARD X FD X Kaplumbağayı X kadar ilerletir. Kaplumbağayı X kadar geriletir. Kaplumbağayı X açısı kadar sağa döndürür. Kaplumbağayı X açısı kadar sola döndürür. LOGO'ya sizin X adlı ve :Y parametresini alacak bir işlem tanımlamak istediğinizi bildirir ve sizi Editör'e sokar.
BACK X BK X
RIGHT X RT X
LEFT X
TOX:Y yok
PRINTOUT TITLES POTS Tanımlayıp diskete kaydetmiş olduğunuz işlemlerin listesini verir. Y komutlarını X kadar tekrarlar. O ana kadar yapmış olduğunuz çalışmaları adlı bir dosyada saklar. Diskete kaydetmiş olduğunuz bütün çalışmaların listesini verir. Daha önce adı altında save edilmiş çalışmaları disketten okur. Yazdığınız herhangi bir işlemin kalıcı bir tanıma dönüşmesini sağlar. (Aynı şeyi RUN/STOP tuşuna basarak da gerçekleştirebilirsiniz).
REPEAT XIYI
SAVE “X yok
CATALOG yok
READ “X yok
CTRL-C yok
IF X THEN Y ELSE Z Basic'tekinin aynı. X koşulu doğru ise Y işlemi yanlışsa Z işlemi yapılır. (Komut ELSE'siz de kullanılabilir). “X nesnesine Y değerini verir. Yoksa yaratır. Y bir sözcük (sayı ya da karakter zinciri) ya da liste olabilir.
yok
MAKE “X Y yok
Bundan böyle örnek programlarımızda komutlarını kullanacağız.
Bazı Kolaylıklar
Buraya kadar aslında size LOGO'nun kullanımından çok mantığını öğrettik. Şimdi ise LOGO'nun kullanılmasını sadece mümkün değil, alabildiğine kolay kılan bazı temel komutları göreceğiz. Normal olarak LOGO disketini yüklediğinizde, karşınızda tek renkli (genellikle koyu mavi) bir ekran belirir. Bu ekrana metin ekranı (textscreen) diyoruz. Bu noktada karşınızda kaplumbağa filan göremezsiniz. Kaplumbağaya ulaşmanın üç (daha doğrusu dört) yolu vardır. Çok basit olarak “kaplumbağayı göster” anlamında SHOWTURTLE (kısaltması ST) diyebilirsiniz. Bu takdirde metin ekranı ancak beş satır içerecek kadar küçülecek, üstünde çizim (DRAW) ekranı belirecektir. Aynı sonuca DRAW komutunu vererek de ulaşabilirsiniz. Bu şekilde parçalanmış ekrana SPLITSCREEN diyoruz. Dolayısıyla, aynı sonuca SPLITSCREEN diyerek de ulaşabilirsiniz. SPLITSCREEN'in kısaltması yok. Onun yerine F3 tuşunu kullanıyorsunuz. Bazı durumlarda yapacağınız çizim parçalı ekran (splitscreen) için fazla büyük gelebilir. Bu takdirde, FULLSCREEN komutunu vererek (ya da tuşuna basarak), beş satırlık metin ekranından tamamen kurtulabilirsiniz. Bazı durumlarda ise çizimle hiç ilgilenmiyor olabilirsiniz. O zaman da TEXTSCREEN komutunu vererek (ya da F1 tuşuna basarak) çizim ekranından tamamen kurtulabilirsiniz. Şimdi diyelim ki DRAW komutunu verdik, parçalı ekrana geldik ve istediğimiz herhangi bir işlemin adını yazarak kaplumbağaya bir şekil çizdirdik. Şimdi de başka bir şekil çizmek istiyoruz. Ne yapacağız? İki seçenek var. DRAW derseniz başladığınız yere geri dönersiniz. Yani daha doğrusu ekran silinir, kaplumbağa da ekranın ortasındaki yuvasına geri döner. CLEARSCREEN (kısaltması CS) komutunu verirseniz, ekran silinir ama kaplumbağa neredeyse orada kalır. Evet, mantığını ve bu temel komutları öğrendikten sonra artık LOGO'yu kullanmaya başlayabiliriz.
LOGO'nun Renkleri
Geçtiğimiz sayıda bütün LOGO terimlerinin ya bir işleme ya da bir nesneye (ya da onun içeriğine) işaret ettiğini görmüştük. Ayrıca bazı işlemlerin temel, bazılarınınsa türetilmiş olduğunu zaten biliyorsunuz. Örneğin FD ya da RT gibi işlemler temel ya da asli (primitive) işlemlerdir; sizin tanımlamalarınızdan bağımsız olarak vardırlar. Dolayısıyla LOGO disketinizi her yüklediğinizde, hemen bu işlemleri kullanmaya başlayabilirsiniz. Oysa türetilmiş işlemler, başka bir deyişle sizin tanımladığınız işlemler, ancak sizin tarafınızdan önce SAVE edilmiş, daha sonra da çalışma seansınız sırasında READ edilmişse, LOGO tarafından tanınacaktır. Şimdiye kadar görmemiş olduğumuz, ancak kullanılması en kolay ve zevkli olanları, ekran ve kaplumbağanın (daha doğrusu, hem kaplumbağanın, hem de kaplumbağanın çizdiği çizgilerin) renklerini belirleyen işlemlerdir. Önümüzdeki sayıda bunlara değineceğiz. Şimdilik hoşçakalın... O
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 55
AYHAN KALAYLIOĞLU
Geçen sayıda yazımız makine dilindeki grafik programın BASIC formülasyonunu yapamadan bitmişti. Bu sayıda kaldığımız yerden devam ediyoruz. İşe girişmeden önce biraz düşünüp olayın genel kurallarını meydana çıkaralım. 0'dan 7'ye, 8'den 15'e, 16'dan 23'e vs. olan X-koordinatları aynı byte'ın değişik bitlerine karşılık geliyor. X-belirten sayının alttaki üç bitini dikkate almazsak geri kalanları buradaki gruplar için olduğu gibi aynı. Yani, bellek adresini hesaplarken X-koordinatının en alttaki üç bitini kullanmıyoruz. Bunun için biz bu bitleri silelim. AND komutu, burada imdadımıza yetişecektir.
X AND %11111000
Bu fonksiyonun sonunda, X'in en alttaki üç biti silinmiş halini elde ederiz. BASIC'deki satır şöyle bir şey olacaktır:
PRINT X AND 248
Bir de Y-koordinatı ile, gerekli olan byte'ın adresi arasındaki ilişkiyi bulmaya çalışalım. Y-koordinatı 0 ile 7 arasında ise bu değer doğrudan toplanıyor. Eğer, 8 veya daha büyükse, Y-koordinatının en alttaki üç biti silinmiş halinin 40 katı toplanıyor. Makine dilinde yazmadan önce bir de X-koordinatının büyük değerler alabileceğini hatırlayalım ve ona göre gerekli değişiklikleri yapalım. X değerini XH ve XL adlı iki sayıya bölüştürelim. XH'ın sıfır ile bir değerinden başka bir değer alamayacağı aşikâr. X-koordinatının en yüksek değeri 319 hekzadesimal olarak $13F veriyor. Yani XL $3F, XH $01 değerlerini alıyorlar. Tüm analizimizi bir formülde toplarsak:
PRİNT XH*256-4 (XL AND 248) * (Y AND 7) * 40*(Y AND 248)
Bu formülü makine diline çevirmemiz gerekiyor. Bu arada, makine dilinde yazacağımız programa koordinatları hangi registerleri kullanarak geçireceğimizi belirleyelim:
Y -> Y-Koordinatı A -> XL-Koordinatı X -> XH-Koordinatı
Program içinde, X-koordinatını saklamak için iki byte'lık bir hafıza bölgesini kullanacağız. Y-koordinatı ile ilgili bilgiyi ise Y-registerinde bırakacağız. İşleme, toplamaları yapabilmek için bir 16 bitlik belleğe daha ihtiyacımız var.
100 — EO XL .EÇX 120— — .EÇ SUML-$FC 130 — .EO SUMH - $FO 140 — — .BA $C460 150 — STA XL 160— — STXXH 170 — TYA 180 — — AND : $F8
Gördüğünüz gibi, en sondaki terimden hesaplamaya başladık bile. Fakat, hemen ufak bir sorun çıktı karşımıza. Ana işlem ünitemizin çarpma işlemleri için öngörülmüş komutları mevcut değil. Bu yüzden biz de başka bir yol izleyeceğiz. Biraz gerilere giderek, belli bir değerin içeriğini sola kaydırarak bu sayıyı iki ile çarptığımızı hatırlayalım. Bu kurala uygun olarak, 40'la çarpma olayını parçalara ayıralım:
A*40 A)*2*2*2
İşlemleri bu sırada yürütürsek, akümülatörün önce iki katını, sonra dört katını ve kendisini de toplayarak beş katını elde ederiz. Bu sayıyı da üç kere peş peşe iki katını alırsak en sonunda akümülatörün 40 katı değeri elde ederiz.
190 — STA $FE 200 — STA SUML 210 — LDA 220 — STA SUMH ASL SUML 240 — ROL SUMH 250 — ASL SUML 260 — ROL SUMH
Bit kaydırma işlemini 16 bit üzerinden yaptık. Bunu, yüksek değerli byte'ı kaydırma için 'ROL' komutunu kullanarak becerdik. Böylece, düşük değerli byte'ın 'ASL' komutu ile kaydırılması sonucu carry'ye çıkan 7'nci bitini, yüksek değerli byte'ı 'ROL' komutuyla kaydırarak 0'ıncı bitin yerine aldık. Gördüğünüz gibi, herhangi bir bilgi kaybına meydan vermeden iki byte'ı bir arada tutup 16 bit üzerinden bit kaydırma işlemi yaptık. Şimdiye kadar yapılan işlemlerle, akünün dört katını elde ettik. Bu değere bir de akünün kendisini toplayarak, akünün beş katı değeri elde edelim.
2710 — CLC 280 — LDA SUML 290 — ADC $FE 300 — STA SUML 310 — LDA SUMH 320 — ADC : 0 330 — STA SUMH
Büyük ihtimalle, çoğunuz SUMH'ye yaptığımız sıfır toplama işleminin ne işe yarayacağını soracaklardır.