« PC Engine'in / TurboGrafx-16'nın Mimarisi (index)

PC Engine'in / TurboGrafx-16'nın Mimarisi

Chapter 5: Grafikler


İçindekiler

  1. İçeriğin düzenlenmesi
  2. Kare Oluşturulması
    1. Karolar
    2. Karoların saklanması
    3. Arka Plan Katmanı
    4. Sprite Katmanı
    5. Sonuç
  3. Video Çıkışı

Grafikler, Hudson Soft HuC6270 tarafından halledilir, Video Ekran Denetleyicisi veya 'VDC' olarak da adlandırılan ayrı bir çip. HuC6270 oyuncunun ekranda göreceği her şeyi çizer ve işlevi Sega'nın muadiline çok benzemektedir, bu nedenle Hudson'ın sunduğu üründe neyin farklı olduğuna odaklanacağım için lütfen önceden bu makaleye bir göz atın.

İçeriğin düzenlenmesi

Öncelikle, VDC bir tile engine (5. nesil ortaya çıkana kadar hemen hemen standart) ancak PC Engine'in rakiplerine kıyasla önemli bir miktar olan 64 KB VRAM içerdiğine dikkat edin. Bu, daha sonra kontrol edeceğimiz yeni bir içerik türüne yol açabilir.

Image
VDP'nin bellek mimarisi.

Grafik verilerinin düzenlenme şekli biraz kafa karıştırıcıdır: Hem CPU hem de VDC 16 bit adresler kullanır, ancak CPU yalnızca 8 bit kelimeleri işleyebilirken, HuC6270 16 bit kelimeleri VRAM'de saklar . Bu, RAM'deki tek bir adresin bir bayt içerdiği, VRAM'deki bir adresin ise iki bayt depoladığı anlamına gelir, bu nedenle geliştiricilerin VRAM'e veri aktarırken bu tutarsızlığa dikkat etmeleri gerekir.

Bunun nedeni Hudson'ın devreyi düzenleme şeklinden kaynaklanmaktadır: VDC'nin 16 bitlik bir adres veriyolu vardır ancak sadece ilk 15 satır kontrol edilir (son satır her zaman '0' olarak ayarlanır), bu nedenle tek adresler ikinci bayttan alınır. Hudson'ın neden bu yola girdiğini bilmiyorum, ancak sistemde 128 KB VRAM olsaydı tüm bunların daha mantıklı olacağını biliyorum (çünkü 16 bitlik bir adres veriyolu yalnızca 64 KB'a kadar erişebilir, bu nedenle veri veriyolunu bir şekilde iki katına çıkararak 128 KB'a kadar erişilebilir). Belki de Hudson/NEC için asıl plan buydu?

Kare Oluşturulması

Yukarıda bahsedilen ayrıntı tuhaflığı bir yana, işlevsellik açısından VDP çok basittir. Alt sistemin üç ana bileşeni vardır: Daha önce bahsettiğimiz VDC ve VRAM - ve video kodlayıcı ('VEC' olarak da adlandırılır, zamanı geldiğinde daha fazla göreceğiz).

Sistem birden fazla çözünürlük kullanabilir, bunun nedeni oyunun ekran zamanlamalarını kontrol etmek için parametre görevi gören bir dizi kaydı değiştirebilmesidir, bu da CRT'nin kareyi ne zaman ışınlamaya başlayacağını değiştirir (aşırı taramanın aksine). Minimum çözünürlük 256 × 224 piksel iken, bazı homebrew'lar bu sistemin 512 × 240 piksele kadar çıkabileceğini kanıtlamıştır.

Şimdi bir çerçevenin adım adım nasıl çizildiğini görelim, bunun için Bonk's Adventure'ın varlıklarını ödünç alacağım.

Karolar

Image
VRAM'de bulunan arka plan karoları.

Image
VRAM'de bulunan Sprite karoları.

Hızlı bir hatırlatma olarak, kutucuklar sadece 8x8 piksel bitmaplerdir ve renderer ekranın bazı bölümlerini çizmek için alır. VDC ile çerçeve iki düzlemden oluşur: Arka plan katmanı ve sprite katmanı.

VRAM içinde arka plan katmanına özel karoların tanımlandığı Character generator adlı bir alan vardır. Bir karonun her pikseli dört bit kaplar, bu nedenle 16 renge kadar kullanabilir. Teorik olarak 4096 arka plan karesi tanımlanabilir, ancak VRAM'in çok daha küçük olması nedeniyle pratikte bu sayı daha azdır.

Öte yandan, Sprite'lar VRAM'deki ayrı bir bellek konumundan karolar kullanılarak çizilir, buna Sprite Generator denir ve buradaki karolar 16x16 piksel genişliğinde olduğu için önceki Karakter oluşturucudan farklıdır.

