C64 Türkiye sayı 6, sayfa 10

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 10

1x1 SCROLL VE RENKLİ RASTER ŞERİTLERİ

Bu sayıdan itibaren intro programcısı olmak için çalışmalara başlıyoruz. İlk konumuz öncelikle neredeyse her introda karşımıza çıkan “text scroll” ve “color raster” efektleri. Bir intro yapabilmek için en başta iyi bir assembler bilgisi, C64’ün donanım adreslerini iyi bilmek ve biraz da dizayn yeteneği gereklidir. Bunun yanında elinizin altında çeşitli karakter setleri, müzikler, sprite’lar, logolar ile çeşitli editörler (karakter, sprite, logo, grafik editörleri vs...) bulunmalıdır.

Programımız standart C64 karakter setini kullanmaktadır ve müzik yoktur.

(C64ASM V1.1 ile compile edilecek şekilde yazılmıştır.)

*=$0801 .word nextline .word 2003 ; 2003 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0 start sei ; interruptları engelle lda #$01 ; Yazı rengi beyaz olacak şekilde jsr $e536 ; ekranı sil. lda #$07 ; kayma miktarının ilk değerini sta xpos ; “xpos” adresine yaz lda #<text0 ; Scroll için text’in hafıza adresini ldx #>text0 ; LO HI şeklinde sta tbase+1 ; programdaki karakter stx tbase+2 ; okuma kısmına yaz. lda #<int0 ; kendi interrupt rutinimizin ldx #>int0 ; başlangıç adresini sta $0314 ; interrupt vektörlerine stx $0315 ; kopyala lda #$00 ; Bu komutlar mutlaka ldx #$01 ; olmalıdır ve ldy #$7f ; standarttır. sta $dc0e ; CIA1 zamanlayıcılarını sıfırla stx $d01a ; Raster interrupt enable olacak sty $dc0d ; CIA1 interrupt kontrol registeri cli ; interruptları serbest bırak jmp * ; normal kod sonsuz döngü olsun int0 inc $d019 ; Bir sonraki interrupta izin ver lda xpos ; Kayma miktarını sta $d016 ; VIC kontrol (scroll) registerine ver. lda #$38 ; interrupt yapılacak raster değerini raster0 cmp $d012 ; VIC’in raster registeriyle karşılaştır. bne raster0 ; eşit değilse tekrar karşılaştır. ldx #$00 ; Eşit olmuş ve sayıcıyı sıfırlayalım. loop0 lda colortab,x ; Renk tablosundan o anki renk değerini al sta $d020 ; VIC’in ekran dış renk registerine yaz. sta $d021 ; VIC’in ekran iç renk registerine yaz. ldy delaytab,x ; Gecikme tablosundan o anki değeri al delay0 dey ; değeri 1 azalt bne delay0 ; “0” olmadıysa tekrar azaltma yap. inx ; Sayacı 1 arttır. cpx #$13 ; $13 (19) olmuşmu? bne loop0 ; olmadıysa işlemleri tekrarla.

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