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