Video kodlayıcı, 32 renk paleti (arka plan için 16 ve sprite'lar için 16) depolayan ayrı bir çiptir, her palet 16 renk depolar ve her renk 9 bit genişliğindedir (Kırmızı için 3 bit + Yeşil için 3 bit + Mavi için 3 bit).

Karoların saklanması

Image
Arka plandaki tek bir tile'ın yapılandırılması.

Image
Tek bir sprite karosu yapılandırılması.

(Bu bölüm Hudson'ın 64 KB VRAM'den bu 16 bitlik tanecikle nasıl yararlandığını merak edenler için yazılmıştır, ancak makalenin geri kalanını takip edebilmek için bunu tamamen anlamanız gerekmez).

Şimdiye kadar bir karonun her bir pikselinin 4 bit (ya da nibble olarak da adlandırılan yarım bayt) kullanılarak saklandığını tartıştık. Şimdi, Hudson tepelerin dört adet 8x8 bitmap'den (sırasıyla 'CH0', 'CH1', 'CH2' ve 'CH3' olarak adlandırılır) oluştuğunu belirtir. Her harita 1 bit genişliğindedir, ancak dördü birleştirildiğinde 4 bit pikselli son karoyu oluştururlar.

Ayrıca, VRAM üzerindeki 16 bit hizalamayı hatırlıyor musunuz? Her 16 bitlik kelime iki adet 1 bitlik bitmapin tek bir satırını saklar (8 satır + 8 satır). Böylece, sekiz girdi yazdıktan sonra, iki harita saklanacaktır (sadece bir yerine). Bunu daha iyi anlamanıza yardımcı olması için lütfen şemalara bir göz atın.

Aynı şey Sprite karoları için de geçerlidir, ancak bunlar 16x16 bitmap olduğundan, her bitmap 16 kelime kaplar. Başka bir deyişle, tek bir sprite karosunu saklamak için 64 kelime alınır (VRAM'de 8 bayta eşdeğerdir).

Arka Plan Katmanı

Image
Render edilmiş arka plan katmanı.

Arka plan katmanı, Background Attribute Table VRAM'deki girdilerle doldurularak oluşturulur, her girdinin konumu ekrandaki karonun X/Y koordinatını tanımlar. Her girdi Karakter Oluşturucu'dan karo indeksini ve renk paletini içerir.

Bu katmanın maksimum boyutu 1024 x 512 pikseldir (128 x 64 karo), ancak programcılar minimum olarak 256 x 256 piksel (32 x 32 karo) katman ayarlayabilirler.

Her zaman olduğu gibi, bu katman VDC'deki bazı kayıtların değeri değiştirilerek kaydırılabilir.

Sprite Katmanı

Image
Render edilmiş Sprite katmanı.

VDC, 64 adede kadar sprite tanımlanabilen Sprite Attribute Table Buffer adlı dahili bir bellek içerir. Tablonun her bir girişi bağımsız X/Y konumunu, renk paletini, karo indeksini ve H/V çevirmeyi saklar. Ayrıca, bir sprite'ı başka bir sprite ile birleştirmeye izin veren bir özellik vardır.

Her giriş 8 bayt uzunluğundadır, ancak 16 bitlik ayrıntı düzeyi nedeniyle bir miktar alan boşa harcanır.

Hepsinden önemlisi, CPU bu tabloya erişemez, bu nedenle VRAM'de tamamlanması ve ardından VDC'ye kopyalamak için bir DMA kanalının etkinleştirilmesi gerekir (böylece ikincisi onu kullanabilir).

Sınırlamalarla ilgili olarak, tarama çizgisi başına en fazla 16 sprite olabilir. Diğer taraftan, sprite taşması veya çarpışma olduğunda oyunun bilgilendirilebilmesi için kesmeler ayarlanabilir.

Sonuç

Image
Tada!

Şimdiye kadar VDC'nin tüm ağır işleri nasıl yaptığını gördük, ancak son görev aslında Video Encoder veya 'VCE'ye devredilmiştir. Hudson bu çipe HuC6260 adını vermiştir ve temel işlevi VDC'den 9 bitlik veri akışlarını almak, renk paletlerini uygulamak ve sonucu TV'ye (analog sinyal şeklinde) göndermektir.

Önceki makaleleri okuduysanız zamanlamanın önemine aşina olabilirsiniz. Burada bir istisna yok: İstenmeyen artefaktlardan ('kar' gibi) kaçınmak için, VCE yalnızca dikey bir kesinti sırasında güncellenebilir.

Video Çıkışı

Video kodlayıcı RGB (Sync ile birlikte) ve YPbPr çıkışı verir, bu sırasıyla bir SCART kablosu veya komponent kablosuyla kullanım için idealdir. Şimdiye kadar iyi görünüyor!...

Image
PC Engine'in sağ tarafındaki RF bağlantı noktası.

Image
TurboGrafx-16 için 'Turbo Booster', video kompozit ve güç sağlamak için Genişleme portuna bağlanır.

... Ne yazık ki Hudson, kutudan video çıkarmanın tek yolu olarak bir RF modülatörü takmaya karar verdi, bu yüzden o kadar da harika değil. Ancak yine de, PC Engine 80'lerde tasarlandı, bu nedenle bu yaklaşım her türlü TV ile uyumluluğu garanti etti (konsolun aynı bölgesinden olduklarını varsayarak).

İşin iyi tarafı, Genişleme Bağlantı Noktası RGB video ve çoklu senkronizasyon türlerini taşıyan pinler içeriyor, ancak bunlardan yararlanabilmek için harici bir aksesuara ihtiyaç duyacaklar.


Previous: 4. İşlemci (CPU)

Next: 6. Ses


Rodrigo Copetti © 2026 RSS Feed

Modern baskıya geçin

Ana sayfa · Yazılar · Destek · Yazar hakkında · Web sitesini hakkında