1x1 TEXT FADER

İNTRO EFEKTLERİ 1x1 TEXT FADER

;=======================================================================================; ; 1x1 text fade intro efekt programı ; ; C64 TÜRKİYE dergisi sayı 8 için hazırlanmıştır ; ; 15-05-2005 / İsmail "hades" Şahin ; ; hades@amigaturk.com www.c64turkiye.com www.amigaturk.com c64turkiye@amigaturk.com ; ;=======================================================================================; *=$0801 prg .word nextline .word 2005 .byte $9e .text "2061" .byte 0 nextline .word 0 start etiketli yere kadar olan kısımda LIST komutuyla göreceğiniz 2005 SYS2061 satırını oluşturuyoruz. start sei lda #<irq ldx #>irq ldy #$01 sta $0314 stx $0315 sty $d01a

İnterruptları engelledikten sonra, interrupt vektörlerini bizim rutinimizi gösterecek şekilde değiştiriyoruz ve satır tarama interruptı yapacağımızı VIC'e bildiriyoruz. lda color jsr $e536 stx $d015 stx $d01d dex stx $d020 stx $d021 stx $d027

Ekranı temizliyoruz ve geri dönüşte X registerinin değerini (X registerinde 1 değeri var) 1 numaralı sprite'ı açmak ($D015) ve X ekseninde genişletmek ($D01D) için kullanıyoruz. Sonra X registerini 1 azaltıp ekran renklerini ve 1 numaralı sprite'ın rengini siyah yapıyoruz. lda #$ff loop0 sta sdata,x inx bne loop0

Sprite şekil datası için kullanılacak hafıza bölgesini $FF ile dolduruyoruz. 
Böylece programda kullanacağımız sprite'ın şekli dikdörtgen oluyor. 
lda 
#(sdata/64) 
sta 
$07f8

Sprite şekil datasının bulunduğu bölgeyi sprite pointerine yazıyoruz.

C64 TÜRKİYE  #8                                                                                                                                              10 
ldx 
#$18 
ldy 
#$25 
stx 
$d000  
sty 
$d001
Sprite'ın X ve Y koordinatlarını belirliyoruz. 
lda 
#<text1 
ldx 
#>text1 
sta 
get_tx+1 
stx 
get_tx+2
Ekrana yazdıracağımız yazının başlangıç adresini programdaki ilgili yere 
kopyalıyoruz. 
ldx 
#$00 
loop1  
lda 
text1,x 
sta 
$0400+13,x 
inx 
cpx 
#$0e 
bne 
loop1
İlk yazımızı ekrana yazıyoruz. 
lda 
max_del 
sta 
delay_cnt
Sprite hareket gecikme sayacını ayarlıyoruz 
lda 
max_move 
sta 
move_cnt
Sprite hareket sayacını ayarlıyoruz. 
lda 
max_text 
sta 
text_cnt
Ekrana yazdırılacak maksimum text sayacını ayarlıyoruz. 
lda 
#$ee 
sta 
dir
Sprite'ın ilk hareket yönü için "INC" komut kodunu programdaki yerine yazıyoruz. 
cli 
jmp 
*
İnterruptları serbest bırakarak programı sonsuz döngüye sokuyoruz. 
irq 
inc 
$d019 
dec 
delay_cnt 
bne 
exit
Hareket gecikme sayacını bir azaltıyoruz. Sıfır olmadıysa programdan çıkıyoruz.  
lda 
max_del 
sta 
delay_cnt

Hareket gecikme sayacı sıfır olduysa, sayacı tekrar yüklüyoruz ve devam ediyoruz.

C64 TÜRKİYE  #8                                                                                                                                              11 
dec 
move_cnt 
bne 
dir 
lda 
max_move 
sta 
move_cnt 
lda 
dir 
eor 
#$20 
sta 
dir

Hareket sayacını bir azaltıyoruz ve sıfır olmadıysa "dir" yazan yere gidiyoruz. Sıfır ise hareket sayacını tekrar yüklüyoruz. “EOR” ile hareket yönünü değiştiriyoruz. cmp #$ee beq drx

Hareket yönünü kontrol ediyoruz. Eğer "INC" komutu ise (yani hareket soldan sağa 
ise) "drx" yazan yere gidiyoruz. 
lda 
get_tx+1 
clc 
adc 
#$0e 
sta 
get_tx+1 
bcc 
cont 
inc 
get_tx+2

Eğer "DEC" ise (yani sağdan sola ise) ekrana basılacak yeni yazının adresini hesaplayıp programdaki yerine yazıyoruz. Hesaplama sırasında elde biti "1" olduysa yazıların alınacağı adresin yüksek baytını 1 arttırıyoruz. Değilse aşağıda devam ediyoruz. cont dec text_cnt bne get_text lda max_text sta text_cnt lda #<text1 ldx #>text1 sta get_tx+1 stx get_tx+2

Ekranda gösterilecek yazı sayacını 1 azaltıyoruz. Sıfır olmadıysa "get_text" bölümüne gidiyoruz. Eğer sıfır olduysa Text sayacını ayarlıyoruz ve ilk yazının adresini programda ilgili yere yazıyoruz. get_text ldx #$00 get_tx lda text1,x sta $040d,x inx cpx #$0e bne get_tx

Bu kısımda ekrana yazı yazıyoruz. 
drx 
lda 
col+1 
eor 
color 
sta 
col+1
Yukarıdaki komutlarla renk belleği için kullanacağımız değeri siyah/sarı şeklinde 
değiştiriyoruz. 
dir 
inc 
$d000 
lda 
$d000 
sec 
sbc 
#$10 
lsr 
lsr 
lsr
C64 TÜRKİYE  #8                                                                                                                                              12 
tax 
col 
lda 
#$00 
sta 
$d800,x

Bu son kısımda ise sprite'ın X koordinat değerini değiştiriyoruz. Sonra bu değerden $10 (16) sayısını çıkarıyoruz. 3 kez sağa kaydırıp rengini değiştireceğimiz bellek pozisyonu için sütun değerini elde ediyoruz. Bu değeri X registerine kopyalıyoruz. En son olarak LDA komutunun parametresindeki değeri o anki renk belleği pozisyonuna yazıyoruz. exit jmp $febc

Son komutla ise kernaldaki işletim sistemi rutinine geri dönüyoruz. 
move_cnt 
.byte 0 
;O anki hareket sayacı 
delay_cnt 
.byte 0 
;O anki hareket gecikme sayacı 
text_cnt 
.byte 0 
;O anki text sayacı 
color  
.byte 7 
;Default renk (sarı) 
max_text 
.byte 10 
;Ekranda gösterilecek maksimum text sayısı 
max_del 
.byte $80 
;Default gecikme değeri 
max_move 
.byte $e0 
;Default hareket miktarı 
text1  
.scrl "--------------" 
.scrl "c64 turkiye #8" 
.scrl "introlar  icin" 
.scrl "sade bir efekt" 
.scrl "1x1 text fader" 
.scrl "code:hades/asc" 
.scrl "  10-05-2005  " 
.scrl "11111111111111" 
.scrl "22222222222222" 
.scrl "33333333333333" 
sdata  
=$09c0 
;Sprite datasının bulunduğu bölge 
.end