Zx Spectrumda yeni bir görüntüleme tekniği: aSMP

Yok hayır, bu sadece bir teori. Ben uydurdum. Unutmadan yazayım dedim.

Şimdi, zx spectrum’un limitlerini konuşalım önce. Zx Spectrumda sadece 1 ekran modu var. O da basit. ekran 8×8 pixellik bloklara ayrılmış durumda. Bu bloklar 32×24’lük bir alanda, toplam 256×192 pixellik bir görüntü oluşturabiliyor. 8×8 pixellik bu alanlara “karakter hücresi” diyelim. Lakin tasarımın kökeninde ekrandaki 8×8 boyutundaki karakterleri (harf ve rakamları) rahatça görüntüleyebilmek yatıyor. Bu karakter hücrelerinin içinde sadece iki renk kullanılabiliyor. Bunlara Kağıt ve Mürekkep renklerinin karşılığı olan paper ve ink deniyor. Biri arkaplanı, diğeri ön plan rengini kontrol ediyor. Bu renkler siyah, mavi, kırmızı, pembe, yeşil, açık mavi, sarı ve beyaz’dan yani toplam 8 renkten biri olmak zorunda. Bunun haricinde, her hücrenin bir parlaklık kontrolü var. Bir hücrenin rengini parlak ya da normal yapabiliyoruz. Bu parlaklık hem arkaplan hem de ön plan rengine uygulanıyor. Yani koyu sarı üzerine açık sarı kullanmak mümkün değil. Tabii ki bu görüntü hiç cpu zamanı kullanılmadan görüntülenebiliyor.

Eğer cpu’nuza bir görev verip, görüntü işlemcisi ram’den bilgileri okumadan önce çok ince bir zamanlama ile renk bilgilerini sürekli değiştirirseniz, bu sefer multicolour dediğimiz moda ulaşıyoruz yani 8×8’lik renk limitini, 8×1’lik bir alana küçültebiliyoruz.

Multicolour modunu oluşturabilmek için cpu’nun ekran oluşturulurken sürekli çalışması gerek. Fakat buna karşın grafik işlemcisi çok daha hızlı tarıyor hafızayı ve tüm renkleri değiştirmek mümkün olmuyor. Bunun için zx spectrumda bugüne kadar ulaşılan en yüksek multicolor bloğu 18 sütun genişliğinde. Normalde bu grafikler 1995 yılında colordraw isimli boyama programının yardımıyla patlama yaptı. Colordraw maksimum 16 sütun kalınlığında grafikler oluşturabiliyor.

Fakat zx spectrum grafikleri ile uğraştıkça görüyorsunuz ki, bir multicolor grafiğin her hücresinin multicolour olması gerekmiyor. Çoğu zaman hücreler gerçekten 2 renk içeriyorlar. Hatta boş alanlar da var, ve gereksiz yere bunları doldurmak için cpu vakti ayrılıyor.

Geçen yıl Forever 2011’e katılmak üzere grafik çizerken bazı hücrelerin şiddetle detaylandırılması gerekiyordu. Geri kalanlar ise standard 8×8 modda gayet iyi işliyorlardı. Bu durumda tüm ekranı 8×1 lik hücrelere çevirme gayreti yerine, görüntünün farklı bölgelerinin multicolour olarak oluşturulması mümkün müydü? Konuyu zx spectrum’un zamanlama experlerine açtım.

Başta böyle birşey denenmediği için eleştirel yaklaşsalar da, sonra bu işin son derece mümkün olduğuna karar kıldık. Aslında önerim çok basitti: Colordraw’ın erişebildiği 16×24 hücrelik multicolour alanını ekranın farklı yerlerine dağıtmak. Bir grafik ile açıklamak istiyorum:

 

Orjinal PNG 24bit Grafik

Yukarıdaki grafik çevrim için kullandığım orjinal grafiktir. Bu grafiği bir araç yardımı ile zx spectrum grafiği haline dönüştürürsem aşağıdaki görüntüyü elde ederim:

Zx Spectrum Standard Mod, acele bir çevrim, pek güzel olmadı...

Görüyorsunuz ki zx spectrum iki renklik kutucuklar halinde görüntüyü gösterebiliyor. Bu sonuçtan kimse memnun değil. Eğer 18 sütunluk limit olmasaydı, bir multicolour grafiği şöyle görüntülenebilirdi:

Zx Spectrum Multicolour grafiği, fakat burada 18 sütunluk limit esnetilmiştir.

Tabiiki yukarıdaki görüntü kısmen daha güzel. Kısmen diyorum çünkü hala 8×1’lik hücre limiti mevcut. Ayrıca yukarıdaki görüntüyü zx spectrumda oluşturmak pek mümkün değil, çünkü şu ana kadar ulaşılan en geniş multicolour alan 144×192. Yukarıda 256×192 var. Yukarıya bakarsanız, sadece iki rengin hüküm sürdüğü bir çok alan var, örneğin örümcek adamın kıyafetinde bazı kısımlar sadece 2 renk içeriyor. Bu alanlarda multicolor kullanmaya gerek yok. Bu durumda,

Yüz, kontürler ve tuğlaların bazıları

önümüzdeki limit doğrultusunda yatay olarak 16 hücreyi aşmayacak kadar (çoğu zaman bu çok bile fazla geliyor, 8-10 hücre yeterli) multicolour hücreleri seçiyor ve sadece onları güncelliyoruz. Cpu zamanı bunlar için yeterli oluyor. Sonuç ise biraz daha düzeltilmiş, tam ekran, yarı multicolour, yarı standard colourdan oluşan bir tam ekran grafik:

Sonuç: bindirme ile yaratılmış tam ekran grafik

Bu ne standard grafik, ne de multicolour. İkisinin birleşimi, teorik olarak mümkün, henüz pratiğe dönüştürülmedi, ama yakında bu fikrin uygulamaya dönüşeceğinden emin olabilirsiniz.

 

Bu tekniği kullanarak Diver ve Riskej gibi zx grafik ustalarının neler yaratabileceklerini düşünemiyorum bile.

 

3 thoughts on “Zx Spectrumda yeni bir görüntüleme tekniği: aSMP”

  1. Interesting article… I remember reading your contributions on this topic in WOS… So.. is this the ground work plan for your next Graphics Tool?… 😉

    Nice article, google translate does a good enough job…

    I guess the complicated bit would be getting the program to discern which areas to prioritize, as areas for multicolour, from those areas that don’t need it… Perhaps also, if your writing an automated system for doing such a thing, you could also get it to automatically shift the graphic image around a few pixels either way (by X & Y axle) to see which position best fits (Best fit, meaning which position will reduce your need for multicolour regions, or which positon will best map smoothly across the attribute blocks, requiring the least amount of dithering use between areas – it would be a slow process, but if you are already writing an automated process to check the whole image to count the number of multicolour regions, then its a simple loop of moving the whole image, doing the whole screen check, counting the regions, then doing it again and again until all positons are done, then picking the postion that involved the least multicolour regions & least use of dithering)… Anyway, just a thought… Nice article… 😉

  2. ilk okuduğum zaman çok bir şey anlamamıştım ama şimdi okuduğumda kafamda daha iyi canlandı. İlk okumamdan bu yana da 3 yıl geçtiğine göre var mı bir şeyler yapıldı mı?

Leave a Reply

Your email address will not be published. Required fields are marked *