commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: wizofwor üzerinde Kasım 18, 2014, 11:54:57 ÖÖ



Konu Başlığı: Raster color bar efekti
Gönderen: wizofwor üzerinde Kasım 18, 2014, 11:54:57 ÖÖ
Basit bir efekt kodlamaya çalıştım. Tam başarılı olamasam da çalışan bir şeyler ortaya çıktı. Ekteki program 11 raster satırından oluşan bir barı ekran boyunca hareket ettiriyor. PRG dosyasını aşağıdan alabilirsiniz.

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=9280.0;attach=8239;image)

Kullandığım sinus tablosunu Excel'de hazırladım. Bunun daha coder usulü yöntemine ihtiyacım var.

Raster barların sonundaki titreme için gecikme tablosunu beceremedim. 11 bar ve 256 ayrı başlangıç değerim var 256x11 = 2816 ayrı gecikme değeri mi hesaplamam lazım? Bu iş daha pratik nasıl halledilir?

Kodları github sayfamdan inceleyebilirsiniz.

https://github.com/wizofwor/C64-assembly-examples/blob/master/color-bar/color-bar.asm (https://github.com/wizofwor/C64-assembly-examples/blob/master/color-bar/color-bar.asm)


 


Konu Başlığı: Ynt: Color Bar
Gönderen: Simon (Özay Turay) üzerinde Kasım 18, 2014, 11:59:27 ÖÖ
Güzel olmuş. :)

Zamanlama sorunu bad line denilen satırlardan kaynaklanıyor sanırım.

Sinüs tablosu için The Gang'in Sinus Creator utility'sini kullanabilirsin. ;)

http://www.thegang.nu/releases.php?type=4&year=all&headline=Utils&nomenu=1 (http://www.thegang.nu/releases.php?type=4&year=all&headline=Utils&nomenu=1)


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: wizofwor üzerinde Kasım 18, 2014, 13:21:59 ÖS
Şöyle bir durum var. Zamanlamayı çok hassas yapmadığım için 3 cycle'lık bir hata var. Bu ekranda titremeye sebep oluyor.

28. satırdan başlayan kısımda 8'den geri saydırarak zaman harcıyorum ki bu titreme ekranın görünmeyen kısmına denk gelsin. Ama bad line olduğunda bu gecikme fazla geliyor. Titreme görünür oluyor. Bunun çözümü gecikme tablosu kullanmak.

delayTable !by 8,8,8,6,8,8,8

gibi gecikme değerlerini bir tablo halinde yazıp, döngünün sonunda bu değer kadar geri sayarak "stable" bir raster bar efekti yaratabiliyorum.

Efekti hep aynı satırdan başlattığımda olay bu şekilde gerçekleşiyor. Ama efektin başlangıç satırını sinüs tablosuna göre değiştirdiğimde, bad line her seferinde başka satıra denk geliyor. İşte orada patlıyorum.  


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: joker_ üzerinde Kasım 18, 2014, 13:30:08 ÖS
Her satırda $d012 ile tarama yakalatarak, cpu'nun bütün cycle'ını harcarsın kardeşim. Geriye başka bir şey yapmana zamanın kalmaz :)

raster   lda rasterStart,x   ;Grab new rasterline value
   cmp $D012      ;from the table and wait
        bne raster+3   ;for raster the line

Rasterların titremesi, simon'un da bahsettiği gibi, badline satırlarına denk gelmesinden kaynaklanıyor. Bunu aşmanın yöntemi,

   ldy #10      ;Loose time to hide the
idle1   dey      ;flickering at the beginning
   bne idle1

Buradaki ldy değerini sabit bir sayı vermek yerine, tablodan okutmaktır.

   ldy delay_table,x
idle1   dey
   bne idle1      

gibi. Fakat yine bu yöntem de işe yaramayabilir, çünkü $d012 değerini, her seferinde tablodan okutup, efektin başlama satırını belirliyorsun. Bunun yerine

