Gönderen Konu: interrupt gereksinimleri  (Okunma sayısı 7459 defa)

interrupt gereksinimleri

« : 26.08.2009 11:11:27 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
C64 coding bölümü uzun zamandır kullanılmamış. Hem biraz hareket gelsin hemde birşeyler paylaşayım ve sorayım dedim...
 
Kısıtlı alanlar kullanırken, hatta bu kısıtlı alanlarda sprite gösterirken örneğin 256 byte vb. interrupt kullanımı çok zahmetli oluyor. Yani sprite'a loop yapan bir hareket yaptırmayacaksanız, işin içine bi sürü kotroller giriyor ve yeriniz iyice daralıyor.
 
Fakat int. kullanmadığınız zamanda o güzel smooth'luğu yakalamak için satır yakalamakta(*) tek başına bir işe yaramıyor. Belki birkaç kez tekrar edilirse belli bir smooth'luk yakalanabiliyor. Aslında 256 byte ta müzik olmadığı için araya beklemeler koyarak ta bu iş yapılabilir.
 
Kısıtlı alanlar kullanırken sizin sprite'ların smooth hareket etmeleri için neler yaptığınızı merak ettim.
 
(*) gibi...
lda#$ff
dongu    cmp$d012
bne dongu

interrupt gereksinimleri

« Yanıtla #1 : 26.08.2009 14:23:15 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
interrupt kullanman şart değil ancak interrupt dışı kullanım yapacaksan frame'in bittiği yerde, yani "artık ekran çizilmeli" dediğin yerde bir yakalatma yapman gerekiyor ki sen zaten sonra örneğini vermişsin. tek atlamaman gereken interrupt kullanmasan bile başta bir set interrupt diyerek zamanlamaları biraz daha stabilize etmen gerekiyor. kısacası programın başında ya da döngüye görmeden önceki bir yerinde bir adet "sei" kullanman lazım. sei olmadan taramayı yakalatamazsın. tarama yakalatma kullandığın sürece de saniyede 50 frame'i istediğin gibi çizdirebilirsin.
 
bir diğer önemli nokta ise $d011'in 7. yani en soldaki biti. Bu bit $d012'nin 9. biti aslında. PAL'de 312 raster satırı var. 256'yı geçtiği için bu bite ihtiyaç duyuyoruz. $d012 değerini yakalatma olayına girmeden bu biti de ayarlamak gerekir. örneğin ekranı ilk 256 satırda yakalatmak istiyorsan
 
lda $d011
and #$7f
sta $d011
 
demek gerekir ($7f = %01111111)
 
aksi taktirde ise 256-312 arası değerler için
 
lda $d011
ora #$80
sta $d011
 
istenilen yerde yakalatmayı sağlayacaktır ($80 = %10000000)
 
"Yerim kısıtlı" dediğin için belirtiim, ben $d011'in diğer 7 bitinin etkilenmemesi için böyle örnek verdim. Yoksa sen sabit bir değer verebilirsin. Yani dikey scroll etmemiş bir karakter ekranı için;
 
0-255 için;
lda #$1b
sta $d011
 
256-312 için;
lda #$9b
sta $d011
 
bitmap ekranlar için ise;
 
0-255 için;
lda #$3b
sta $d011
 
256-312 için;
lda #$bb
sta $d011
 
değerleri kullanılabilir.

interrupt gereksinimleri

« Yanıtla #2 : 17.09.2009 15:20:40 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Aradığım şeyi ROM Disassembly'de buldum. Adamlar zamanında yazmış :) Satır yakalama + bu bekleme rutinini kullanınca sprite'larda benim için kusursuz sayılacak bir smoothluk yakaladım. 1ms bekletiyor.
 
TXA
LDX #$B8
hop:
DEX
BNE hop
TAX
 
yani kısaca...

jsr$eeb3
 
Hem böylece birkaç byte daha tasarruf etmiş oldum.
 
2Skate: ıpuçları için teşekkürler.