Makine Diline Merhaba (9) AYHAN KALAYLIOĞLU Hatırlayacaksınız geçen bölümün sonunda direkt modda şu satırı gir- miş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 do- kunduğunuzda ise normal yazı ekra- nı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 ek- ranını hem buna ait renk ekranını sil- mek 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öl- gedeki her biti, daha da genellersek her byte'i sıfırlamamız gerekiyor. Döngümüzün başlangıç ve bitiş sınır- ları $E000'dan, $FFFF'e kadar ola- caktır. (Aslında, bitiş adresimiz $FFFF değil $FF3F olacaktır. Çün- kü grafik ekranımız 8192 değil 8000 byte büyüklüğünde. Fakat, bu nok- tada 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ı- ğıinın çok daha hızlı yürüyeceği aşi- kâ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ü .a000 000090000 *000d0n00000 ö 4000 #600 On0 086000000 © 00 6 8900 0608 o0c0© 0000000 256 kere dönülüyordu; bu yüzden bu problemin çözümünde X- ve Y- in- deks registerleri rahat rahat yetiyor- du. Fakat, biz burada 8000 byte'ı sil- mek istiyoruz. İlk akla gelen çözüm olarak içiçe geçmiş iki döngü kulla- nabileceğimiz akla geliyor. Her za- manki gibi, gene önce BASIC'teki ör- neğimiz: AD — 57344 FOR X-0TO31 FOR Y-0TO255 POKE AD Y,0 NEXT Y AD-AD4256 NEXT X Basit bir deyişle, 8192 byte'lık böl- geyi 32 tane 256'şar byte'lık sayfala- ra (Page) ayırdık. Y-döngüsü içinde her seferinde 256 byte siliniyor. Bu- nun hemen arkasından AD değişke- ninin 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ç Commodore 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- .EO AD — $E000 110- LDA # 120- LDX # O 130- LDY * 140- STA AD,Y 150- INY 160- BNE ETİKETİ 170- ;AD — AD * $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öy- le bir şey yazmamız gerekir. Hattâ, ETİKETİ'in 140'ıncı satırın başında yeralacağını bile şimdiden söyleyebi- liriz. Fakat, AD değişkeninin değeri- 59