1x1 TEXT FADER
Retro bilgisayarİ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

