INTERRUPT'LAR
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ı:
$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?
6034 JMP CIA-IRO normal rutinlerine
atlar.
için programımız:
6037 LDA $DO12 Hangi satırda IRO'nun baş-
latıldığını belirlemek için
Raster Register'ine bakılır.
$603A CMP # $F8 Text ekranının sonu olup olmadığına bakılır. Eğer text ekranının sonu ise
$604F'ye atlanır.
Bundan sonraki program bölümü bir sonraki şerit için kullanılır.
603E CLC
603F ADC $02
603C BCS $604F
Toplama işlemi için hazırlık. Şeridin genişliği $02 adresinden alınır. Yeni değer Raster registerine yazılır.
6041 STA $DO12
Böylelikle bir öncekinden bir bant kalınlığı kadar aşağıda yer alan Raster satırı Interrupt başlangıcı olarak belirtilmiş olur. Bundan sonra ise deneme yoluyla ayarlanmış bir geciktirme döngüsü yer almaktadır.
6044 LDY # $03
6046 DEY Geri sayım
6047 BNE $DO20 Next Y (Y-0 olana dek)
Bir sonraki Raster Interrupt'ına kadar çerçeve rengi-
Döngü başlangıç değeri
VIC Interrupt'ına bakılır.
kesilir belirlenmesi
Yazı ekranının alt tarafındaki Raster satırı belirlenir
Karşılaştırma: Raster satırı — Yazı ekranının altı
Raster IRQ açılır.
Yazı ekranının
-Çerçeve rengi siyah, “Şerit kalınlığı 4 olarak
Şerit genişliği Raster Registeri'ne eklenir
Normal IRQ'ya dönüş, rutin değiştirilmesi, rutininin kapatılması
Raster-Interrupt'ı kesilir.
Normal vektörleri
Registeri silinir, başlatılır
Normal IRQ'ya dönüş
Çerçeve rengi siyah
Yazı ekranının üstündeki Raster satırı verilir.
Çerçeve rengi: Açık mavi
IRQ başlatılır.
Normal IRQ'ya dönüş
Resim 2; VIC-IRQ programının akış diyagramı
6049 INC $DO20 Renk kodu bir arttırılır.
Eğer çerçeve renginin kodu 15'den büyük olursa tekrar 0'dan başlanır, zira 5.-7. bit'ler kullanılmaktadır. Bundan sonra tekrar normal IRQ rutinlerine dönülür. 604C JMP $EA31 Bu şekilde yazı ekranının kenarlarındaki çerçeveler ele alınmış oluyor. Bundan sonra üst ve alt tarafta kalan bölümler ile uğraşacağız:
604F LDA # $00
6051 STA $DO20
Siyah rengin kodu çerçeve rengi registerine yazılır. Yazı ekranının yukarıdan başladığı Raster satırı Raster registerine yazılır. Tekrar normal IRQ rutinlerine dönülür
6054 LDA # $32
6056 STA $DO12
6059 JMP
Bu son bölümde üst ve alt kısmındaki bölümleri siyah olması gerektiğini belirttik. Kendi yazdığımız Interrupt rutini bu satırlarla sona ermiş oluyor. Yalnız istenildiği zaman bilgisayarın normal ekranına dönülmesi için birkaç satır daha eklememiz gerekmektedir. SYS 24668 ile C-64 ilk konumuna gelecektir.
605C
605D LDA # $00
605F STA $DOJA
6062 LDA # $31
6064 STA $0314
Interrupt kesilir. Raster-IRQ durdurulur.
IRQ vektörünün eski haline dönüştürülmesi Raster registerine yazılır. Tekrar normal IRQ rutinlerine dönülür.
6056 STA $DO12
6059 JMP $EASI
6067 LD # $EA
6069 STA $0315
606C LDA # $0E
606E ST $DO20
6071 CLI
6072 RTS
Açık mavinin renk kodu çerçeve registerine yazılır. IRQ'dan çıkılır.
Programımız artık tamamlanmış durumdadır. Çalıştırmadan önce diskete ve kaset'e kaydetmenizi tavsiye ederim. SYS 24576 ile programı başlattığınızda ekranın dış çerçevesinde renkli şeritler gözükecek ve aynı zamanda Cursor yanıp sönerek sizden emir bekleyecektir. Programımız bazı değişikliklere de olanak sağlamaktadır. POKE komutu ile 2 No.'lu adresteki değer değiştirerek çerçevedeki bantların kalınlığını istediğiniz gibi belirleyebilirsiniz. Yine POKE komudunu kullanarak 24645 adresindeki döngünün başlangıç değeri değiştirilebilir. Deneyerek göreceğiniz gibi bu tüm Interrupt programlarında süre oldukça önemli bir rol oynamaktadır. Eğer bu süreyi doğru olarak belirleyemezseniz ekranda istemediğiniz şeyler olacaktır. Örneğin yukarıdaki örneğimizde şeritler hareket etmeye başlar.
Program üzerinde değişiklik yapmaya olanak sağlayan diğer bir nokta da şeritlerin başlangıç ve bitiş değerleridir. Bu değerler program içinde yazı alanının yüksekliği ile aynı olacak şekilde ayarlanmıştır. POKE 24661, sayı ile şeritlerin başlangıç ve POKE
24635, X: POKE 24588, X ile de şeritlerin bitiş değerlerini değiştirebilirsiniz. Daha önce de belirttiğimiz gibi yazdığımız programda şeritlerin başlangıcı 50. Raster ve bitişi 248. Raster olarak belirtilmiştir.
Bu yazıdan edindiğiniz bilgilerle değişik Interrupt programları yazabilirsiniz. Yalnız hemen şunu belirtelim: Ekranı tarayan ve belli bir Raster'de VIC-Interrupt'ı başlatan elektron ışınının hızı çok yüksektir. Bu nedenle yazacağınız alt program fazla uzun olmamalıdır, zira daha işlem tamamlanmadan bir sonraki Interrupt başlayabilir.
Ve bu sayının tuzaklarına gerekli için tiyolar; Escape From the Planet of the
Robot Monsters, Fighter Bomber, Beach Volley ve daha niceleri, bu Püf Noktaları tiyolar sayesinde daha kolay ve zevkli hale gelecek.
TUNÇ & SİNAN Evet, tek sayılık bir aradan sonra tekrar sizinle beraberiz. Benim vizelerim ve Tunç'un dersleri yüzünden geçen sayıda bir araya gelip yazma fırsatı bulamadık. Umarız bu arada hoşunuza gittiğini umduğumuz bu bölümün bittiğini zannetmediniz. Bu arada gönderdiğiniz mektuplar için teşekkürler. Bu bölüme sizinle beraber devam etmek bizim için çok daha zevkli olacak. Bu ilginizin ilerde de süreceğini umuyoruz. Şimdi satırları Tunç'a bırakıyorum. Selam geçen bölümden beri iyisinizdir umarım, Sinan karşıdaki makinede ESCAPE FROM THE PLANET OF THE ROBOT oynamaya daldı bile, bende sizin mektuplarınızı değerlendirmeye başlıyorum. İlk mektubumuzu İstanbul'dan Hakan Kantaş arkadaşımız göndermiş. İlk tiyonuz SPHERICAL için. Platform tipi zeka oyunlarının meraklıları bu oyunu oldukça iyi bilirler sanırım. Aşağıdaki kodları kullanarak oyuna belirli kademelerden başlayabilirsiniz. Tek kişilik mod için şifreler: RADAGASI, YARMAK, ORCSLAYER, SKYFIRE, MIRGAL İki kişilik mod için şifreler: GHANIMA, GUEP, MOURN-BLADE, JADAWIN, GUMBACHACHMAL Şimdiki tiyonuz ise Madonna hayranlarının beğendiğini sandığımız VIGILANTE'den. Skor tablosuna 'GREEN CRYSTAL' yazın. F1'e bastığınızda otomatikman bir hak alırsınız. F8'e bastığınızda bir sonraki bölüme geçebilirsiniz. THUNDERBIRDS adı size bir şeyler hatırlatıyor mu bilmem ama zamanın iyi oyunlarından biriydi. İşte ilerki kademelerine geçmek için gerekli olan kodlar.
seti
&
LEVEL 1: Şifre gerekli değil.
LEVEL 2: RECOVERY
LEVEL 3: ALOYSIUS LEVEL 4: ANDERSON
Şimdiki tiyoları gönderen arkadaşımız ismini yazmayıp sadece takma adı olan WOW'u kullanmış. Lütfen bundan sonra takma adınız yerine gerçek adınızı gönderin. Takma adları yayınlamak istemiyoruz ama, siz ilk kişi olduğunuz için bu defalık yayınlıyoruz. İlk tiyomuz BATMAN'dan. Oyunu sonsuz hakla isterseniz Batman ve Joker'in karşılıklı durduğu ekranda sırasıyla enter 'A' enter 'M' enter 'M' enter 'M' enter enter 'M' enter tuşlarına basın. Resim birden ters dönecek ve oyuna sonsuz hakla başlayacaksınız. ROBOCOP'da ise oyunu sonsuz enerjiyle oynamak istersiniz herhalde? O zaman oyuna başladığınız zaman RETURN tuşuna basarak oyunu dondurun. Ve “BEST KEPT” cümlesini yazın. Oyun sonsuz enerji ile devam edecektir. Yalnız karşınıza çıkan bütün adamları vurun. Bu adamları vurmanız size silah ve ilerki kademelerde merdiven sağlayacak. Aksi taktirde öteki bölümlere geçemiyorsunuz. WIZBALL için: Oyunu dondurun. yazın. Evet sonsuz hakka sahipsiniz. Gerektiğinde tuşuna basarak kazanlara sahip olabilirsiniz. Tabiki dolu olarak. STREET FIGHTER: “STREET CHEAT” yazın. Sonra 'HELP'e basarak ilerki bölümlere geçebilirsiniz. Hazır Sinan robotların gazabına uğramışken satırları kendisine bırakıyorum. Evet Tunç bana hiç mektup bırakmadı sanırım. Hey şu kağıt yığınının arasında bir mektup kalmış galiba Neyse son mektubumuz ise İstanbul'dan Cem Göknil arkadaşımıza ait. Bize gönderdiği ilk tiyo LED STORM ismindeki kuş bakışı oynanan bir araba da 3. kademede rastlayacağınız mayınlardan joystiğinizle slalom (sağ sol) yaparak kurtulabilirsiniz. Ayrıca yine 3. kademede sağ taraftaki yolu seçmenizde fayda var. INTERNATIONAL KARATE'de F3 ve F10 tuşlarıyla hareketlerinizin hızını değiştirebilirsiniz. Ayrıca hakeme giysi de giydirebilirsiniz. Evet bize göndermiş olduğunuz mektuplar ve tiyolar için tekrar teşekkür ederiz. Size benim de bir sürprizim var. Sıra Space Ace'i tüm çabalarına rağmen henüz bitiremeyen Ready Soft hayranlarına yapacağımız sürprizde. Space Ace'i oynarken istediğiniz herhangi bir sahnede 'P' tuşuyla pause yaptıktan sonra klavyenizi kullanarak 'DODEMODEXTER' yazıp basın. Tabi bunun ardından tekrar tuşuna basarak oyunu pause'dan çıkarmayı unutmayın. Artık arkanıza yaslanarak geçemediğiniz bölümleri zevkle seyredebilirsiniz. Üstelik bu tiyoyu oyunu bitirenler de kullanabilirler. Çünkü siz de oyun esnasında hata yapmamaya çalışmanın vermiş olduğu stresten dolayı oyunun zevkini çıkaramamış olabilirsiniz. Yalnız burada bir uyarıda bulunmam gerek, yoksa hata yapabilirsiniz. Pause modunda tiyonuzu yazmadan önce klavyenizdeki aralık çubuğuna bir kere basın ardından DODEMODEXTER yazın. Gerçi bunu belirtmek için tırnak içindeki bir boşluk bıraktım ama bunun yine de dikkatinizden kaçabileceğini düşünerek sizi uyarmaya çalışıyorum. Çünkü bende ilk başta dalgınlıkla aynı hatayı yaptım. Dikkatli olun.
İçinizde Fighter Bomber'i oynamış olanlar vardır kuşkusuz. Bu güzel programın tek derdi ise diğer görevlere hemen başlayamamak. Eğer bütün bölümleri istediğiniz gibi oynamak istiyorsanız işte tiyonuz. Oyuna başlamadan önce Pilot Name bölümüne 'BUCKAROO' yazarsanız istediğiniz mission'da uçabilirsiniz. Ayrıca bunun sayesinde herhangi bir görevdeyken tuşuna basarsanız otomatikman bir sonraki göreve geçersiniz. Biraz da spor meraklılarına tiyo verelim. Beach Volley'i oynamayanınız yoktur sanırım. Oyun esnasında klavyenizden 'DADDYBRACEY' yazın. Artık 'F4' tuşuna her basışında bir sonraki kademeye geçebilirsiniz. Bu sayede programın zorluğu ortadan kalkacak ve oyunu zevkle bitirebileceksiniz
Evet sanırım bu aylık bu kadar tiyo yeter. Bize yazmayı unutmazsınız umarım. Merak etmeyin bir tiyolarımıza ara vermeyeceğiz. Ayrıca bundan sonraki sayımızda bu bölümümüzü biraz daha genişletmeyi düşünüyoruz. Bize göndereceğiniz mektuplarda yalnızca tiyo değil bu bölümde olmasını istediğiniz şeyleri de (çeşitli oyun çözümleri veya yeni çıkacak oyunlarla ilgili haberler gibi) yazarsanız seviniriz. Şu anda Tunç karşımızda makinede JUMP'N JACKSON'a daldığı için yazımızı yine ben noktalıyorum. Yaz tatili yaklaşırken bilgisayarınızın başında geçmek için sızlandığınızı tahmin ediyorum. Tabi daha önce başınızdaki sınavlardan sağsağlim ve tek parça! olarak kurtulmanızı dilerim. Bütün tiyolar sizinle olsun, başarılar..
H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR H.T. BİLGİSAYAR