Commodore sayı 19, sayfa 59

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 59

AYHAN KALAYLIOĞLU

Hatırlayacaksınız geçen bölümün sonunda direkt modda şu satırı girmiştik:

SYS 50176: POKE 198,0: WAIT 198,1: SYS 50192

Satırı verdiğinizde ekranda renk cümbüşü içinde, randomize şekiller göreceksiniz. Herhangi bir tuşa dokunduğunuzda ise normal yazı ekranına döneceksiniz. Grafik modunda iken gördüğünüz saçma ve düzensiz şekiller, bilgisayarın ilk açıldığında oluşmuş rastgele değerlerdi. Demek ki şimdiki görevimiz, hem grafik ekranını hem buna ait renk ekranını silmek olacak. BASIC'te bu sorunu çözmek için, içinde POKE komutu bulunduran bir döngü yetecektir. Grafik ekranımızdaki her noktayı silmek istiyoruz. Bunun için bu bölgedeki her biti, daha da genellersek her byte'i sıfırlamamız gerekiyor. Döngümüzün başlangıç ve bitiş sınırları $E000'dan, SFFFF'e kadar olacaktır. (Aslında, bitiş adresimiz $FFFF değil $FF3F olacaktır. Çünkü grafik ekranımız 8192 değil 8000 byte büyüklüğünde. Fakat, bu noktada bunun bir önemi yok!) BASIC'- teki satırımız şöyle bir şey olacaktır:

FOR 1-57344 TO 65535:POKE 1,0:NEXT

BASIC'te mümkün olabilecek en yüksek hızı elde edebilecek şekilde formüle edilmiş bu satırın yürümesi aşağı yukarı 30 saniye sürüyor. Bu programın makine dilindeki karşılığının çok daha hızlı yürüyeceği aşikâr,

Hatırlayacağınız gibi, biz zaten bir döngü programlamıştık. O örneğin yaptığı işlem, karakter setini olduğu gibi ekrana çıkarmaktı. Tüm döngü

256 kere dönülüyordu; bu yüzden bu problemin çözümünde X- ve Y- indeks registerleri rahat rahat yetiyordu. Fakat, biz burada 8000 byte'ı silmek istiyoruz. İlk akla gelen çözüm olarak içiçe geçmiş iki döngü kulla: nabileceğimiz akla geliyor. Her zamanki gibi, gene önce BASIC'teki örneğimiz:

AD FOR X-0TO31 FOR Y-0TO255 POKE AD *4 Y,0 NEXT Y NEXT X

Basit bir deyişle, 8192 byte'lik bölgeyi 32 tane 256'şar byte'lik sayfalara (Page) ayırdık. Y-döngüsü içinde her seferinde 256 byte siliniyor. Bunun hemen arkasından AD değişkeninin değeri 256 kadar artırılıyor. Böylece bir sonraki sayfaya geçilip, oranın da silinmesi sağlanıyor. Büyük döngü 32 kere dönülüyor. Sonuç olarak 8192 byte'ı siliyoruz. Burada, fazladan silinen 192 byte'ın hiç bir önemi olmadığı için, program basit ve sade olarak kurulmuştur. Şimdi, bu döngüleri bir de makine dilinde formüle edelim:

100- .EÇ AD — $E000 110- LDA O 120- LDX O 130- LDY * O 140- STA AD,Y 150- INY 160- BNE ETİKETİ 170- AD 4 $0100 180- INX 190- ;X 32 OLDU MU? 200- ;DEĞİLSE 130'UNCU SATIRA SIÇRA

Şimdiye kadar edindiğimiz tecrübelere göre üç aşağı, beş yukarı bö: le bir şey yazmamız gerekir. Hattâ, ETİKETİ 'in 140'ıncı satırın başında yeralacağını bile şimdiden söyleyebiliriz. Fakat, AD değişkeninin değerinin böyle artmayacağı besbelli. Şimdi geçen derslere dönüp indirekt indeksli adresleme tipini hatırlayalım. Burada, asıl adres sıfırıncı sayfadaki iki byte'lik göstergeç ve Y-registerinden elde ediliyordu. Bu kullanımla göstergecin değerinin $100 artırmak da mümkün hale geliyor. X-registerinin 32 değeri ile karşılaştırılması ve eşitsizlik durumunda 130'uncu satıra sıçraması için kullanmamız gereken komutları da hatırladınız herhalde?..

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