Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
Geçen sayıda Interrupt'lara bir giriş yapmış ve makine dilindeki ilgili komutları incelemiştik. Şimdi bu sayıda bir programla Interrupt'ların kullanımını göreceğiz. C-64'ün video chip'inin Interrupt'lar ile kumanda edilmesiyle oldukça güzel efektler elde edilebilir. Bu nedenle IRQ'lar demo ve introlar için vazgeçilmez bir unsurdur. Şimdi yazacağımız program ekranın dış çerçevesinde C-64'ün tüm renklerini şeritler halinde gösterecektir. Yalnız programa geçmeden önce ekranda resmin nasıl oluştuğunu bilmemiz gerekmektedir. Ekranı sürekli tarayarak gördüğümüz resmi oluşturan katot ışınının konumu iki bayttan takip edilebilir. Bu iki bayt Raster Register'i olarak adlandırılır. Burada fazla detaya inmeden ekrandaki satırların 0'dan 280'e kadar numaralanmış olduğunu belirtmemiz yeterlidir. Ekranın 280 satır olmasının nedeni çerçevelerin ve görünmeyen kenarların da bu sayıya dahil edilmiş olmasıdır. Yazı alanının başladığı satır monitör-
7 ,Baza FB vr GEBE A9 28 ağ, .6003 80 14 STA | “sesi da vE AS #66 | bisi BD 13 63 STA B315 | AS Fa LDA #F8 | Fo BD 12 Da STA Dai?
20 be
NO 11 DE LDA Dali
28 7F AND HZE (8015 BD di DE STA AS Bİ LDA | En 2m De STA Dere SD ADE STA DOİA | (sase Aa 32 AS BALDA | En iz na STA ©n DR STA | dc Gi EA as v4 LDA | — STA Be | za ser se LT AS Be — Lna Heba Ba S0 JA DE STA DOLA Ra Ri LDA Bn 14 B3 STA Aa LA LDA ,8869 80 15 ex STA Balm KA LDA 28 ve STA
Se
83266 (Bit 0-0)
83285 (Bit?)
Resim 1: Raster registerinin 9 Bit'i
ANIL GÜL'den monitöre değişmektedir, fakat genelde 50 civarındadır. Yukarıda sözünü ettiğimiz Raster registerini oluşturan baytlar şunlardır:
$D012 (53266) $D011 (53265)
baytındaki sadece 7. Bit'i Raster satırının yüksek baytı olarak bizi ilgilendirmektedir. Raster registerinin 9 Bit'i Resim 1'de gösterilmiştir. Bu registerin en ilginç özelliği değerinin değiştirilebilmesidir. Bu şekilde istenen Raster satırında $D01A'daki Interrupt-enable-registeri (geçen sayıda görmüştük) ile serbest bırakılmış bir IRQ devreye sokulabilir. VIC-II-Chip'inin programlanmasına geçmeden önce atılması gereken adımları belirtelim: 1.) $D012 ve $D011 adresinin 7. Bit'inden IRQ'nun devreye sokulacağı raster satırı belirlenir. 2.) $D01A'daki Interrupt-enable-registerine 1000 0001 verilerek Raster satırı Interrupt'ı serbest bırakılır. Bundan sonraki adım IRQ'nun mikro işlemci tarafından yorumlanmasıdır. Geçen sayıda belirttiğimiz gibi IRQ $0314/5 ($314/5) vektörünün gösterdiği adrese dolaylı olarak atlamaktadır. Bu vektör değiştirildikten sonra kendi rutinimizi göstermelidir. 3.) $314/5 rutini yardımcı IRQ rutinine yönlendirilir. Bu şekilde gerekli tüm hazırlıklar oluyor. Gerisi tamamen yapacağımız programa bağlıdır. Resim 2'de programımızın akış diyagramı yer almaktadır. Şimdi satırları teker teker inceleyebiliriz. Önce $6000 adresinde başlayan (SYS 24576 ile çalıştırabilirsiniz) hazırlık aşaması:
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
$6000 Adım 3:
IRQ'nun kesilmesi
6001 LDA # $28 6003 STA $0314 6006 LDA # $60 6008 STA # 0315
IRQ rutininin alçak baytı IRQ vektörü (alçak bayt) IRQ rutininin yüksek baytı IRQ vektörü (yüksek bayt)
Adım 1: 600B LDA # $F8 Yazı ekranının bittiği raster satırı. Bu satırdan itibaren satır siyah olmalıdır. 600D STA $DO12 Raster registerinin alçak baytına yazılır. 6010 LDA £DOl1 6013 AND # $7F
Raster satırının yüksek baytı 0111 1111 sayısı 7. Bit'i temizler Değer geri yazılır. Böylelikle IRQ'yu başlatacak Raster satırı belirlenmiş olur.
6015 STA $DOL1
Adım 2: 6018 LDA # $81 Bu sefer 1000 0001 sayısı ya- zılır (Raster Interrupt'ı için) STA $DOLA Bazı başlangıç değerlerinin belirlenmesi: 601D LDA #$00 Siyah rengi (kodu 0) 601F STA $DO20 Çerçeveye yazılır. 6022 LDA # $04 Bant kalınlığı belirlenir
6024 STA $02 6026 CLI IRO kapatılır. 6027 RTS Hazırlık aşamasının sonu.
Bundan sonra Interrupt'larda bizim $6028'den itibaren yazacağımız program çalışacaktır. İlk önce Interrupt'ın VIC-II-Chip'inden mi, yoksa mikroişlemciden mi kaynaklandığı araştırılır:
6028 LDA $DO19 Eğer bu adresdeki 7. Bit “*1”” değerini almışsa İnterrupt geliyor demektir. Değer geri yazılır.
602B STA $DO19
60Z2E BMI $6037 Eğer VI-IRO ise program
$6037'ye atlar. CIA-IRQ durumu:
6030 LDA $DCOD Interrupt kontrol regis- teri temizlenir.
6033 CLI IRÇ'dan çıkılır.
Bu şekilde mikroişlemcinin Interrupt'ları arasına bizim yazacağımız VIC Interrupt'ları yerleştirilebilir.
2?