Selam yoldaşlar, uzun zamandır Amiga 500'ümde C ile uğraşıyorum. Geçenlerde ekran modunu değiştirip (320x256, 4 renk) bir çizim programı yazmaya çalıştım. Sorun şu: çizim yaparken ekran sürekli titriyor ve yırtılmalar oluşuyor. Vsync'i bekliyorum ama yine de olmuyor. Kodumda copper listesi kullanıyorum ama belki yanlış bir şey yapıyorum. Ayrıca bitplane pointer'larını da doğru ayarladığımı düşünüyorum. Daha önce bu tarz bir sorun yaşayan var mı? Çözüm için ne önerirsiniz? Şimdiden teşekkürler!
Amiga 500'de C ile çizim yaparken ekran titremesi sorunu
Cevaplar (3)
08.08.2026 01:34
Merhaba, bu sorunu daha önce ben de yaşadım. Muhtemelen çizim işlemini yaparken ekranı güncelleme ile aynı anda yapıyorsun. Yani bitplane'leri yazarken ekran tazeleniyor ve bu da titremeye neden oluyor. Çözüm olarak çift tampon (double buffering) kullanmanı öneririm. Yani iki ayrı bitplane seti oluştur, birine çiz, diğerini göster. Copper listesinde de bu iki bitplane seti arasında geçiş yap. Ayrıca VBlank'i beklerken 50Hz'de olduğundan emin ol. Aşağıda basit bir örnek var:
```c
/* Çift tampon için iki bitplane seti */
UBYTE *bitplane1 = AllocMem(40*256, MEMF_CHIP);
UBYTE *bitplane2 = AllocMem(40*256, MEMF_CHIP);
/* Copper listesinde bitplane pointer'larını değiştir */
/* VBlank'te beklerken sıradaki tampona geç */
```
Bu şekilde titreme ve yırtılma ortadan kalkacaktır.
```c
/* Çift tampon için iki bitplane seti */
UBYTE *bitplane1 = AllocMem(40*256, MEMF_CHIP);
UBYTE *bitplane2 = AllocMem(40*256, MEMF_CHIP);
/* Copper listesinde bitplane pointer'larını değiştir */
/* VBlank'te beklerken sıradaki tampona geç */
```
Bu şekilde titreme ve yırtılma ortadan kalkacaktır.
08.08.2026 01:57
segablaster27 yazdı:
Selam yoldaşlar, uzun zamandır Amiga 500'ümde C ile uğraşıyorum. Geçenlerde ekran modunu değiştirip (320x256, 4 renk) bir çizim programı yazmaya çalıştım. Sorun şu: çizim yaparken ekran sürekli titriyor ve yırtılmalar oluşuyor. Vsync'i bekliyorum ama yine de olmuyor. Kodumda copper listesi kullanıyorum ama belki yanlış bir şey yapıyorum. Ayrıca bitplane pointer'larını da doğru ayarladığımı düşünüyorum. Daha önce bu tarz bir sorun yaşayan var mı? Çözüm için ne önerirsiniz? Şimdiden teşekkürler!
Aynen, çift tampon kesin çözüm. Ben de bir şey eklemek istiyorum: Copper listesinde sadece bitplane pointer'larını değiştirmek yetmez, aynı zamanda modülasyonu da kontrol etmelisin. Eğer ekran modunu değiştirdiysen, BPLCON0 ve BPLCON1 register'larını da güncellemelisin. Ayrıca, ekran yırtılmasını önlemek için VBlank'i beklerken iki tampon arasında geçiş yaparken bir bayrak (flag) kullan. Örneğin:
```c
volatile BOOL buffer_ready = FALSE;
void vblank_handler(void) {
buffer_ready = TRUE;
}
/* Ana döngüde */
while (buffer_ready == FALSE);
buffer_ready = FALSE;
/* Çizim işlemini diğer tampona yap */
```
Bu şekilde senkronizasyonu sağlarsın. Ayrıca, kullandığın bellek ayırma fonksiyonlarının CHIP bellekten ayırdığından emin ol, yoksa DMA erişemez.
08.08.2026 02:22
Dostlar, çok teşekkürler! Çift tampon ve VBlank bayrağı işe yaradı. Şimdi ekran titremesi tamamen kayboldu. Ayrıca BPLCON0 register'ını da güncelledim, sorun çözüldü. floppyknight74 ve c64hacker19, önerileriniz için sağ olun. Bu forum gerçekten işe yarıyor, herkese kolay gelsin!
Bu konuya cevap yazabilmek için retro topluluğumuza üye olmalı veya giriş yapmalısınız.
İlgili Konular & Benzer Paylaşımlar
Turbo Pascal 7.0'da VGA 13h modunda çift tampon (double buffer) nasıl yapılır?
Kategori: Programlama
Amiga 1200'de 68030 kartı için WHDLoad kurulumunda guru meditation hatası
Kategori: Programlama
Eski Turbo Pascal kodum Windows 10'da çalışmıyor, ne önerirsiniz?
Kategori: Programlama