Program Döküm Eki sayı 56, sayfa 2

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 2

Merhaba makina dili kullanıcıları. Makina dilinin püf noktaları yazımıza, Smooth Scroll programımızı açıklayarak bu satırlardan devam ediyoruz. Bu yazının arkasında listesini gördüğünüz program RASTER interruptlarını kullanarak ekranının en üst satırında herhangi uzunlukta bir metini piksel piksel kaydırır. Programın çalışma prensibini daha iyi anlamanız için burada satır satır açıklayacağım.

Programın en başında bulunan SEI komutuyla bütün interruptlar kapatılır. Bunun amacı, biz interrupt vektörünü değiştirirken olabilecek bir interrupt'ın henüz tam değiştirilmemiş olan vektörler üzerinden belleğte saçma bir adrese sıçrama yaparak bilgisayarımızın kitlenmesini engellemektir.

Lda IRQst Sta IRQvec Lda IRQst Sta IRQvec+1

Bu satırlarla interrupt vektörünü, IRQvec label'ı tarafından gösterilen rutini gösterecek şekilde ayarlarız.

Lda 1 Sta IMR

Yazımızda da anlattığım gibi IMR ($D01A) adresiyle değişik interrupt türlerinin oluşmasını sağlayabiliriz. Burada IMR'ye 1 değerini vererek RASTER INTERRUPT'ların oluşmasını sağlıyoruz.

Lda 50 Sta raster

Interrupt'ın tam ekran başında oluşması için raster'e bu satırın değeri olan 50'yi veriyoruz.

Lda vcr And $7F Sta vcr

Vcr ($D011) adresinin 8. bitini yani 9. raster bitini temizliyoruz. Böylece interrupt'ımız $0132. satırda değil $0032. raster satırında gerçekleşiyor.

Lda 0 Sta cra

Cra ($DC0E) adresinde sistem zamanlayıcısı A'yı ilgilendiren birçok olayın kontrolü yapılır. Bunlar arasında zamanlayıcının açılıp kapatılması, frekansının 50 veya 60 Hz olarak ayarlanması, zamanlayıcı sıfırlanınca durması veya başlangıç değerini alarak tekrar çalışması gibi kontroller de vardır. Bu adrese verilen bir sıfır değeri A Zamanlayıcısını durdurur.

Lda $7F Sta icr

ICR ($DC0D) adresinin son bitini sıfırlayarak, değeri 1 olan bitlerin kontrol ettiği interruptların oluşmasını engellenebilir. Burada kullandığımız örnekte Raster dışında, zamanlayıcı A ve B'yi içeren tüm interruptlar kapatılıyor.

Lda $7 Sta Xpos

Bu komutlar sistemle ilgili değildir. Programımız bu adresteki değeri satırın x pozisyonunun kaç olduğunu hatırlamak için kullanıyor. Satırın x pozisyonu 0 ile 7 arasında herhangi bir sayı olabilir. bu değeri sXpos ($D016) adresine vererek Multi-color modunu kapatır. Ekran sütun sayısını 38'e indirir ve istenilen miktarda sağa kaydırırız.

Daha sonra CLI komutuyla interruptları serbest bırakır, RTS komutuyla BASIC'e geri döneriz.

Sıra interrupt rutinimizin nasıl çalıştığını anlatmaya geldi.

Programın en başında bulunan INC IRR komutuyla Raster interrupt'ının bitini temizleyerek yeni bir raster interrupt'ının oluşmasına izin veriyoruz.

Lda Xpos Sta sXpos

Bu komutlarla satırın gereken miktarda sağa kayması sağlanır. Bu arada ekranın kolon sayısı 38'e düşürülerek yeni çıkan harflerin aniden belirmesi engellenir. Meraklıları bu rutini

Lda Xpos Ora $08 Sta sXpos

olarak değiştirerek, 'ekran 40 kolonda kalsaydı ne olurdu?' sorusuna cevap alabilirler.

Lda raster Cmp 59 Bcc bekle

Programın bu noktasında elektronun 59. raster satırına yani ikinci karakter satırının başına ulaşmasını bekliyoruz. Tabi ki burada ikinci bir

Klavyeyle gezinmek için ← ve → tuşları.