Konu Başlığı: cgtr intro yapıyoruz-6(text fade)
Gönderen: joker_ üzerinde Şubat 28, 2014, 22:49:56 ÖS
evet intromuza devam ediyoruz. Şimdiki efektimiz text fade.Bu efektte ekrandaki mesaj,silinip yerine başka mesaj çıkıyor.Efekt ile daha detaylı açıklamayı,Hades'in yazdığı c64Türkiye dergisinde bulabilirsiniz. Source kodları. !to"text_fade.prg",cbm
text_fade_charset = $2800
text_fade_satiri = $06b2
text_renk_satiri = $dab2
kapanis_renk_satiri = $dab2
* = $0801 ;<--Kodumuzun başlangıç adresi
jsr $e544 ;<--Ekran silme
lda #$00 ;<--siyah renk kodu sta $d020 ;<--Dış ekran sta $d021 ;<--İç ekran
ldx #0 lda #$00 - sta $da00,x sta $db00,x inx bne - ;====Burada irq ayarlarımızı yapıyoruz=======
sei
lda #$7f sta $dc0d
lda #$01 sta $d01a
lda #$00 sta $dc0e lda #$1b sta $d011
lda #$10 sta $d012 lda #<irq sta $0314 lda #>irq sta $0315 cli jmp * ;====irq 'ya giriyoruz======= irq inc $d019 lda #$1a sta $d018
jsr text_fade
lda #$ff sta $d012
jmp $ea81
;============ text fade rutinimiz ======================= text_fade ;Diğer satırı yazdırmadan önce bir süre bekliyoruz. lda count ;text fade'in degisme süresi cmp #$50 beq + inc count ;text fade counter'ı bir arttırıyoruz.
rts + ldx #$00 fade_loop lda fade_text,x ;ilk satıra mesajimizi basiyoruz cmp #$00 ;text'in sonuna gelip gelmediğimizi kontrol ediyoruz. bne fade_devam ;eğer gelmediysek devam ediyoruz
;eğer text'in sonuna geldiysek mesajimizi başa alıyoruz.
lda #<fade_text ;mesajin alçak byte'ını sta fade_loop+1 ;okuma alanının alçak byte'ına lda #>fade_text ;yüksek byte'ını sta fade_loop+2 ;okuma alanının yüksek byte'ına kopyalıyoruz. rts ;rutinden çıkıyoruz.
;okuduğumuz mesaji ekranda görülmesini istediğimiz satira yazıyoruz. fade_devam sta text_fade_satiri,x inx ;sayacımızı 1 arttırıyoruz cpx #20 ;mesajimiz 20 karakter genişliğinde olduğundan bne fade_loop ;kontrol ediyoruz,olmadıysa tekrar geri gidiyoruz. ;burada mesajimizin renkli bir şekilde açılmasını yapıyoruz.
lda renk_count ;tablodaki renklerimizin sayısını tutacak bir counter oluşturuyoruz. cmp #00 ;counter'ın sıfır olup olmadığını kontrol ediyoruz. beq ++ ;eğer sıfır olduysa atla.
dec renk_count ;counter'ımızı 1 azaltıyoruz. ldx #$00 ldy renk_count ;renkleri tutan counter'ın o anki değerini y register'ına kopyalıyoruz -- lda text_renk,y ;renk değerlerinin tutulduğu tabloya gidip,y mesafedeki rengi okuyoruz. acilis_renk_satir sta text_renk_satiri,x ;okuduğumuz rengi renk register'ına veriyoruz. inx ;counter'ı 1 arttırıyoruz. cpx #20 ;okuduğumuz ve renk register'ına yazdığımız rengi 20 karakter boyunca kopyalıyoruz. bne -- rts ++ lda text_count ;ekran da alt alta 3 tane text göstereceğimiz için cmp #2 ;text sayisini kontrol ediyoruz.Counter 0 dan başladığından (0 1 2) yani 3 olup beq + ;olmadığını kontrol ediyoruz. ;alt satira yaz inc text_count ;counter'ı 1 arttırıyoruz.
;bir satiri yazıp,diğer satira geçmeden önce yazacağımız satira ait değerleri ;set ediyoruz
lda fade_loop+1 ;text mesajini clc ;20 karakter ileriden okuyacak şekilde adc #20 ;text'i kopyaladığımız okuma alanının sta fade_loop+1 ;alçak byte'ını arttırıyoruz.
bcc ++ ;eğer 256 olmadıysa devam et inc fade_loop+2 ;256'yı geçtiyse okuma alanının yüksek byte'ını 1 arttır. ++ ;text okuma alanında yaptığımız işlemleri ;text'i ekrana bastığımız kısma da yapıyoruz.
lda fade_devam+1 clc adc #$50 sta fade_devam+1
bcc ++
inc fade_devam+2 ++ ;aynı işlemi text renklerimizi ekrana bastığımız ;kısım içinde yapıyoruz.
lda acilis_renk_satir+1 clc adc #$50 sta acilis_renk_satir+1
bcc ++
inc acilis_renk_satir+2 ++ lda #$00 ;textleri değiştirmek için sta count ;bekletme yaptığımız counter'ı sıfırlıyoruz.
lda #32 ;text renklerinin counter'ına sta renk_count ;32 yazıyoruz. ;burada renklerin sayısını tutan counter'a 32 yazmamızın nedeni ;text renk tablomuzda 32 renk vardır.Bu renkler açık yeşilden başlayıp ;siyaha doğru değişerek gitmektedir.Biz tablonun sonundan okumaya başlayarak,geriye duoğru okuyoruz ve son renk ekranda kalıyor. ;texti ekrandan silerken yine aynı tabloyu kullanacağımızdan 2 farklı tablo kullanmak ;zorunda kalmıyoruz. rts ;üc satir olduysa eger ekrandaki text'i sırayla siliyoruz + lda kapanis_renk_count ;yukarıda text'e renk verirken yaptığımız işlemi yapıyoruz. cmp #32 ;fakat buradaki tek fark tablodaki renk değerlerini sondan değil baştan okuyoruz. beq ++
inc kapanis_renk_count ldx #$00 ldy kapanis_renk_count -- lda text_renk,y kapanis_renk sta kapanis_renk_satiri,x inx cpx #20 bne -- rts ++ lda renkli_satir_sayac cmp #2 beq +++
inc renkli_satir_sayac
lda kapanis_renk+1 clc adc #$50 sta kapanis_renk+1
lda kapanis_renk+2 adc #$00 sta kapanis_renk+2
lda #00 sta kapanis_renk_count rts
+++ ; burada artık ekrandaki text'imizi sildik.
;yeni text'i basacağımız text alanın başa alıyoruz.
lda #<text_fade_satiri sta fade_devam+1 lda #>text_fade_satiri sta fade_devam+2
;aynı işlemi açılış renk alanı ve lda #<text_renk_satiri sta acilis_renk_satir+1 lda #>text_renk_satiri sta acilis_renk_satir+2
;kapanış renk alanı için yapıyoruz
lda #<kapanis_renk_satiri sta kapanis_renk+1 lda #>kapanis_renk_satiri sta kapanis_renk+2
;text'imizi 20 karakter ileriye taşıyarak ;en son satirda kalan text'in ekrana yeniden basılmasını ;engelliyoruz.
lda fade_loop+1 clc adc #20 sta fade_loop+1
bcc ++ ;eğer 256 olmadıysa devam et inc fade_loop+2 ++ ;burada counter değerlerimizi sıfırlıyoruz.
lda #$00 sta count sta text_count sta renkli_satir_sayac sta kapanis_renk_count
lda #32 ;text renklerinin counter'ına sta renk_count ;32 yazıyoruz.Çünkü ilk satıra geri dönceğiz ve counter'ımızı en son sıfırlamıştık. rts
;=========== kodumuzun sonu ======================
count !by 0 text_count !by 0 renk_count !by 32
kapanis_renk_count !by 0
renkli_satir_sayac !by 0 text_renk !by $0d,$05,$05,$05 !by $03,$03,$03,$03 !by $0f,$0f,$0f,$0f !by $03,$03,$03,$03 !by $05,$05,$05,$05 !by $08,$08,$08,$08 !by $09,$09,$09,$09 !by $00,$00,$00,$00
;====================================================== fade_text !scr " commodore.gen.tr " !scr " uyelerine " !scr " sevgilerimle " !scr "bu introdaki kodlari" !scr " kullanarak " !scr " sizde " !scr " bir seyler " !scr " uretebilirsiniz " !scr " hatta " !scr " 7dx partide " !scr "yayinlayabilirsiniz " !scr " "
!by 0 ;=============text fade için karakter seti==========
* = text_fade_charset !bin "text_fade_charset.prg",,2
Konu Başlığı: Ynt: cgtr intro yapıyoruz-6(text fade)
Gönderen: LW3D üzerinde Mart 01, 2014, 21:19:55 ÖS
O kadar ters bir zamanda yayınladın ki :( deneyemediğim yazamadığım için, çok canım sıkılıyor :( Yinede çok teşekkürler...
Konu Başlığı: Ynt: cgtr intro yapıyoruz-6(text fade)
Gönderen: joker_ üzerinde Mart 01, 2014, 22:21:16 ÖS
Olsun sonucta forumda kaynak olarak dursun,vaktin olunca denersin
Konu Başlığı: Ynt: cgtr intro yapıyoruz-6(text fade)
Gönderen: Simon (Özay Turay) üzerinde Mart 02, 2014, 05:11:54 ÖÖ
Evet forumun en güzel yanı da bu zaten. Gözden kaçırsan bile birisi hortlatıyor ya da Kim Nerede bölümünü incelerken karşına çıkıveriyor. ;)
Bu arada ben denedim, gayet hoş olmuş. Müsait zamanda inceleyeceğim kaynak kodunu. Ben denemelerimde bu aşamaya hiç gelememiştim. :P
|