C64 Türkiye sayı 7, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

C64 TÜRKİYE #7 22 ile yazılmış olan değer birbirine eşitse raster interrupt latch biti “1” olur. Kafanızın karışmaya başladığından eminim. Ama güzel bir intro veya demo yapabilmek için bunları ve daha fazlasını bilmeniz gerekmektedir.

Raster interruptını kullanmadan önce yapılacak bir işlem daha vardır. $D01A adresindeki interrupt enable registerine hangi interruptı kullanacağımızı bildirmemiz gerekmektedir. $D01A adresine $1 sayısını yazdığımızda artık raster interruptını kullanabiliriz. Elimizde bir adres daha var $D019 adresi. $D019’da bir interrupt oluştuğunda $D01A ile seçilen interrupta ait bit “1” olur ve programcı hangi interruptın meydana geldiğini anlayabilir. Fakat $D019’daki ilgili bit “1” olduktan sonra hep öyle kalır. Bir sonraki interrupt için bu adresin temizlenmesi gerekir. Şimdi yazdıklarımızı toparlayalım ve basitleştirelim.

1- $D01A adresine $1 yazarak raster interruptını kullanacağımızı belirleriz. 2- $D012 adresine hangi rasterde interrupt yapacağımızı yazarız. 3- $D019 adresini interrupt rutini içinde temizleriz. 4- $D012’yi interrupt rutini içinde kontrol edip rutinimizi çalıştırırız.

Bütün bu öğrendiklerimizle ilgili bir örnek verelim. *=$0801 .word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0 start sei ;interruptları durdur lda #<irq ;interrupt vektörünü ldx #>irq ;kendi rutinimizi sta $0314 ;gösterecek şekilde stx $0315 ;değiştir. lda #$30 ;raster değeri sta $d012 ;raster registerine lda #$01 ;raster interrupt yapacağımızı sta $d01a ;interrupt enable registerine bildir. cli ;interruptları serbest bırak. Jmp * ;sonsuz döngüye gir. irq inc $d019 ;bir sonraki interrupt için temizle lda #$30 ;bu değeri wait0 cmp $d012 ;raster registeri ile karşılaştır. bne wait0 ;eşit değilse bekle. Eşit ise devam et lda #$01 ;aküye 1 sayısı ldx #$0b ;X’e $0b ldy #$0a ;Y’ye $0a tekrar1 dex ;x registerini 1 azalt bne tekrar1 ;0 oluncaya kadar tekrarla sta $d020 ;0 olduysa aküdeki değer ekranın dış rengi ve sta $d021 ;ekranın iç rengi olsun tekrar2 dey ;y registerini 1 azalt bne tekrar2 ;0 oluncaya kadar bekle. 0 olduysa sty $d020 ;ekranın dış rengi ve sty $d021 ;ekranın iç rengi olsun jmp $ea81 ;işletim sistemine geri dön. .end X registerini renk şeritinin başlangıcını sabitlemek için, Y registerini ise biti- şini sabitlemek için kullanıyoruz. Daha doğrusu çizginin zamanlaması için kullanıyoruz. Eğer bu sayıları değiştirirseniz çizginiz titremeye başlar.

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