Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore YazılımColor Wash / Renk Geçişi Efekti
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: Color Wash / Renk Geçişi Efekti  (Okunma Sayısı 7312 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« : Kasım 25, 2014, 18:08:01 ÖS »

Öğrendiğim efektleri açıklamaya devam ediyorum. Bu seferki efekt çok sık kullanılan, introların olmazsa olmazlarından biri, renk geçişi efekti. Kodum çalıştığında aşağıdaki bir ekranım olacak.




* colorwash.png (1.52 KB, 384x272 - Görüntüleme: 3752 kez.)
« Son Düzenleme: Kasım 25, 2014, 18:17:23 ÖS Gönderen: wizofwor » Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #1 : Kasım 25, 2014, 18:17:31 ÖS »

İlk olarak ortalığı toparlamak için sık kullandığım rutinleri ayrı bir dosyaya kopyalıyorum. Böylece hem kodum daha sade görünecek. Hem de sürekli eski dosyalardan kopyala/yapıştır uğraşmaktan kurtulacağım.

Boş bir dosya açıp sık kullandığım Basic başlangıcı ve ekran temizleme rutinlerini buraya kopyalıyorum ve macro olarak tanımlıyorum. Daha sonra ana dosyamda bu makroları çağıracağım ve derleyici gerekli kodları benim yerime yazacak.

Kod:
; standart.asm
; macros for standart codes
;============================================================================

!macro BASIC_START {
* = $0801                               ; BASIC start address (#2049)
!byte $0d,$08,$dc,$07,$9e,$20,$34,$39   ; BASIC loader to start at $c000...
!byte $31,$35,$32,$00,$00,$00           ; puts BASIC line 2012 SYS 49152
}

!macro CLEAR_SCREEN {
ldx #00
lda #$20
.loop sta SCREEN_RAM,x
sta SCREEN_RAM+255,x
sta SCREEN_RAM+510,x
sta SCREEN_RAM+765,x
sta SCREEN_RAM+1020,x
dex
bne .loop
}
Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #2 : Kasım 25, 2014, 18:25:46 ÖS »

İkinci bir dosya ana programı yazmaya başlıyorum.

Kod:
!to "build/colorwash.prg",cbm
!src "standart.asm"

;----------------------------------------
;CONSTANTS
;----------------------------------------

SCREEN_RAM = $0400
COLOR_RAM = $d800
EFFECT_COUNTER = $02

+BASIC_START

İlk önce standart.asm dosyasını çağırmam lazım ki kaydettiğim makrolarımı kullanabileyim. Bunu '!src' komutuyla yapıyoruz.

Peşinden sık kullandığım bellek adreslerini tanımlıyorum. Bu kodda ekran ve renk belleğini kullanacağım. Bir de sayaç olarak kullandığım zero page adresi var.

Basic hafızasına SYS 49152 yazacak kodu makro olarak kaydetmiştim. Bu makroyu'da +BASIC_START komutuyla çağırdıktan sonra ana programa başlamaya hazırım.
Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #3 : Kasım 25, 2014, 18:32:50 ÖS »

Kod:
	* = $c000

+CLEAR_SCREEN

;Metnimizi ekrana yerleştirelim

ldx #00
- lda metin,x
sta SCREEN_RAM+40*5,x
inx
cpx #120
bne -
Kod:
	;-----------------------------------------
; DATA
;-----------------------------------------

metin
!scr "          + ++ hi there! ++ +           "
!scr "   ---------------------------------    "
!scr "   this is a smiple colorwash effect    "

Derleyiciye başlangıç adresini verdikten sonra ikinci makromu kullanarak ekranı temizliyorum. Ve metnimi yazıyorum. Burdaki döngü rutini 3x40=120 karakterlik metni tablodan okuyup ekran belleğine yazıyor. Ekran belleği adresini SCREEN_RAM+40*5 şeklinde yazıyorum ki daha sonra okuduğumda kodun 5. satıra yazdığını bir bakışta anlayayım. Hesap makinesiyle uğraşmayayım.
Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #4 : Kasım 25, 2014, 18:48:04 ÖS »

Şimdi geldik programın can alıcı kısmına.

Kod:
	;Efect sayacını maksimum değere getirelim
lda #40
sta EFFECT_COUNTER

;Ekran tazelenene kadar bekleyelim
;1/50 saniye

cwash lda #00
- cmp $d012
bne -

;Renk geçişi efekti iki index yazmacını
;birlikte kullanıyor. Y okunacak rengi
;X yazılacak adresi indexliyor

ldy EFFECT_COUNTER
ldx #00
- lda renkler,y
sta COLOR_RAM+40*5,x
inx
sta COLOR_RAM+40*6,x
inx
sta COLOR_RAM+40*7,x
iny
dex
cpx #40
bne -

dec EFFECT_COUNTER

lda #00
cmp EFFECT_COUNTER
bne cwash

lda #40
sta EFFECT_COUNTER

jmp cwash
Kod:
renkler
!by  14,14,14,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,15,01,07
!by  01,07,15,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,14,14,14

!by  14,14,14,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,15,01,07
!by  01,07,15,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,14,14,14

Renk geçişi efekti için 40 değerlik bir veri tablosu hazırladım ve Joker_'den öğrendiğim taktikle bu tabloyu iki kez kopyaladım. Toplam 80 değerlik bir tablom oldu.

Bir kereye mahsus olmak üzere efekt sayacımı 40 değerini yükleyip raster satırının ekranın başına gelmesini bekliyorum. (Eğer beklemeseydim efekt çok hızlı akacaktı.)
PAL tarama hızı 50Hz olduğuna göre 0,02sn beklemiş olacağım.

Renk geçişi efekti için kullandığım rutin X ve Y indexlerini aynı anda kullanıyor. Y'de efekt sayacım var. X ise 0'dan 39'a kadar sayacak. STA komutlarının indexi X yani her seferinde 0-39'a kadar bütün karakterlerin rengini değiştiriyorum. Rengi okuduğum LDA komutunun indexi ise Y. Y sıfırdan değil, INDEX_COUNTER'dan saymaya başlıyor. Bu seyade INDEX_COUNTER değerini bir azalttıkça tablodan okuduğum değeri de birer byte kaydırmış oluyorum.

X indexinin 40'lık döngüsü bittiğinde üç satırda boyanmış oluyor. Sürekli olarak INDEX_COUNTER'ı arttırıp cwash etiketine atladığımda, her seferinde farklı renkler yüklenerek renk geçişi etkisi yaratılmış oluyor.
Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #5 : Kasım 25, 2014, 18:51:21 ÖS »

Programın tam dökümü aşağıda.

Kod:
!to "build/colorwash.prg",cbm
!src "standart.asm"

;----------------------------------------
;CONSTANTS
;----------------------------------------

SCREEN_RAM = $0400
COLOR_RAM = $d800
EFFECT_COUNTER = $02

+BASIC_START

;-----------------------------------------
; MAIN
;-----------------------------------------

* = $c000

+CLEAR_SCREEN

;Metnimizi ekrana yerleştirelim

ldx #00
- lda metin,x
sta SCREEN_RAM+40*5,x
inx
cpx #120
bne -

;Efect sayacını maksimum değere getirelim
lda #40
sta EFFECT_COUNTER

;Ekran tazelenene kadar bekleyelim
;1/50 saniye

cwash lda #00
- cmp $d012
bne -

;Renk geçişi efekti iki index yazmacını
;birlikte kullanıyor. Y okunacak rengi
;X yazılacak adresi indexliyor

ldy EFFECT_COUNTER
ldx #00
- lda renkler,y
sta COLOR_RAM+40*5,x
inx
sta COLOR_RAM+40*6,x
inx
sta COLOR_RAM+40*7,x
iny
dex
cpx #40
bne -

dec EFFECT_COUNTER

lda #00
cmp EFFECT_COUNTER
bne cwash

lda #40
sta EFFECT_COUNTER

jmp cwash

;-----------------------------------------
; DATA
;-----------------------------------------

metin
!scr "          + ++ hi there! ++ +           "
!scr "   ---------------------------------    "
!scr "   this is a smiple colorwash effect    "

renkler
!by  14,14,14,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,15,01,07
!by  01,07,15,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,14,14,14

!by  14,14,14,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,15,01,07
!by  01,07,15,14,14,14,14,14,14,14
!by  14,14,14,14,14,14,14,14,14,14

* colorwash.prg (46.28 KB - Yükleme: 573 kez.)
Logged

Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #6 : Kasım 25, 2014, 19:24:15 ÖS »

Çok güzel ve sade bir dille anlatmışsın. Beni gaza getiriyorsun haberin ola.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #7 : Kasım 25, 2014, 20:22:50 ÖS »

Eline sağlık wizofwor. İşin temelinden başlayıp ufak adımlarla ilerleyen bir 'tutorial' haline dönüştürüyorsun.
Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #8 : Kasım 25, 2014, 20:37:26 ÖS »

Kardeşim çok güzel olmuş. Eline sağlık, partide intro bekliyorum senden.
Logged
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: