Commodore sayı 21, sayfa 65

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 65

e 00010000 Yo o

EOR işlemi

Bu değeri, istediğimiz biti silmek için kullanabiliriz.

01011000 Oo

70 01001000

AND işlemi

Şimdi sıra, bu işi programa yaptırmaya geldi. En son yaptığımız altprogramı, hem nokta koyabilecek hem nokta silebilecek şekilde değiştireceğiz. Yani, altprogramımız koordinatlardan başka, bir de yanık nokta mı, sönük nokta mı konacak, diye bir parametre daha olacak. Bu parametreyi, kullanım açısından rahat olması bakımından “carry” flag'ına koyacağız. Altprogram, yanık “carry” bitiyle çağırılmışsa yanık nokta basacak, eğer sönük “carry” bitiyle çağırılmışsa tersi işlemi yapacak. Programın başlarında gelen “carry” bilgisini bozmadan sonlarda kullanmak mümkün olmadığı için durum register'ini yığında saklayıp, gerektiğinde geri alacağız. Hatırlayacaksınız, saklama işlemi “PHP”, geri alma işlemi “PLP” komutlarıyla yapılıyordu. Bu komutları, programımızda uygun yerlere yerleştirmek gerekiyor. Aşağıdaki satırları programa ekleyin:

PHP PLP

145 — 135 —

Programın 760'ıncı satırdan geri kalan kısmını şöyle değiştirin:

760 — BCC SİL 710 — ORA (SUML),Y 780 — BCS OK2 790 —SİL EOR # $FF 800 — AND (SUML), Y 810 —OK2 STA (SUML),Y 820 — LDX # $37 830 — STX1 840 — CLI 850 — RTS

CARRY flag'ı sönükse 790'ıncı satıra sıçrıyoruz ve demin yukarıda elde yaptığımız “ters çevirme” işlemini, program içinde yapıyoruz. Ardından, bildiğimiz “AND” işlemi ve yerine geri yazma olayları gerçekleşiyor. Eğer, CARRY flag'ı yanık-

100 SYS 50176: REM GRAFİK MODUNA GEÇMEK 110 SYS 50208: REM EKRANI SİLMEK 120 POKE 780,16: REM SİYAH/BEYAZ 130 SYS 50240: RENK EKRANINI SİLMEK

1401-1 150 FOR X -0 TO 319

160 POKE 780, X AND 255: REM X-LOW 170 POKE 781, X / 256: REM X-HIGH 180 POKE 782, X * 0.625: REM Y 190 POKE 783,1: REM YAZMA/SİLME

200 SYS 50272: NEXT

210 GET A$: 1F A$-“” THEN 1-1-1: GOTO 150

220 SYS 50192: REM NORMALE DÖNÜŞ

TABLO ll

sa, “ORA” işlemi ile istediğimiz biti yakıp, yerine geri yazma işleminin olduğu yere sıçrıyoruz. Bu sıçrama işleminde “BCS” komutunu kullanarak gene “carry” bitinin içeriğine göre karar veriyoruz. Çünkü, “ORA” komutu “carry” bitinin içeriğini bozmuyor (eğer CMP, ADC gibi komutlar olsaydı, durum daha değişik olurdu).

Programımızın yeni halini denemek için, BASIC'teki altprogramımızda da bazı değişiklikler yapalım: (Bkz. Tablo III) Bu program çalıştırıldığında, deminki düz çizgiyi gene çizer, fakat hemen ardından aynı çizgiyi siler. Noktaların basılması veya silinmesi gerektiği, altprograma durum

100 SYS 50176: REM GRAFİK MODUNA GEÇMEK 110 SYS 50208: REM EKRANI SİLMEK 120 POKE 780,16: REM SİYAH/BEYAZ 130 SYS 50240: RENK EKRANINI SİLMEK

140 REM

150 FOR X—70 TO 150: FOR Y-X TO 199

160 POKE 780,X 170 POKE 781,0 180 POKE 782,Y 190 POKE 783,1 200 SYS 50272: NEXT: NEXT 210 FOR C-0 TO 255 220 FOR 1-1 TO 500 230 POKE 780,C 240 SYS 50240 250 NEXT 260 SYS 50192

TABLO Ili

(dolayısıyla CARRY flag'ini) geçiren 783 adresli bellek elemanı vasıtasıyla bildirilir. Program, çizme ve silme işlemlerini peşpeşe ve devamlı olarak yapmaktadır. Bunu durdurmak için herhangi bir tuşa basmanız kafidir. Böylece, normal yazı ekranına dönersiniz. Bu arada grafik ekranının, o anki durumu korunur. Yani, daha sonra grafik moduna geçtiğinizde ekranın son bıraktığınız halini görmeniz mümkündür. Şimdi biraz da renklerle oynayalım. (Bkz. Tablo II) Burada önce bir şekil çizilmekte ve bu şekil 256 değişik renk kombinasyonunda gösterilmektedir.

Makine dilinde programlama açısından, yazımızın bu bölümünde, indeksli adresleme üzerinde tecrübe sahibi olduk. Mantıksal işlemleri de oldukça detaylı kurcaladık. Böylece, artık istediğimiz bitleri yakıp, söndürüp, ters çevirebiliyoruz. Yığını, kendi verilerimizi saklamak için kullandık. Bunlardan başka, toplama ve bit kaydırma gibi işlemleri 16 bit üzerinden yapmayı becerdik. Şu anda, kavram olarak tek eksiğimiz, altprogram kullanma tekniği. Bu eksikliğimizi de zaten bir sonraki bölümde fazlasıyla gidereceğiz. Gelecek sayıda buluşmak üzere, şimdilik hoşçakalın...D

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