İNTRO EFEKTLERİ
Herkese merhaba. İlk olarak geçen sayıda intro teknikleri olarak başladığımız yeni yazı dizisinin adını “intro efektleri” olarak değiştirdiğimizi belirtelim. İnternette yapacağınız kısa bir araştırma ile yüzlerce intro bulabilir ve bu introlarda birbirinden güzel efektler görebilirsiniz. Bu efektleri yapabilmek için bir yerden başlamanız gerekmektedir. İşte bu nedenle “intro efektleri” bölümü sizin için başlangıç olacaktır. Benim bu sayfalarda vereceğim efekt örnekleri sadece fikir amaçlıdır ve daha güzel ve orijinal efektleri sizler de yapabilirsiniz. Aslında bu giriş yazısını geçen sayıda yazmam gerekiyordu. Neyse lafı uzatmadan bu sayıdaki efektten kısaca bahsedeyim. Efektimiz “bouncing balls” denilen zıplayan toplar efektidir. Efekte ait ekran görüntüsünü program listesinin sonunda görebilirsiniz. *=$0801 .word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0 start sei ;İnterruptları engelle jsr $e544 ;Ekranı sil.(geri dönüşte X registerinde 1 vardır) dex ;X registerini 1 azalt. (X registeri 0 olur) stx $d020 ;Ekran dış rengi siyah stx $d021 ;Ekran iç rengi siyah loop0 lda #(sdata/64) ;sprite datasının yerini sta $07f8,x ;sprite pointerlerine yaz lda koor,x ;0-3 arası sprite’ların koordinat değerlerini sta $d000,x ;VIC’teki ilgili koordinat registerlerine kopyala lda koor+8,x ;4-7 arası sprite’ların koordinat değerlerini sta $d000+8,x ;VIC’teki ilgili koordinat registerlerine kopyala lda #$0f ;#$0f (açık gri) değerini sta $d027,x ;sprite renk registerlerine yaz inx ;X registerini 1 arttır. cpx #$08 ;8 oldu mu ? bne loop0 ;olmadıysa işlemleri tekrarla lda #$ff ;Bütün sprite'ları sta $d015 ;göster ve sta $d01c ;multicolor yap ldx #$0b ;koyu gri renk kodu ldy #$0c ;gri renk kodu stx $d025 ;multicolor1 renk registeri sty $d026 ;multicolor2 renk registeri lda #<irq ;interrupt rutinimizin başlangıç adresi LO byte’ı ldx #>irq ;interrupt rutinimizin başlangıç adresi HI byte’ı sta $0314 ;interrupt vektörü LO byte’ına yaz stx $0315 ;interrupt vektörü HI byte’ına yaz ldx #$01 ;raster line interrupt'ı yapacağımızı stx $d01a ;VIC’e bildiriyoruz ldy #$80 ;256’dan büyük X koordinatına sahip sprite için sty $d010 ;EXB’yi aktif hale getiriyoruz cli ;interrupt'ları serbest bırakıyoruz jmp * ;sonsuz döngüye gir. irq inc $d019 ;bir sonraki interrupt'a izin ver wait lda $d012 ;raster line adresini oku bne wait ;sıfır değilse bekle. Sıfırsa devam et lda delay ;Gecikme sayacını oku bne exit ;sıfır değilse çık. lda #$0a ;sıfır olduysa başlangıç değerini
C64 TÜRKİYE #7 18
sta
delay
;gecikme sayacına yaz.
ldx
cnt
;tablo sayacının al
cpx
#$20
;$20 (32) oldumu?
bne
cont
;olmadıysa sıçra.
ldx
#$08
;evet olmuş. Tablo sayacının başlangıç
stx
cnt
;değerini tablo sayacına yaz.
cont
ldy
#$00
;Y=0 sprite koordinat sayacı
loop1
lda
table,x
;tablo sayacına göre tablodan o anki byte’ı oku
sta
$d001,y
;o anki sprite’in Y koordinat adresine yaz.
inx
;X registerini 1 arttır
iny
;Y registerini 1 arttır
iny
;Y registerini 1 arttır
cpy
#$10
;Y $10 (16) oldumu?
bne
loop1
;Olmadıysa işlemleri tekrarla
inc
cnt
;Tablo sayacını 1 arttır
exit
dec
delay
;gecikme sayacını 1 azalt
jmp
$febc
;Kontrolu işletim sistemine devret
cnt
.byte 0
;tablo sayacı
delay
.byte 0
;gecikme sayacı
*=$08c0
;spriteların şekil datalarının başlangıç adresi
sdata
.byte $00,$55,$00,$01,$77,$40,$05,$dd
.byte $d0,$07,$7f,$b0,$15,$ee,$e4,$17
.byte $fb,$bc,$1d,$ee,$ac,$57,$fa,$a9
.byte $5d,$ea,$ab,$77,$ba,$ab,$5f,$ea
.byte $ab,$77,$ba,$ab,$5d,$ea,$ab,$57
.byte $fa,$a9,$15,$ea,$a8,$17,$fa,$ac
.byte $15,$ee,$e4,$07,$7b,$b0,$05,$ff
.byte $d0,$01,$77,$40,$00,$55,$00,$00
koor
.byte $3c,$b0,$5c,$b0,$7c,$b0,$9c,$b0
;spriteların başlangıç
.byte $bc,$b0,$dc,$b0,$fc,$b0,$1c,$b0
;koordinat değerleri
table
.byte $b0,$b0,$b0,$b0,$b0,$b0,$b0,$b0
;tablo sayacına göre
.byte $b8,$c0,$c8,$d0,$d8,$e0,$d8,$d0
;spriteların Y koordinat
.byte $c8,$c0,$b8,$b0,$b8,$c0,$c8,$d0
;değerleri
.byte $d8,$e0,$d8,$d0,$c8,$c0,$b8,$b0
.byte $b8,$c0,$c8,$d0,$d8,$e0,$d8,$d0
.end
;programın sonu

Zıplayan toplarımızın ekran görüntüsü.