Yo 00010000 Oç 11111111 ———————— EOR işlemi 9o 11101111 Bu değeri, istediğimiz biti silmek için kullanabiliriz. Yo OLOL1LÖDÜ Yo 1W1ÖN1 a 01001000 Şimdi sıra, bu işi programa yaptır- maya geldi. En son yaptığımız alt- programı, hem nokta koyabilecek hem nokta silebilecek şekilde değiş- üreceğiz. Yani, altprogramımız koor- dinatlardan başka, bir de yanık nokta mı, sönük nokta mı konacak, diye bir parametre daha olacak. Bu paramet- reyi, kullanım açısından rahat olma- sı bakımından “carry' flag'ına koya- cağız. Altprogram, yanık *carry' bi- tiyle çağırılmışsa yanık nokta basa- cak, eğer sönük “carry”' bitiyle çağı- rılmışsa tersi işlemi yapacak. Progra- mın başlarında gelen “carry' bilgisi- ni bozmadan sonlarda kullanmak mümkün olmadığı için durum regis- ter'ini yığında saklayıp, gerektiğinde geri alacağız. Hatırlayacaksınız, sak- lama 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 7T0 — ORA (SUML),Y 780 — BCS OK2 790 —SİL EOR # $FF 800 — AND (SUML), Y 8l0 —OK2 STA (SUML),Y 820 — LDX » $37 830 — SIXI 840 — CLI 850 — RTS CARRY flag'ı sönükse 790'ıncı sa- tıra sıçrıyoruz. ve demin yukarıda el- de yaptığımız “bitleri ters çevirme' iş- lemini, program içinde yapıyoruz. Ardından, bildiğimiz “AND' işlemi ve yerine geri yazma olayları gerçek- leşiyor. Eğer, CARRY flag'ı vanı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 140 1—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 5YS 320192: REM NORMALE DÖNÜŞ TABLO |l sa, “ORA' işlemi ile istediğimiz biti yakıp, yerine geri yazma işleminin ol- duğu yere sıçrıyoruz. Bu sıçrama iş- leminde *BCS' komutunu kullanarak gene *carry' bitinin içeriğine göre ka- rar veriyoruz. Çünkü, *ORA” komu- * tu *carry' bitinin içeriğini bozmuyor (eğer CMP, ADC gibi komutlar ol- saydı, durum daha değişik olurdu Programımızın yeni halini dene- mek için, BASIC'teki altprogramı- mızda da bazı değişiklikler yapalım: (Bkz. Tablo ) Bu program çalıştırıldığında, de- minki düz çizgiyi gene çizer, fakat he- men ardından aynı çizgiyi siler. Nok- taların basılması veya silinmesi gerek- tiği, altprograma durum register'ini 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- 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 FOR1-1 TO 500 230 POKE 780,C 240 SYS 50240 250 NEXT 260 SYS 50192 70 TO 150: FOR Y- A TO 199 TABLOÖ İll (dolayısıyla CARRY flag'ını) geçiren 783 adresli bellek elemanı vasıtasıy- la 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öner- siniz. Bu arada grafik ekranının, o anki durumu korunur. Yani, daha sonra grafik moduna geçtiğinizde ek- ranın son bıraktığınız halini görme- niz 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 kombinas- yonunda gösterilmektedir. Commodore Makine dilinde programlama açı- sından, yazımızın bu bölümünde, in- deksli adresleme üzerinde tecrübe sa- hibi olduk. Mantıksal işlemleri de ol- dukça detaylı kurcaladık. Böylece, artık istediğimiz bitleri yakıp, söndü- rüp, ters çevirebiliyoruz. Yığını, ken- di verilerimizi saklamak için kullan- dık. Bunlardan başka, toplama ve bit kaydırma gibi işlemleri 16 bit üzerin- den yapmayı becerdik. Şu anda, kav- ram 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 65