Olayı biraz daha yakından inceleyin- ce bu işlemin nedeni açıklık kazanı- yor. SÜUML işlemi sonucunda elde oluşursa, bu durum carry bitinin yar- dımıyla SUMH'ye iletiliyor. Yani ADC # Oişlemi SUMH'nin değerini değiştirmeyecek diye bir şey sözkonu- su değil. Akünün beş katı değeri bul- duktan sonra, üç kere de iki katını alarak hedefimiz olan kırk katı değeri elde edelim: 340 — ASL SUML 350 — ROL SUMH 360 — ASL SUML 370 — ROL SUMH 380 — ASL SUML 390 — ROL SUMH Böylece, yukarıdaki formülün için- de yeralan en zor ve korkunç terimi hesaplamayı becerdik. Şimdi buna hemen yanındaki terimi hesaplayıp toplayalım. 400 — TYA 410 — AND : 7 420 — CLC 430 — ADC SUML 440 — STASUML - 450 — LDA SUMH 460 — ADC Ü 470 — STA SUMH Burada gene yukarıdaki gibi 16 bit üzerinden toplama yaptık. Sekiz bit- lik gruplar arasındaki eldeyi de unut- madık tabii. Şimdi, bir de X-koordi- natının en alı üç biti silinmiş halini elde etntiğimiz değere toplayalım: 480 — CLC 490 — LDA XL 500 — AND : SF8 510 — ADC SUML 520 — STA SUML 530 — LDA XH 540 — ADC SUMH 550 — STA SUMH Grafik belleğimizin başlangıç ad- resi $0000 olmadığı için, biz daha hâ- lâ bize gerekli olan adresi hesaplaya- bilmiş değiliz. Başlangıç adresimiz ŞE000 olduğu için, bu ofset değerini de toplayalım. 560 — LC 570 — LDA : > (SE000) 580 — ADC SUML 590 — STA SUML 600 — LDA ; > ($E000) 6l0 — ADC SUMH 620 — STA SUMH Nihayet, SUML/SUMH çifti bi- zim için gerekli olan adresi içeriyor. Bir de, bu adresteki byte'ın içindeki bit pozisyonunu hesaplamamız gere- kiyor. Bu bilgiyi bize, demin hesap- larken kullanmadığımız, X-koardi- natının en alttaki üç biti sağlıyor. Bu üç bitin değeri ve bize lazım olan bit numarasını bir tabloda eşleyelim. Böylece arada bir ilişki kurup, bize gerekli olan algoritmayı yaratabiliriz. Bu noktada, gerekli olan bellek ele- manının adresini ve bize gerekli olan bitin numarasını biliyoruz. Şimdi bu bite karşılık gelen değeri elde etme- miz gerekiyor. Bunun için değeri *|” olan byte'in içeriğini (yalnızca sılır numaralı bit yanık) bit numarası ka- dar sola kaydırırız. 660 — TAX 670 — LDA :1 680 -SHİIFT DEX 690 — BMI OK 700 — ASL HN0 — BNE SHIFT TÜ —OK — eke Akümülatörün içeriğini X-registe- rinin miktarı kadar sola kaydırdık, X-koor. Bit no. Ü - 7 l - Ğ 2 - 5 3 - 4 4 - 3 5 - 2 â - l 7 - 0 Yukarıdaki tabloda yeralan değer- leri ikili sistemde ele alırsak birbirle- rine karşılık gelen rakamlar arasında- ki en belirgin ilişkinin bitlerinden ters çevirilmesi olduğunu görürüz. Bilin- diği gibi “EOR' komutu böyle bir iş- lemi gerçekleştiriyordu. 630 — LDA XL 6dü — AND : 7 650 — EOR #7 690'ıncı satırda X-registerinin içeri- ği bir eksiltiliyor ve hemen arkasın- dan negatif değer elde edilip edilme- diği kontrol ediliyor. 710'uncu satır- da her ne kadar şarılı dallanma ko- mutu bulunsa da, program burada iken akünün içeriği hiçbir zaman sı- fır olmadığı için dallanma olayı dai- mi olarak gerçekleşiyor. Tüm döngü- den çıkış *OK” adlı etiket üzerinden gerçekleşiyor ve döngüden çıkıldığın- da, bit pozisyonuna karşılık gelen byte değerini elde ediyoruz. Artık hem adresi hem de bu adrese yazaca- ğımız değeri biliyoruz. Fakat, bura- da biraz dikkat etmemiz gerekiyor. Şu anda ulaştığımız byte'a daha ev- vel de bir şeyler yazılmış olabilir. Ya- ni, biz bu adrese doğrudan bir şeyler yazacağımıza buranın içeriğini de dikkate alıp onun üzerinde değişiklik- ler yapıp öylece yerine yazmamız ge- rekiyor. Bizim alıprogramımızın yap- ması gereken iş, belli bir koordinat- taki noktayı yakmak olduğuna göre, elde ettiğimiz adresteki elde ettiğimiz numaraya sahip biti yakmamız gere- kiyor. Bu olay da, o adresin içeriğini bulduğumuz değerle *OR” (veya) iş- leminden geçirmekle olur. Adresimiz sıfırınci Sayfada iki byte'lik bir gös- tergeçte bulunduğuna göre indireki indeksli adresleme tipini kullanma- mız için geriye sadece Y-regislerini sı- fırlamamız kalıyaor. 720 —OK LDY :0 130 — ORA (SUML),Y 740 — STA (SUML),Y 750 — RTS Programımız, mantıksal olarak tü- müyle bitti ve bu haliyle işini yapması lazım. Fakat, biz gene de ufak bir noktayı atladığımız için olaylar böy- le gelişmeyecek ve programımız doğ- ru olarak çalışmayacaktır. 730'uncu satırda *'ORA' komutu akünün içeriğini SE000'dan $FFFF'e kadar olan bir elemanın içeriği ile 've- ya' işlemine sokacaktır. Fakat, nor- mal durumlarda bu bölgede 'KER- NAL' romu bulunduğu için, okuma işlemlerinde grafik ram'ine ulaşama- yacağız. Yani, “ORA' komutundan önce 'KERNAL' romunun yerine, grafik ram'inin görünmesini sağla- malıyız. Böyle bir konfigürasyonu seçtiğimizde, işlerim sistem romu, bellek haritasında yeralmayacağı için herhangi bir “interrupt' durumunda bilgisayarınız derhal 'crash' edecek- tir. Çünkü, interrupt altprogramı iş- letim sistem romunda yeralmakta. Bu yüzden, sözkonusu konfigürasyonu seçmeden önce interrupt'ları engelle- yen flag'ı yakmalıyız. İşimiz bittiğin- de, eski konfigürasyonu yerine koyar ve interrupt'lara tekrar izin veririz. Bu arada ek bilgi olarak, belirttiğimiz konfigürasyon değiştirme işleminin $S0001 adresli hafıza elemanı vasıta- sıyla yapıldığını söyleyelim. Programımızın son kısmını ve BA- SIC dilinde yazacağımız deneme programını gelecek sayımızda verece- Biz. r B7