Program $2000'deki altprograma aitti. Diyelim ki o adreste doğrudan RETURN komutu bulunsun. SP - SF8 SP-SP41 PCL-(S01F9)— $82 SP-SP41 PCH-($01FA)- $C4 SP - $FA Program sayacı şu anda $C482'de durmakta. Bu değer otomatik olarak bir daha artırılır. Böylece $C483 ad- resini, yani $C480'de bulunan alt- program çağırma komutunun hemen arkasındaki komutun adresini elde ederiz. Yığın “List in-First out' prensibiy- le çalışılır. Yani yığına son atılan bil- gi ilk olarak geri çıkar. Bu özelliğe gü- venip içiçe geçmiş birçok derinlikte altprogramlar yazabiliriz. Herbir alt- programa rastlandığında yığına yeni bir geri dönüş adresi atılır. Her RE- TURN komutuna rastlandığında yı- ğından sıradaki geri dönüş adresi alı- nır ve bir üst ısradaki altprograma geri dönülür. En sonuncu RETURN ko- mutu ile de ana programa dönülür. Yığının çalışma prensibini anladıy- sanız o'nu aynı zamanda kendi prog- ramınızın ana değerlerini saklamak için de kullanabilirsiniz. Bu konuyu bir sonraki komut grubunda inceleye- ğiz. Aşağıdaki tabloda altprogram ça- ğırma ve altprogramdan geri dönme komutlarını ve komut kodlarını bula- caksınız: Komut Komut kodu JSR $20 RTS $60 13. Yığın Komutları 6510 ana işlem ünitemiz gerek akü- yü, gerek durum register'ini yığında saklayıp, daha sonra geri almamıza olanak tanıyor. Bu işlemler sırasında, yığın göstergecinin, okuma işlemi sı- rasında bir artırılması ve yazma işle- mi sırasında bir eksiltilmesi gibi işlem- ler otomatik olarak kendiliğinden ger- çekleşir. Şimdi bu komutları görelim. PHA PHA (push accu') komutu akümü- latör'ün içeriğini yığına atmamıza ya- rar. Yığın göstergecinin bir eksiltilmesi işlemi otomatik olarak gerçekleşir. Akümülatör'ün içeriği korunur. İşle- mi BASIC'te formüle edersek: POKE 256-4 SP, A:SP -SP-I $0100 Ana işlem ünitesinin yığınının $0100 adresinden, $01FF adresine ka- dar uzandığını bir kere daha hatırla- talım. PHP PHP ('push processor status') ko- mutu durum register'ini olduğu gibi yığında saklamamıza yarar. Yığın gös- tergecinin bir eksiltilmesi otomatik olarak gerçekleşir. Durum register'i- nin içeriği değişmez. BASIC'te, yapı- lan işlemi görelim: POKE 256-4-SP, A:SP -SP-I $0100 PLA PLA (pull accu') komutu PHA ko- mutunun tersi işlemi yapar. Yığın gös- tergeci bir artırılır ve yığından bir byte, akümülatör'e okunur. Okunan değere göre N- ve Z-flag'ları etkilenir. Bu işlem BASIC'te şöyle görünür. SP — SP 4 1:A — PEEK (2564- SP) PLP PLP (*pull processor status') komu- tu PHP komutunun tam tersi işlemi yapar. Okunan byte olduğu gibi du- rum registerine yerleşir, dolayısıyla bütün flag'lar etkilenir. Yapılan işle- mi şöyle yazabiliriz: SP — SP 4 1:P— PEEK (256--SP) 1 $0100 Aşağıdaki tabloda komutları ve karşılık gelen komut kodlarını bula- caksınız. Komut Komut kodu PHA $48 PHP $08 PLA $68 PLP $28 14. Interrupt Komutları Bu gruptaki komutları başta pek kullanmayacağız, çünkü biraz dikkat ve bilgi istiyor. 6510 ana işlem ünite- miz yürüyen bir programı dışarıdan gelen bir etkiyle kesebilme becerisine sahiptir. Bu işlemin gerçekleşmesi için ana işlem ünitesinin Interrupt (IRO, Interrupt Reguest) bacağının elektrik- sel sinyallerle uyarılması gerekiyor. Interrupt gerçekleşince gelişen olaylar, altprogram işlemine benziyor. önce yürümekte olan programın kesildiği adres yığına atılıyor, arkasından da durum register'i. Şimdi hafızada bu- lunan ana interrupt programını yürüt- mek için $FFFE ve $FFFF adresleri üzerinden indirekt olarak sıçrama iş- lemi yapılıyor. Bundan başka, program içinde de interrupt yaratma imkânımız var. BRK ('break') komutu bu iş için ön- görülmüş. Ama işlem ünitesi bu em- re rastladığında interrupt işleminin ay- nısını yapıyor. Tek farkla, B-flag'ı ya- OAYA