İşin içine $d016'yı da ekleyerek scroller'ı biraz daha smooth hale getirdim. Bayağı bir optimizasyon da yaptım. Yine de sormak istediğim hoşuma gitmeyen bazı şeyler var. Öncelikle kaynak kodlarının github linkleri:
scroller.asmscroller-subroutines.asmprg dosyası github'da da var. İsterseniz aşağıda ekler kısmından da alabilirsiniz.
Programın başında kullanacağım zero page adreslerini $02'den başlayarak sıralıyorum. Kernal IRQ'ları kapattığım için sorun olmuyor. Eğer kernel IRQ'ları kullanacak olsaydım. Hangi ZP adreslerini kullanabilirim?
Kullandığım counter rutininden memnun değilim. Örneğin part2 ilk iki frame'de kayıyor, sonraki iki frame bekliyor. Eğer bir frame kayıp, bir frame beklese efekt daha yumuşak olacak. Farklı bir bekleme/sayaç mantığı nasıl kurulabilir bilemedim.
.delay inc COUNTER ;increase the COUNTER
ldx COUNTER
cpx #05
bne .delay2
ldx #00
stx COUNTER
.delay2 cpx #04 ;Skip clculation parts as per
beq .part2 ;delay value
cpx #03
beq .part3
cpx #02
beq .part4
cpx #01
beq .part5
Bu soru iki türlü algılanabilir:
1- kodu 4 kere yazmaktan rahatsızsın ama bellekte 4 kere yer kaplaması OK
2- kodun bellekte de 4 kat yer kaplamasından rahatsızsın
Üniversitedeki C sınıfından mı, yoksa çok eskiden okuduğum bir makaleden mi bilmiyorum aklıma kazınmış "Bilgisayarın yapabileceği rutin işi sen yapma" şeklinde bir söz var. Bunu ben hep aynı şeyi iki kere yazıyorsan optimizasyon hatası yapıyorsun olarak algıladım. 6502 evreninde işlerin tam bu şekilde yürümediğin yavaş yavaş kavramaya başlıyorum. Kodun bellekte 4 kere yer kaplamasını yarı hızda çalışmasına yeğliyorum.
Makro konusundaki örnek için de çok teşekkürler. Şimdilik makrolara girmek istemedim. Çünkü şu kodu çalıştırıp, bir de internete yüklemek için 6502'nin yanında ayrıca giriş seviyesinde bash, git ve vim öğrenmem gerekti. Bu yaştan sonra bünye kaldırmıyor. Daha sonra koda renk geçişleri eklemeyi düşünüyorum. Artık makrolara bir da o zaman bakarım.