64'ler sayı 21, sayfa 44

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 44

C002 mbler C006 BIT $FB C008 komutu kullandığın zaman memory'nin 7. bit'i Negative flag'a ve 6. bit'i Overflow flag'a gider. A registeri memory ile AND edilir ve sonuç 00 ise Zero flag set'tir. AND komutunun neticesi hiçbir yere depolanmaz. Örnek: A registeri FB bölgesi ile BIT edilmiştir: C000 LDX #$8A STX $SFB LDA #$89

RTS

İ A HK BİT komutu sadeci 2 mod hip- Dr. ALİ ÖZÇELİK tir; Zero page ve Sadece memory byt'nn

ORA üzerine notlar: * Eğer sonuç 80 ile FF arasında ise Negative flag set olacaktır. * Eğer sonuç 00 ise Zero flag set olacaktır. * A registeri ORA için aşağıdaki adresleme modlarını destekler: IMMEDIATE (ORA #$ZZ) ZERO PAGE (ORA $ZZ) ZERO PAGE INDEXED (ORA $ZZ,X) ABSOLUTE (ORA $ZZZZ) ABSOLUTE INDEXED (ORA $ZZZZ,X) veya (ORA $ZZZZ,Y) INDEXED INDIRECT (ORA ($ZZ,X)) INDIRECT INDEXED (ORA ($ZZ),Y) EOR (A registeri ile Exclusive-Or) Bu ORA ile bir tek şey hariç aynıdır, eğer iki bit üst üste sonuç 0'dır. 1-1=0, 1-0=1, 0-1=1, 0-0=0. İşte örnek: 11001011 01010010 10011001 Aşağıdaki program RUN edildiğinde ekran rengini değiştirir. C000 LDA $D021 C003 EOR #$07 STA $D021 C008 RTS Bu program çalışır çünkü her run edilişinde 0, 1 ve 2 arasında değiştirir. EOR üzerine notlar: * Eğer sonuç 80 ile FF arasında ise Negative flag set olacaktır. * Eğer sonuç 00 ise Zero flag set olacaktır. A registeri EOR'un aşağıdaki adresleme modlarını destekler: IMMEDIATE (EOR #$ZZ) ZERO PAGE (ORA $ZZ) ZERO PAGE INDEXED (ORA $ZZ,X) ABSOLUTE INDEXED (ORA $ZZZZ,X) veya (ORA $ZZZZ,Y) INDEXED INDIRECT (ORA ($ZZ,X)) INDIRECT INDEXED (ORA ($ZZ),Y) BIT (register'le memory'deki bitleri test) Şimdiye kadar öğrendiğimiz komutların aksine bu komut register veya memory'i etkilemez. Bu kod durumunu kontrol etme maksadına hizmet eder. BIT bahsedilecek son lojik komuttu. Şimdi başka bir problem: A registerini A9 (10101001) yapan bir program yazdım, sonra lojik komut icra ettim ve A register 08 (00001000) oldu. Bu programda hangi lojik komut kullanıldı? LDA #$A9 C002 EOR #$A1 C004 RTS Yukarıda EOR #$A1 kullanıldı. A register = 10101001 data =

A register

00001000

— Bölüm Onbeş — INTERRUPTS (KESME) Henüz öğrenmediğimiz bir register var, PC (Program Counter). PC bağımsız olarak çalışır, her şeyi kendi başına yapar. PC kompüterin hangi adreste olduğunu takip eder. Örnek olarak kompüter C000 adresindeki komutu icra ediyorsa PC = C000'dır. Interrupt, isminden de anlaşıldığı gibi programın akışını durdurur. Her 1/60 saniyede Commodore interrupt olur. Bu saat zamanlaması ve klavyeyi kontrol için yapılır. Biz bunu vektörü değiştirerek yaparız ki interrupt atlatılır. Vektör iki byte'tır ve adresi gösterir, ve LOW-HI byte formundadır. Interrupt (IRQ-Interrupt Request) vektörü 0314 ve 0315 bölgesindedir. Bu vektör normal olarak EA31 bölgesini gösterir. Vektörü bizim rutinimizi göstermek üzere değiştirdiğimizde, rutinimizi $EA31 şeklinde bitirmeliyiz. Bu saatin ayarını ve klavyenin kontrol edilmesini sağlayacaktır.

İşte IRO vektörünü CO10 bölgesini gösterecek şekilde değiştiren program: Co00 Coo1 LDA #S10 Co03 STA $ 0314 Co06 LDA #$ CO Co08 STA $ 0315 CLI cooc RTS Bu programı C010 bölgesine bir rutin yazmadan — sakın çalıştırma. Program içindeki ve CLI komut- larını farketmişsindir. SEl komutu, İRO komutunun

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