Şimdi gördüm bu başlığı, süper iş çıkarmışsın wizofwor, tebrikler kardeşim.
Şu anda çok detaylı giremeyeceğim konuya, çok az vaktim var. Ancak bir iki temel noktaya parmak basacağım.
1) Bunu bir oyun projesi için planladığını söylemişsin. Tüm postları dikkatle okuyamadım ama daha önce uyaran olmadıysa ilk uyarıyı yaparak başlayayım. Spritelar ve zamanlamalar.

Oyunda kullanacağın spritelar scrolllerin hassas biçimde yakalamış olduğun zamanlamalarını etkileyeceklerdir. Yani sen bu ekranın üzerinde serbestçe bir ya da birkaç sprite gezdirdiğinde zamanlamaların birbirine girdiğini göreceksin. Elbette ki bahsettiğim spriteların dikey pozisyon değişimleri, yatayda pek bir sorunla karşılaşmazsın. Yani oyunda spriteların gezineceği alanları iyi planlaman lazım.
Bir de iş zamanlamaya geldiğinde spriteları ekranda kaç adet olduklarına göre değil o anki bulunduğun raster satırına kaç sprite denk geldiğine göre değerlendirmen lazım. Bu konu çok derin bir konu, çeşitli çözümler var ancak dediğim gibi öncelikle senin ne planladığın önemli.
2) Stable IRQ rutini biraz daha karmaşık bir konu. Bu çok iyi bir örnek değil aslında stackle gereksiz oynaşıyor ama yine de mantığını anlaman için güzel bir örnektir.
http://www.ffd2.com/fridge/vic/stableraster.txtYorumları okursan tam olarak stable zamanı nasıl yakalıyor anlayacaksın.
Stable raster yakaladıktan sonra işin biraz daha kolaylaşacak. Ama badlinelara, spritelara dikkat etmen lazım.
3) Scroll'ün nerede yapılacağı konusuna gelirsek... Basitçe kural şu. Scroll eden alan dışındaki herhangi bir yer, istersen parçalara bölerek. Ama burada da dikkat edilmesi gereken bir mevzu var. Scroll eden alanın üstünde kalan kısımda yapılan kaydırma işlemleri o framede, altında yapılanlar ise bir sonraki framede çizilir. Yani diyelim ki 8 karakter yüksekliğinde bir bloğu kaydıracağız. Alanın üstündeki alan en fazla 5 satının kaydırılması için yeteri cycle'a sahip, alt 3 satırı ise alanın altında kaydırmamız gerekiyor. Bu şekilde parçalayabilirsin, sorun yok. Ancak vereceğin scroll değerleri arasında 1 framelik bir faz farkı olması gerekiyor. Eğer aynı scroll pozisyonlarıyla kaydırmayı denersen alt üç satır 1 frame geriden gelecektir.
Bir diğer mevzu ise örneğin demin bahsettiğim 8 satırlık alanın içersinde o satırları kaydırma işlemi yapamayabilirsin ancak diğer scrollleri bu alanda yapmanda bir sakınca yok. Müzik falan da bu alanda çalabilirsin. Yeter ki toplam cycleların o alanı aşmayacağı garanti olsun.
Son olarak benim "beam kovalamaca" diye tabir ettiğim bir durum var. O da şöyle. Diyelim ki 8 satırın tamamını kaydırmak için yeterli zamanın kalmadı. Tek zaman kalan bölge yine 8 satılırlık alanın kendisi. Bu durumda şöyle bir trick kullanabiliyorsun. Diyelim ki ilk 6 satırı bölgenin dışında kaydırdın. Kalan son iki satırı burada kaydırabilirsin. Ancak dikkat! bu satırların kaydırıldığı bloğun satırların kendilerine denk gelmemesi gerekiyor. Yani mesela ilk 6 satır dışardan kaydırıldıysa, bu 6 satırlık bölgede takip eden iki satırı kaydırabilirsin.
Teorik olarak şu da mümkün. 8 satırlık bölgenin ilk 4 satırında alt 4 satırını, son dört satırında ilk 4 satırını faz farkıyla kaydır. Ama böyle bir şey için zamanlamaların fazlasıyla kusursuz olması gerekiyor. Tavsiyem bu kadar kritik zamanlamalara mecbur kalmadıkça girmemen yönünde olacaktır.
Şimdilik bu kadar. Daha sonra vaktim olduğunda daha teknik açıklamalarla yardımcı olmaya çalışacağım.
Not: Tüm karakter ekranını yukardan aşağı ve aşağıdan yukarı scroll eden iki rutin yazmayı denerseniz birini kolayca yapabildiğinizi, diğerinde bir türlü zamanlamaların yetişmediğini göreceksiniz. Burada bahsettiğim "beam kovalamaca" dediğim mevzu devreye giriyor. Her iki yönde de scroll'ü temiz biçimde yapmayı başardığınızda büyük ölçüde yukarda anlattıklarımı pratikte kullanmış oluyorsunuz.