irq içerisinde,
      ldx #0
-      lda color_table,x
      sta $d020
      sta $d021

      ldy delay_table,x
      dey
      bne *-1

      inx
      cpx #11
      bne -

gibi bir rutin kullanarak, irq dışında ise color_table'ın içini renklerle doldurarak, hiç $d012'ye bulaşmadan bu işi yapabilirsin.

Bu konuda, nightlord sensei nin, vic kursunda anlattığı

http://nightnetwork.org/writings_tr/c64_grafik_programlama/chunk/ch03s01.html (http://nightnetwork.org/writings_tr/c64_grafik_programlama/chunk/ch03.html)

eseri işini görecektir. ;)


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: joker_ üzerinde Kasım 18, 2014, 13:30:44 ÖS
Ben mesajı yazarken, sen zaten cevabı yazmışsın :)


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: Simon (Özay Turay) üzerinde Kasım 18, 2014, 13:58:17 ÖS
@_joker:  Cevabı (daha doğrusu çözümü) sen yazmışsın yahu, ben birşey mi kaçırdım. :)


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: wizofwor üzerinde Kasım 18, 2014, 13:59:41 ÖS
Gecikme değerini tablodan okutmam gerektiğini biliyorum ama başlangıç satırına göre farklı değer çekmesi lazım onu yapamadım. Ekte aynı rutinin iki farklı versiyonu var.

color_bar01.prg'de efekt yerinde duruyor. Her şey kontrol altında :)

https://github.com/wizofwor/C64-assembly-examples/blob/master/color-bar/color-bar-01.asm

color_bar02.prg'de efekti sinüse bağlıyorum ve titreme başlıyor.

https://github.com/wizofwor/C64-assembly-examples/blob/master/color-bar/color-bar-02.asm

Şimdi fazla uğraşamıyorum. Akşama tekrar başına oturacağız artık.


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: wizofwor üzerinde Kasım 18, 2014, 14:05:01 ÖS
Her satırda $d012 ile tarama yakalatarak, cpu'nun bütün cycle'ını harcarsın kardeşim. Geriye başka bir şey yapmana zamanın kalmaz :)

Farkındayım. Önerdiğin konudaki çalışmayı IRQ tabanlı hazırlıyorum ama burda IRQ kullanmak istemedim. IRQ tabanlı olunca satır kaçırdığımda bütün ekran bir birine giriyor. Bu şekilde çalışmak deneme yanılma açısından daha pratik geldi.


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: joker_ üzerinde Kasım 18, 2014, 14:06:00 ÖS
@_joker:  Cevabı (daha doğrusu çözümü) sen yazmışsın yahu, ben birşey mi kaçırdım. :)

Ben yazarken, wizofwor titremenin nedenini yazmış, onu kasdetmiştim :)


 


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: joker_ üzerinde Kasım 18, 2014, 14:06:56 ÖS
Her satırda $d012 ile tarama yakalatarak, cpu'nun bütün cycle'ını harcarsın kardeşim. Geriye başka bir şey yapmana zamanın kalmaz :)

Farkındayım. Önerdiğin konudaki çalışmayı IRQ tabanlı hazırlıyorum ama burda IRQ kullanmak istemedim. IRQ tabanlı olunca satır kaçırdığımda bütün ekran bir birine giriyor. Bu şekilde çalışmak deneme yanılma açısından daha pratik geldi.

Haklısın, bu şekilde daha iyi kavrayabiliyorsun.


Konu Başlığı: Ynt: Raster color bar efekti
Gönderen: witchdoktor üzerinde Kasım 18, 2014, 14:23:19 ÖS
@wizofwor

En mantıklısı joker'in bahsettiği metod, yani tüm rasterline'lara bir tablo ile renk tahsis etmek. Daha sonra tablonun istediğin satırlarındaki renkleri değiştirerek kaydırma vb efektler elde edebilirsin, badline zamanlaması ile de uğraşmamış olursun.