Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
Yukarıdaki her iki komut da 1-bayt uzunluğundadır ve işlem süreleri 2 cycle'dır (çevrim). RTI (Return from Interrupt) ise “Interrupt'tan geri dön” anlamına gelmektedir. Bu komut bir bakıma yakından tanıdığımız RTS ile aynı işleve sahiptir. Yalnız RTS eski program sayacı değerini stack'tan alırken, RTI ayrıca statü registerini de stack'tan almaktadır. Bu işlem şu sırayla gerçekleşir: 1) Mikroişlemcinin eski statüsü stack'tan alınır ve statü registerine yazılır. 2) Stack göstergesi 1 arttırılır. 3) Eski program sayacının alçak baytı stack'tan alınır ve yerine yazılır. 4) Stack göstergesi tekrar 1 arttırılır. 5) Eski program sayacının bu sefer yüksek baytı stack'tan alınır ve yerine yazılır. 6) Stack göstergesi 1 arttırılır. Bu şekilde kesintinin gerçekleştiği andaki konuma tekrar dönülmüş olur. Aynı zamanda I-Bayrağı da silinmiştir, zira kesinti olmadan önce bu bayrağın değeri sıfırdır ve eski statü registeri olduğu gibi yerine yazılmıştır. RTI da diğerleri gibi 1 bayt'lıktır, yalnız işlem süresi 6 cycle'dır (çevrim). Son komutumuz olan BRK'yi (break) daha önce birçok kez kullanmıştık. BRK komutu Basic'ten tanıdığımız STOP ile hemen hemen aynı görevdedir ve daha çok programların test edilmesinde kullanılır. Aslında bilgisayarımız mikroişlemcisi BRK ile karşılaştığında aynı IRQ'da olduğu gibi hareket etmektedir. Bu işlem şu şekilde gerçekleşir: a) Program sayacı 2 arttırılır. b) Statü-register'indeki 4. Bit olan B-Bayrağı “1” yapılır. c) Program sayacının yüksek baytı stack'a yazılır ve stack göstergesinin değeri 1 azaltılır. d) Aynı işlem program sayacının alçak baytı için de gerçekleşir. e) Statü registeri de stack'a kaydedilir. f) Statü registerindeki I-Bayrağının değeri 1 yapılır. g) Program sayacına $FFFE/ $FFFF vektörünün gösterdiği değer yüklenir. Bu değer aynı zamanda IRQ'larda da kullanılır. Görüldüğü gibi BRK'nin arkasında oldukça karmaşık işlemler yatmaktadır. BRK de 1 bayt'lık komuttur, fakat işlem süresi 7 cycle'dır (çevrim). Bu şekilde Interrupt'ları kullanırken gereksinim duyacağımız tüm komutları öğrendik. Şimdi kısaca Interrupt'ların bilgisayarımızın hangi birimleri ile ilişkisi olduğunu göreceğiz. Bunları şöyle sıralayabiliriz: 1) VIC-II-Chip'i (MOS 6566/6567 Video Interface Controller) 2) Her iki CIA (MOS 6526 Complex Interface Adapter) 3) RESTORE tuşu 4) Expansion-Port 5) RESET (Bu listeye tamamen ait değilse de sözü edilmeden geçilemez.)
Resim 4: Interrupt-Latch-Register (53273 - $D019) 46
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
Interrupt ve VIC-II-Chip'i:
C-64'ün görüntü işlevlerini yerine getiren VIC-Chip'inin Interrupt'lar için kullanımı iki registerle gerçekleşir. Bu yöntemle yapılabilecekler dört başlık altında toplanır: 1) Raster satırları (Ekranı sürekli tarayan yatay çizgiler) 2) Sprite'ların arka plan ile çarpışmaları 3) Sprite'ların birbirleriyle 4) Işıklı kalem (Light-Pen) Bu son şıkka pek fazla kullanım alanına sahip olmadığı için değinmeyeceğiz.
VIC-II-Chip'indeki “Interrupt Enable Registeri”, yani
Interrupt'ı devre dışı bırakan register $D01A (53274) adresinde yer almaktadır (Resim 3). Bu registerden yukarıdaki dört olaydan hangi biri veya birkaçı için mikroişlemciye veri gönderilmesi gerektiğini belirleyebiliriz. Bu dördü için burada ayrı bir Bit yer almaktadır. Eğer bu Bit “1” ise Interrupt serbest bırakılır, yani kullanılabilir, 0 ise devre dışı kalır. Bitler registerde şu şekilde yerleşmiştir: Bit 0 Raster satırları Bit 1 Sprite/Background çarpışması Bit 2 Sprite/Sprite çarpışması Bit 3 Işıklı kalem Bit 4-7 Kullanılmamıştır ve 0'dır. VIC-II-Chip'inin 25. Register'i ($D019— 53273) “Interrupt-Latch-Register” olarak adlandırılmaktadır. Eğer dört seçenekten biri $D01A'dan seçilirse 25. Register'de de buna karşı gelen Bit “1” değerini almaktadır. Bit yerleşme düzeni aynı bir öncekindeki gibidir (Resim 4). Yalnız buradaki tek fark Bit 7'dir. Eğer 0-3 Bit'lerinden biri 1 değerini alırsa 7. Bit de kendiliğinden 1 olmaktadır. Bu şekilde bu Bit okunarak kolayca VIC-II-Chip'inde herhangi bir Interrupt'ın serbest bırakılıp bırakılmadığını anlayabiliriz. Son olarak bu registerin ilginç bir özelliğine değineceğiz. Burada eğer herhangi bir Bit'i silmek isterseniz yerine yine “1” yazmalısınız. Bu aylık da bu kadar. Gelecek sayıda Interrupt'lar hakkında gerekli temel bilgiyi edindikten sonra oldukça kapsamlı bir program yazacağız. Hoşçakalın.