Kesme İsteği
Açıklama
Kesme isteği (interrupt request), işlemci bir program normal akışını sürdürürken, yaptığı işi bırakıp başka bir adrese sıçrayarak işleme yeni adresten sürdürmesini sağlar.
Z80 işlemcide "kesme isteği", işlemcinin 16 ve 17 numaralı bacağındaki voltajın değişimi ile gerçekleştirilir. Bu bacaklar INT(16) ve NMI(17) olarak isimlendirilmiştir. Yani z80 işlemcide iki farklı kesme isteği kategorisi bulunmaktadır.
Maskelenebilir Kesme İsteği (INT)
INT, yani maskelenebilir kesme isteği, yazılım tarafından kapatılabilir. Yani kesme isteği yapılsa bile istenirse bu istek önemsenmeyebilir.
Z80 işlemcide üç farklı kesme isteği modu vardır. Bu modlar bir kesme isteği olduğunda ne iş yapılacağını belirler. Bu modları IM0, IM1 ve IM2 komutları ile değiştirebilirsiniz. Bir kesme isteği geldiğinde işlemci kesme isteği dinlemeyi durdurur ve moda uygun sıçrama işlemini gerçekleştirir.
Maskelenebilir kesme isteklerini DI ve EI komutları ile durdurmak ya da etkinleştirmek mümkündür.
Maskelenemez Kesme İsteği (NMI)
NMI, yani maskelenemeyen kesme istekleri kapatılamaz. İşlemci her konumda kesme isteğine uyar ve yapılan iş bir kenara bırakılır ve $0066 (102) adresine sıçranır. Sıçrama gerçekleşmeden önce IFF1 bayrağı sıfırlanır, böylece maskelenebilen bir kesme isteği (INT) işlemi bölemez.
NMI rutininden geri dönüş RET ya da RETI komutu ile yapılır. RETI ile geri dönüş yapılırsa IFF2'deki durum IFF1'e geri kopyalanarak INT durumu NMI'den önceki haline getirilir. Ret ile dönülürse kesme istekleri kapalı kalacaktır. Eğer programcı NMI'den önceki IFF1 durumunu okumak isterse, LD a,i komutunu işletmelidir. Bu komut IFF2 verisini PF bayraklarına kopyalar.
Zx Spectrum'da Kesme İsteği
Zx Spectrumda INT, yani maskelenebilir kesme isteği ULA tarafından oluşturulur. Ekran çizimine başlanacağını işaret eden kesme isteği, her görüntü karesinin çizimine başlanmadan hemen önce, saniyede toplam 50 kere oluşturulur.
Zx Spectrum başlatıldığında IM1 durumuna geçilir. Bu durumda işlemci RST 38 komutunu işletir. $0038 adresinde basic hizmet rutini bulunmaktadır. Bu rutin klavyeyi kontrol etmek, bilgisayar çalıştığından beri geçen zamanı kaydetmek gibi rutin işler gerçekleştirir ve sonunda orjinal akışa geri döner. Detaylı bilgi için IM0, IM1 ve IM2 başlıklarına bakınız.
Zx Spectrumda NMI oluşturabilmek için bir donanım kullanıyor olmalısınız. Örneğin Multiface gibi kırıcı kartuşların üzerinde bulunan bir buton sayesinde NMI oluşturulur.
Zx Spectrum Sinclair Basic ROM'unda $0066 adresinde NMI rutini bulunmaktadır. Bu rutin iki sistem değişkenini kontrol eder ve sistemin resetlenip resetlenmeyeceğine karar verir.