commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: joker_ üzerinde Şubat 28, 2014, 22:49:56 ÖS



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ı.

Kod:
!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