📚 EK OKUMA

Erken Dönem Grafik Donanım Sınırlamaları ve Yaratıcı Çözümler

Atari 2600'den SNES'e: 128 byte RAM ile nasıl oyun yapılır? Kısıtlamalar yaratıcılığı nasıl tetikledi?

🕹️ 1977–1995 Dönemi
📖 Ek Okuma Materyali
🔗 Bölüm 1 ile İlişkili
📌 Bu Sayfa Hakkında

Bu sayfa, Bölüm 1: Bilgisayar Grafiğine Giriş dersinin ek okuma materyalidir. Erken dönem oyun konsolları ve bilgisayarların grafik donanım sınırlamalarını ve programcıların bu kısıtlamalar karşısında geliştirdikleri yaratıcı teknikleri detaylı olarak ele alır. Bu konular, modern grafik programlamanın neden bugünkü haliyle var olduğunu anlamanız için kritik öneme sahiptir.

🧠 Neden Eski Donanım Sınırlarını Öğrenmeliyiz?

Bugün bir oyun motoru size saniyede milyarlarca piksel işleyebilen GPU'lar sunuyor. Ama kısıtlama altında çalışma becerisi her zaman geçerli: mobil oyunlar, web grafikleri, gömülü sistemler, VR (düşük gecikme zorunluluğu)... Ayrıca bu tarihsel teknikler — tile tabanlı render, sprite atlas, palet döngüsü, dithering — modern oyun geliştirmede hâlâ aktif olarak kullanılıyor. Kısıtlama, yaratıcılığın anasıdır.

1. Atari 2600 ve "Racing the Beam" 🏎️

Atari 2600 (1977), ev oyun konsolları tarihinin en önemli cihazlarından biridir ve grafik programlamanın en aşırı kısıtlama örneklerinden birini sunar. Bugün bir web sayfası bile megabyte'larca RAM kullanırken, Atari 2600 programcıları sadece 128 byte (evet, byte — kilobyte değil!) RAM ile oyun yapmak zorundaydı.

📊 Atari 2600 Teknik Özellikleri

  • CPU: MOS 6507 @ 1.19 MHz (6502'nin ucuz versiyonu, 13 adres pin'i — sadece 8 KB adresleme)
  • RAM: 128 byte (RIOT çipinde — 6532). Bu bir yazım hatası değil. 128 byte.
  • Grafik çipi: TIA (Television Interface Adaptor) — Jay Miner tarafından tasarlandı
  • Çözünürlük: 160×192 piksel (NTSC). Aslında TIA bireysel pikselleri adresleyemez bile!
  • Renk: 128 renk paleti (NTSC), ama aynı anda çok az kullanılabilir
  • Ses: 2 kanal, çok sınırlı dalga formları
  • Kartuş boyutu: Genellikle 2-4 KB ROM (bazı geç dönem oyunlar bank switching ile 32 KB'a kadar)

TIA Çipi: Frame Buffer Yok!

Modern grafik sistemlerinde bir frame buffer (çerçeve arabelleği) vardır — ekrandaki her pikselin renk değerini tutan bir bellek alanı. GPU bu belleğe yazar, ekran kartı bu bellekten okur ve görüntüyü ekrana gönderir. Ama Atari 2600'ün TIA çipinde frame buffer diye bir şey yoktu. Neden? Çünkü 160×192 piksellik bir ekranı saklamak için bile yaklaşık 30 KB bellek gerekirdi — oysa sistemin toplam RAM'i 128 byte'dı!

Bunun yerine TIA, her satırı (scanline) tek tek, gerçek zamanlı olarak televizyonun elektron ışını o satırı çizerken üretiyordu. Programcının işi, elektron ışınının her satırına yetişmekti.

⚠️ CRT Televizyonların Çalışma Prensibi

Bunu anlamak için CRT (katot ışınlı tüp) televizyonları bilmek gerekir: CRT'de bir elektron ışını ekranı soldan sağa, yukarıdan aşağıya tarar. Her yatay satır (scanline) soldan sağa çizilir, sonra ışın sağ kenardan sol kenara geri döner (horizontal blank — HBLANK), ardından sonraki satır çizilir. Ekranın en altına ulaşıldığında ışın tekrar en üste döner (vertical blank — VBLANK). NTSC'de bu süreç saniyede ~60 kez tekrarlanır (60 Hz). Tüm süreç: 262 satır × 228 CPU döngüsü/satır.

TIA'nın Grafik Nesneleri (Bir Scanline'da Neler Var?)

TIA çipi herhangi bir bitmap saklayamadığı için, her scanline'da sabit sayıda grafik nesnesi üretebiliyordu:

NesneGenişlikAçıklama
Playfield (PF)40 "piksel" (20-bit pattern, yansıtılabilir)Arka plan. 20-bit'lik bir değer sol yarıyı tanımlar; sağ yarı ya kopyalanır ya yansıtılır. Her "piksel" aslında 4 CPU piksel genişliğinde.
Player 0 (P0)8 piksel genişliğinde spriteBirinci oyuncu sprite'ı. 8-bit register ile tanımlanır. 1x, 2x, 4x ölçeklenebilir.
Player 1 (P1)8 piksel genişliğinde spriteİkinci oyuncu sprite'ı. P0 ile aynı yetenekler.
Missile 0 (M0)1, 2, 4 veya 8 pikselP0'a bağlı mermi nesnesi. Tek renk, ayarlanabilir genişlik.
Missile 1 (M1)1, 2, 4 veya 8 pikselP1'e bağlı mermi nesnesi.
Ball (BL)1, 2, 4 veya 8 pikselPlayfield'a bağlı top nesnesi. Pong'daki top için tasarlandı!

Yani bir scanline'da toplamda sadece 2 sprite + 2 mermi + 1 top + 1 arka plan. Hepsi bu. Bugünkü oyunlarda tek bir karede binlerce nesne olabilir — Atari 2600'de 6 taneyle yetinmek zorundasınız.

"Racing the Beam" Tekniği

İşte Atari 2600 programcılığının özü burada: "Racing the Beam" (Işınla Yarışmak). Bu terim, Nick Montfort ve Ian Bogost'un 2009 tarihli aynı adlı kitabından popülerleşmiştir. Teknik şöyle çalışır:

⚡ Racing the Beam — Adım Adım

  1. VBLANK başlar — Elektron ışını ekranın altından üstüne dönüyor. Programcının ~37 scanline'lık boş zamanı var. Oyun mantığı (joystick okuma, çarpışma kontrolü, skor güncelleme) burada yapılır.
  2. Görünür alan başlar — 192 scanline boyunca, programcı her satır için TIA register'larını doğru zamanda güncellemek zorundadır.
  3. Her scanline ~76 CPU döngüsü sürer — Bu süre içinde programcı sprite pozisyonlarını, renklerini, playfield pattern'ini değiştirebilir. Ama zaman çok kısıtlı!
  4. Kernel — Görünür alandaki satır satır grafik üretim koduna "kernel" denir. İyi bir kernel yazmak Atari 2600 programlamanın en zor kısmıdır.
  5. HBLANK (yatay blanking) — Her satır sonundaki kısa boşluk. Sonraki satır için register'lar burada güncellenir.

Her scanline'da CPU'nun yalnızca ~76 döngüsü vardı ve bir 6507 talimatı 2-7 döngü arasında sürer. Yani bir satır başına yaklaşık 15-30 CPU talimatı çalıştırabilirsiniz. İşte bu yüzden her döngü, her talimat hesaplanırdı. Programcılar kodlarını döngü sayarak (cycle counting) yazardı.

🏆 Efsanevi Atari 2600 Hileleri ve Oyunları

Adventure (1979) — Warren Robinett

Oyun geliştirme tarihinin ilk "Easter Egg"i bu oyundadır. Ama grafik açıdan da ilginçtir: oyuncunuz ekranda sadece bir karedir (bir dikdörtgen!). Ejderhalar? Ördek gibi görünen şekiller. Kısıtlama o kadar büyüktü ki tasarımcı "iyi görünen" şeyler yerine "anlaşılabilir" şeyler yapmak zorunda kaldı. Player sprite'ı sadece 8 piksel genişliğinde olduğu için ejderhanın ağzı, gövdesi ve kanatları hep 8-piksellik bantlarla oluşturulmuştur.

Pitfall! (1982) — David Crane

Activision'ın efsanevi oyunu. David Crane, ormandaki ağaçları, lianlardaki sallanmayı ve koşan karakteri 128 byte RAM'de oluşturmak için playfield register'larını her birkaç scanline'da bir değiştiriyordu. Arka plan detayı oluşturmak için "asymmetric playfield" tekniğini kullanarak sol ve sağ yarımı farklı pattern'lerle doldurdu — bu normalde TIA'nın desteklemediği bir şeydi ama HBLANK sırasında register'ı değiştirerek başardı.

Yars' Revenge (1982) — Howard Scott Warshaw

Ekranın ortasındaki "nötr bölge" aslında oyunun kendi ROM verisinin ham byte'larının piksel olarak ekrana basılmasıydı! Yani oyunun kendi kodu görsel efekt olarak kullanıldı. Bu, bellek tasarrufu için inanılmaz yaratıcı bir çözümdü.

Kaynak Sınırlaması Zorluğu — Sayılarla

Karşılaştırma: Bu paragrafı okuduğunuz web sayfası tarayıcınızda muhtemelen 100+ MB RAM kullanıyor. Atari 2600'ün toplam RAM'i 128 byte — yani bu web sayfası Atari 2600'ün RAM'ının yaklaşık 800.000 katı bellek kullanıyor. Bu kısıtlamada Pitfall gibi bir oyun yapmak, bugünkü perspektiften bakıldığında neredeyse imkânsız görünür.

💡 Günümüzle Bağlantı

"Racing the beam" mantığı aslında tamamen ölmedi. Modern GPU'lar da scanline bazlı işlemeye benzer teknikler kullanır: tile-based rendering (özellikle mobil GPU'larda — ARM Mali, Qualcomm Adreno, Apple GPU) ekranı küçük dörtgenlere böler ve her birini sırayla işler — tıpkı Atari'nin satır satır çalışması gibi, ama çok daha sofistike. Ayrıca shader programlama da aslında "her piksel/vertex için çalışacak kodu yaz" felsefesiyle çalışır.

2. NES/Famicom Grafik Sınırlamaları 🎮

Nintendo Entertainment System (NES, Japonya'da Famicom — Family Computer, 1983) ev konsollarını diriltmiş ve modern oyun endüstrisinin temellerini atmıştır. Grafik yetenekleri Atari 2600'e göre devasa bir sıçramaydı, ama günümüz standartlarıyla baktığımızda hâlâ çok kısıtlıydı. NES, bu kısıtlamalar içinde üretilen oyunlarla (Super Mario Bros., The Legend of Zelda, Mega Man) oyun tarihinin en ikonik eserlerini çıkardı.

2.1. PPU — Picture Processing Unit

NES'in grafik işlemcisi olan PPU (Ricoh 2C02), CPU'dan bağımsız çalışan özel bir grafik çipiydi. Bu, Atari 2600'e kıyasla büyük bir gelişmeydi — artık CPU her scanline'ı elle oluşturmak zorunda değildi.

📊 NES/Famicom Teknik Özellikleri

  • CPU: Ricoh 2A03 (MOS 6502 tabanlı) @ 1.79 MHz (NTSC) / 1.66 MHz (PAL)
  • CPU RAM: 2 KB (2048 byte) — Atari'nin 16 katı, ama yine de çok az
  • PPU (Grafik Çipi): Ricoh 2C02
  • VRAM: 2 KB (PPU'ya ait) — nametable verileri için
  • OAM (Sprite Belleği): 256 byte — 64 sprite'ın konum/özellik verisi
  • Çözünürlük: 256×240 piksel (NTSC'de görünür alan ~256×224)
  • Ana palet: 54 benzersiz renk üretebilir (64 giriş, 10'u tekrar/siyah)
  • Ekranda aynı anda: 25 renk — 4 arka plan paleti (her biri 3 renk + ortak arka plan rengi) + 4 sprite paleti (her biri 3 renk + şeffaflık)
  • Kartuş ROM: 8-512 KB (mapper'a bağlı)

Tile Tabanlı Grafik Sistemi

NES, ekranı doğrudan piksel piksel adreslemez. Bunun yerine tile (karo/döşeme) tabanlı bir sistem kullanır. Tüm grafikler 8×8 piksellik tile'lardan oluşur. Bu tile'lar Pattern Table (CHR-ROM veya CHR-RAM) adı verilen bir bellekte saklanır ve kartuş üzerindeki ROM'dan gelir.

🗺️ Arka Plan (Background)

Ekran 32×30 = 960 tile'dan oluşur. Her tile'ın hangi pattern'i kullanacağı Nametable'da belirtilir. Her 2×2 (16×16 piksel) tile bloğu bir attribute byte paylaşır — bu byte hangi 4 renklik paletin kullanılacağını söyler.

Sonuç: 16×16 piksellik bloklar aynı renk paletini paylaşmak zorunda. İnce detaylı arka planlar bu yüzden zordur.

👾 Sprite'lar (Ön Plan)

64 sprite aynı anda bellekte tutulabilir (OAM — Object Attribute Memory, 256 byte). Her sprite 4 byte kullanır: Y pozisyonu, tile index, attribute (palet, yansıtma), X pozisyonu.

Her sprite 8×8 veya 8×16 piksel boyutundadır. Her sprite 4 renk paletinden birini kullanır ve her paletten 3 renk + şeffaflık (transparent) seçilebilir.

Renk Sistemi — 54 Renkten 25'ini Seçin

NES'in master paleti 54 benzersiz renk içerir (teknik olarak 64 giriş vardır ama yaklaşık 10 tanesi birebir siyah veya uyumsuz renk tekrarlarıdır). Bu renkler donanımda sabittir — değiştirilemez. Oyun geliştiricisi bu 54 renkten seçim yaparak paletlerini oluşturur:

Palet TürüAdetRenk/PaletToplam
Arka plan paletleri4 palet3 renk + 1 ortak arka plan rengi12 benzersiz + 1 ortak = 13
Sprite paletleri4 palet3 renk + şeffaflık12 benzersiz
Toplam ekranda aynı anda25 renk

Karşılaştırma için: bugün RGB renk uzayında 16.7 milyon renk (24-bit, 2²⁴) kullanabilirsiniz. NES'te 25. Bu kısıtlama altında renkli, canlı ve tanınabilir oyun dünyaları yaratmak büyük ustalık gerektiriyordu.

2.2. Sprite Sınırlamaları ve Titreşim (Flickering) Hilesi

NES PPU'sunun en bilinen kısıtlamalarından biri "scanline başına 8 sprite" sınırıdır. PPU, herhangi bir yatay scanline boyunca en fazla 8 sprite çizebilir. 9. ve sonraki sprite'lar o satırda görünmez hale gelir.

⚠️ 8 Sprite Sınırı Pratikte Ne Demek?

Ekranda yatay olarak hizalanmış 8'den fazla düşman veya obje olduğunda bazıları kaybolur. Bu, özellikle aksiyon oyunlarında ciddi bir sorundu — bir sürü düşman aynı yatay çizgide durabilir!

Geliştiriciler bu soruna akıllıca bir çözüm buldular: sprite titreşimi (flickering). Her karede (frame), hangi 8 sprite'ın o scanline'da gösterileceğini değiştirerek (rotate ederek), tüm sprite'ların saniyede 30 kez görünmesini sağlıyorlardı. İnsan gözü bunu hızlı bir titreşim olarak algılar — sprite kaybolmak yerine "yarı saydam" görünür. Mükemmel değil ama hiç görünmemekten çok daha iyi!

🔫 Mega Man (1987)

Mega Man serisi, sprite flickering'in en bilinen örneklerinden biridir. Ekranda çok sayıda düşman ve mermi olduğunda bazı sprite'lar titrer. Capcom bu sorunu minimize etmek için sprite öncelik rotasyonu (priority cycling) uyguladı — böylece her zaman rastgele bir sprite kaybolur, aynısı sürekli kaybolmaz.

🗡️ The Legend of Zelda (1986)

Zelda'da bir odada çok fazla düşman olduğunda flickering görülür. Ama ilginç olan şu: tasarımcılar düşman sayısını ve yerleşimini bu sınıra göre tasarladılar. Düşmanlar genellikle farklı yatay çizgilere dağıtılarak sorun minimize edildi. Seviye tasarımı donanım kısıtlamasıyla doğrudan bağlantılıydı.

Nametable Yansılama (Mirroring) ve Kaydırma

NES'in 2 KB VRAM'i iki nametable (32×30 tile = 960 byte + 64 byte attribute = 1024 byte) için yeterlidir. Ama kaydırmalı (scrolling) oyunlar genellikle dört nametable'a ihtiyaç duyar (256×240'ın 2 katı alan). Yetersiz VRAM'i telafi etmek için nametable mirroring kullanılır:

↔️ Yatay Yansılama (Horizontal Mirroring)

İki fiziksel nametable üst-alt olarak düzenlenir. Dikey kaydırma (vertical scrolling) yapan oyunlar için idealdir — örn: shoot-em-up oyunları (1942, Gun.Smoke). Yatay yönde kaydırma yapıldığında nametable sınırında grafik hataları ("seam") oluşabilir.

↕️ Dikey Yansılama (Vertical Mirroring)

İki fiziksel nametable yan yana düzenlenir. Yatay kaydırma (horizontal scrolling) yapan oyunlar için idealdir — örn: Super Mario Bros., Castlevania. Dikey yönde ek bellek yoktur; çoğu platformer bu modeli kullanır.

2.3. Mario'nun Tasarım Hikâyesi — Kısıtlamadan Doğan İkon

Shigeru Miyamoto'nun Super Mario Bros. (1985) için Mario karakterini nasıl tasarladığı, donanım kısıtlamalarının yaratıcılığı nasıl yönlendirebileceğinin en ünlü örneğidir. Mario'nun ikonik görünümünün her detayı bir teknik sınırlamanın çözümüdür:

Tasarım ÖğesiTeknik Neden
🧢 Şapka (Kep) Saç animasyonu son derece zordur — 8×8 veya 8×16 sprite'larda saç detayı çizmek ve koşarken doğal görünmesini sağlamak çok fazla tile gerektirir. Şapka bu sorunu ortadan kaldırdı. Tek renkli düz bir alan yeter.
👨 Bıyık Ağız animasyonu (konuşma, gülümseme) çok sayıda sprite frame'i gerektirir. Bıyık, ağzı gizleyerek yüz animasyonu ihtiyacını ortadan kaldırdı. Ayrıca bıyık, ten rengi ile yüz arasında kontrast oluşturarak burunu belirginleştirdi — 8×8'lik tile'da yüz hatlarını ayırt etmek başka türlü çok zordu.
👕 Tulum (Overalls) Koşma animasyonunda kollar ileri-geri hareket eder. Tulum, kol hareketinin gövdeyle birleştiği noktada renk kontrastı sağlar ve kolun ayrı göründüğü, az tile ile çizilebilmesini sağlar. Tulum ile gömlek farklı renkler olmasaydı, kol ve gövde ayrıştırılamazdı.
🟤 Büyük Burun 16×16 piksellik (2×2 tile) bir sprite'ta yüz ifadesi vermek neredeyse imkânsız. Büyük burun, karaktere kişilik vermenin en etkili yoluydu — 2-3 pikselle bile algılanabilir bir burun.
🎨 Renk Seçimi (Kırmızı/Mavi) NES sprite paleti 3 renk + şeffaflıktan oluşur. Mario'nun kırmızı-mavi-ten rengi kombinasyonu, minimum renk sayısıyla maksimum kontrast sağlar. Kırmızı arka planlardan (tuğla, boru) ayrışır, mavi tulum vücudu tanımlar.
🧠 Düşünün

Shigeru Miyamoto bir röportajında şöyle demiştir: "Donanım sınırlamalarını seviyorum çünkü bizi yaratıcı olmaya zorluyorlar." Mario'nun bugün dünya genelinde tanınan ikonik görünümü, aslında tamamen teknik zorunlulukların ürünüdür. Eğer NES sınırsız renk ve çözünürlük sunsaydı, Mario muhtemelen bu kadar sade, temiz ve akılda kalıcı tasarlanmazdı. Kısıtlama → Basitlik → Evrensellik.

2.4. Mapper Çipleri ve Bank Switching

NES'in CPU'su 16-bit adres yolu ile çalışır — yani toplamda 64 KB adreslenebilir bellek. Bunun bir kısmı RAM'e, bir kısmı PPU register'larına, bir kısmı da I/O'ya ayrılmıştır. Kartuş ROM'u için kalan alan PRG-ROM: 32 KB, CHR-ROM: 8 KB'dır. Erken dönem oyunlar (Donkey Kong, Ice Climber) bu sınırlar içinde kaldı.

Ama oyunlar büyüdükçe bu alan yetmedi. Çözüm: kartuşların içine özel mapper çipleri yerleştirmek. Bu çipler bank switching yaparak, büyük ROM'un farklı bölümlerini CPU'nun görebildiği 32 KB'lık (veya 8 KB'lık CHR) pencereye eşlerdi.

🔧 Önemli NES Mapper Çipleri

MMC1 (Mapper 1) — Nintendo, 1987

En yaygın mapper'lardan biri. The Legend of Zelda, Metroid, Mega Man 2 gibi oyunlarda kullanıldı. 256 KB'a kadar PRG-ROM ve 128 KB'a kadar CHR-ROM destekler. Nametable mirroring'i yazılımla değiştirebilir — bu, oyun sırasında yatay ve dikey kaydırma arasında geçiş yapmayı mümkün kılar. 4-bit seri register üzerinden kontrol edilir (yavaş ama işlevsel).

MMC3 (Mapper 4) — Nintendo, 1988

En güçlü ve popüler mapper. Super Mario Bros. 3, Kirby's Adventure, Mega Man 3-6 ve yüzlerce başka oyunda kullanıldı. 512 KB PRG-ROM, 256 KB CHR-ROM destekler. En önemli özelliği scanline counter: PPU'nun hangi satırda olduğunu takip edebilir ve belirli bir satırda otomatik olarak IRQ (interrupt) tetikleyebilir. Bu, ekranın farklı bölümlerinde farklı scroll pozisyonları kullanmayı (split-screen efektleri), durum çubuğu (status bar) göstermeyi ve daha karmaşık grafik hileleri yapmayı mümkün kılar.

MMC5 (Mapper 5) — Nintendo, 1990

En gelişmiş resmi Nintendo mapper'ı. Castlevania III, Just Breed gibi oyunlarda kullanıldı. Ek RAM (8 KB), geliştirilmiş nametable kontrolü, sprite başına ayrı CHR bank seçimi ve çarpma donanımı (multiplication) gibi özellikler sunar. Çok güçlü ama üretim maliyeti yüksek olduğu için az kullanılmıştır.

VRC6 (Konami, Japonya)

Castlevania III (Japon versiyonu — Akumajō Densetsu) ve Madara'da kullanıldı. Ekstra ses kanalları (3 ek kanal!) ekleyerek müzik kalitesini dramatik şekilde artırdı. Japon Famicom kartuşlarında ses hatları CPU'ya bağlandığı için bu mümkündü; NES'in farklı kartuş pin yapısı bu ek sesi desteklemiyordu. Bu yüzden Castlevania III'ün Japon ve Amerikan versiyonlarının müziği çok farklıdır!

💡 Bank Switching Kavramı

Bank switching, modern programlamanın "virtual memory" (sanal bellek) kavramının atası sayılabilir. Aynı adres aralığına farklı veri blokları eşlenebilir. CPU 32 KB'lık bir pencereden bakıyor gibi görür ama mapper çipi arka planda hangi 32 KB'lık dilimi göstereceğini seçer. Bu, kilobyte'larla ölçülen ROM boyutunu megabyte'lara çıkaran bir dahice çözümdü. Bugünkü GPU'lardaki texture streaming ve bellek yönetimi de aslında aynı temel fikri kullanır.

3. Commodore 64 ve VIC-II 💻

Commodore 64 (1982), tarihin en çok satan kişisel bilgisayarıdır (~17 milyon adet). Oyun konsollarından farklı olarak tam bir bilgisayardı (BASIC programlama dili, klavye, disk sürücü desteği), ama grafik ve ses yetenekleri dönemin oyun konsollarıyla yarışacak düzeydeydi — hatta çoğunu aşıyordu.

📊 Commodore 64 Teknik Özellikleri

  • CPU: MOS 6510 @ 1.023 MHz (NTSC) / 0.985 MHz (PAL) — 6502 tabanlı
  • RAM: 64 KB — dönemin ev bilgisayarları için çok cömert
  • Grafik çipi: VIC-II (MOS 6569 PAL / MOS 6567 NTSC)
  • Ses çipi: SID (MOS 6581 / 8580) — efsanevi ses yongası
  • Video modları:
    • Hi-Res: 320×200, 2 renk per 8×8 karakter bloğu
    • Multicolor: 160×200, 4 renk per 8×8 karakter bloğu (yatay çözünürlük yarıya düşer — dikdörtgen pikseller!)
    • Karakter modu: 40×25 karakter (her biri 8×8 piksel)
  • Renk paleti: 16 sabit renk
  • Donanım sprite'ları: 8 adet, 24×21 piksel (hi-res) veya 12×21 piksel multicolor (çift genişlik)
  • Sprite renkleri: Hi-res: 2 renk. Multicolor: 4 renk (2 ortak + 1 bireysel + şeffaflık)

VIC-II Grafik Modları: Hi-Res vs Multicolor

C64'ün dikdörtgen piksel kavramı önemlidir: Multicolor modunda yatay çözünürlük 160'a düşer ama pikseller gerçek kare değil, yatayda iki kat geniş dikdörtgenler olur. Bu, her 8×8 karakter bloğunda 4 renk kullanım hakkı verir (hi-res modunda sadece 2). Sanatçılar bu dikdörtgen pikselleri "geniş piksel" olarak kullan mak zorundaydı — bu da özel bir estetik yarattı.

🎨 Hi-Res Modu (320×200)

Tam çözünürlük, ama her 8×8 karakter hücresinde sadece 2 renk — bir arka plan, bir ön plan. Detaylı çizimler yapılabilir ama renk çeşitliliği çok kısıtlı. Grafik programları (Koala Painter gibi) genellikle multicolor'u tercih ederdi.

🌈 Multicolor Modu (160×200)

Yarı yatay çözünürlük, ama her 8×8 blokta 4 renk: 1 arka plan (global), 2 ortak renk (tüm bloklar paylaşır), 1 bireysel renk. Renkli görüntüler için tercih edilir. Dikdörtgen pikseller karakteristik "retro" görünümü oluşturur.

Raster Interrupt Hileleri

VIC-II çipinin en güçlü özelliklerinden biri raster interrupt desteğidir. Belirli bir scanline'a ulaşıldığında otomatik olarak CPU'ya interrupt (kesme) gönderir. Bu, programcılara inanılmaz güç verir:

📌 SID Chip — Ses Konusunda Devrim

Grafik konumuz olsa da C64'ün SID (Sound Interface Device — MOS 6581) çipini anmamak olmaz. Bob Yannes tarafından tasarlanan SID, 3 bağımsız ses kanalı, 4 dalga formu (sawtooth, triangle, pulse, noise), ADSR zarfı, ring modülasyon ve filtre desteği sunar. Ev bilgisayarlarında/konsollarında daha önce görülmemiş bir ses kalitesi sağladı ve bugün hâlâ müzisyenler tarafından "chiptune" müzik yapmak için kullanılır. SID, C64'ün oyun ve demo sahnesindeki başarısının en büyük nedenlerinden biridir — grafik ve ses birlikte güçlü bir deneyim yaratıyordu.

🌟 C64 Demoscene: Donanım Sınırlarını Aşma Sanatı

C64 "demoscene" kültürünün doğum yerlerinden biridir. Demo sahnesi, görsel-işitsel sunumlar (demo'lar) yaratan, donanımın ne yaptığının ötesinde neler yapabileceğini gösteren bir alt kültürdür. 2024'te UNESCO tarafından somut olmayan kültürel miras olarak tescil edilmiştir.

Demoscene programcıları (scener'lar):

  • 8 sprite sınırını sprite multiplexing ile aşarak yüzlerce hareketli nesne gösterdiler
  • Border alanında grafik gösterdiler (donanım bunu "desteklemiyordu")
  • FLI, IFLI, AFLI gibi tekniklerle neredeyse fotoğraf kalitesinde durağan görüntüler ürettiler
  • VIC-II'yi CPU veriyolu ile "badline" zamanlamalarını manipüle ederek normalde imkânsız efektler yaptılar
  • 1 MHz'lik bir işlemci üzerinde gerçek zamanlı 3D döndürme, plasma efektleri, sinüs kaydırma metinleri çalıştırdılar

Demo sahnesi, donanım sınırlamalarını sanat biçimine dönüştürmenin en saf örneğidir. Grafik bir zorunluluktan "ne kadar ileri gidebiliriz?" sorusuna dönüşmüştür.

4. Game Boy: 4 Ton Yeşil ile Devrim 🟢

Nintendo Game Boy (1989), teknik olarak çıktığında bile eski teknoloji kullanıyordu — ama düşük maliyet, uzun pil ömrü ve mükemmel oyun kütüphanesi sayesinde 118 milyon adetten fazla sattı (Game Boy Color dahil). Grafik açıdan en belirgin özelliği: sadece 4 ton yeşilimsi gri.

📊 Game Boy (DMG-01) Teknik Özellikleri

  • CPU: Sharp LR35902 (Intel 8080 + Zilog Z80 karışımı özel tasarım) @ 4.19 MHz
  • RAM: 8 KB
  • Video RAM: 8 KB
  • Ekran: 160×144 piksel, dot-matrix LCD
  • Renkler: 4 ton (en koyu → en açık). Orijinal DMG'de yeşilimsi tonlar. Pocket'ta gerçek gri tonlar.
  • Tile sistemi: 8×8 piksel tile'lar (maksimum 256 benzersiz tile aynı anda)
  • Sprite'lar: 40 adet (8×8 veya 8×16), scanline başına en fazla 10
  • Arka plan: 256×256 piksel harita, 160×144 pencere ile görüntülenir (scroll)
  • Window katmanı: Arka planın üstüne çizilebilen ikinci bir tile haritası (HUD/skor için)
  • Pil ömrü: ~30 saat (4 adet AA pil ile) — bu stratejik bir tasarım kararıydı

Tile Tabanlı Render Sistemi

Game Boy, NES gibi tile tabanlı render sistemi kullanır. Tüm grafikler 8×8 piksellik tile'lardan oluşur. Her piksel 2-bit (4 olası değer: 0, 1, 2, 3 — en açık ton → en koyu ton). VRAM'de en fazla 256 benzersiz tile (0-255 numaralı) saklanabilir ve arka plan haritası (32×32 tile = 256×256 piksel) bu tile numaralarından oluşur.

4 Ton ile Sanat Yaratmak — Pokémon Örneği

Pokémon Red/Blue/Green (1996), Game Boy'un en başarılı oyunlarındandır ve 4 tonluk grafik kısıtlamasının ne kadar yaratıcı kullanılabileceğini gösterir. Ken Sugimori ve ekibi 151 farklı yaratık tasarlarken ellerinde sadece 4 ton vardı.

🎨 4 Tonla 151 Pokémon Nasıl Tasarlandı?

  • Siluet önceliği: Her Pokémon'un dış hatı tanınabilir olmalıydı. Tasarımcılar önce siluet çizdi, sonra iç detayları ekledi. Pikachu'yu siyah siluetinden bile tanırsınız — bu bir tesadüf değil.
  • Kontrastlı detay: 4 tondan en açığı genellikle parlak/aydınlık alanlar, en koyusu dış hat ve gölgeler için kullanıldı. Orta tonlar hacim ve doku oluşturmak için.
  • Dithering desenleri: 4 tonun arasındaki geçişleri yumuşatmak için küçük pixel desenleri (dithering) kullanıldı — checkerboard (dama tahtası) patterniyle 4 ton'dan 6-7 algılanan ton elde edildi.
  • Bellek sınırlaması: Her Pokémon sprite'ı kartuşta sınırlı yer kaplar. İlk nesil Pokémon'd a front sprite ve back sprite'lar farklı boyutlardaydı — bazıları 40×40, bazıları 56×56 piksel. Bu bellek optimizasyonu kararıydı.
  • Stratejik basitleştirme: Detaylı bir yaratık yerine ikonik bir yaratık tasarlamak — her Pokémon'un bir veya iki belirgin özelliği (Charmander'ın kuyruk alevi, Bulbasaur'un sırt soğanı) minimal pikselle ifade edildi.
💡 Game Boy Color (1998)

Game Boy Color, çözünürlüğü aynı tutarak (160×144) renk desteği ekledi: 32.768 renklik paletten aynı anda 56 renk (arka plan: 8 palet × 4 renk = 32 + sprite: 8 palet × 3 renk + şeffaflık = 24). Bu, orijinal Game Boy oyunlarına otomatik renk ekleme ("colorize") özelliği de dahil olmak üzere büyük bir sıçramaydı. Ama aynı tile tabanlı mimari korundu — yani temel kısıtlamalar ve tasarım prensipleri aynen geçerliydi.

5. SNES Mode 7: Sahte 3D Devrimi 🌀

Super Nintendo Entertainment System (SNES/Super Famicom, 1990) neslin en güçlü konsollarından biriydi ve grafik açıdan en dikkat çekici özelliği Mode 7 adı verilen özel bir arka plan moduydu. Mode 7, bir arka plan katmanına döndürme (rotation), ölçekleme (scaling), eğme (skewing) ve perspektif dönüşümü uygulayarak sahte 3D (pseudo-3D) efektler yaratabiliyordu.

📊 SNES Teknik Özellikleri

  • CPU: Ricoh 5A22 (65C816 tabanlı) @ 3.58 MHz (erişim hızına göre 2.68/3.58 MHz)
  • RAM: 128 KB
  • Video RAM: 64 KB
  • PPU: Çift PPU sistemi (PPU1 + PPU2)
  • Çözünürlük: 256×224 (standart) veya 512×448 (interlaced, nadiren kullanıldı)
  • Renkler: 32.768 renklik paletten aynı anda 256 renk
  • Arka plan katmanları: 4'e kadar (moda bağlı)
  • Sprite'lar: 128 adet, 8×8 ile 64×64 arasında, scanline başına 32
  • Özel modul: Mode 7 — afin dönüşüm desteği

Mode 7 Nasıl Çalışır?

Mode 7, matematiksel olarak bir afin dönüşüm (affine transformation) matris çarpımı uygular. Her scanline için, SNES PPU'su bir 2D arka plan haritasını (1024×1024 piksellik bir tile haritası, her tile 8×8 piksel) şu parametrelere göre dönüştürür:

[ x' ] = [ A B ] × [ x - x₀ ] + [ x₀ ]

[ y' ]   [ C D ]   [ y - y₀ ]   [ y₀ ]

A, B, C, D parametreleri her scanline için ayrı ayrı ayarlanabilir. Hdma (H-Blank DMA) kullanarak her scanline'da bu parametreleri otomatik olarak değiştirmek, perspektif efekti yaratmanın anahtarıdır: ekranın üst kısmıiçin küçük ölçek (uzak), alt kısmı için büyük ölçek (yakın) → 3D zemin illüzyonu!

Mode 7 Kullanan İkonik Oyunlar

🏎️ F-Zero (1990)

SNES'in lansman oyunlarından biri ve Mode 7'nin en ikonik kullanımı. Yarış pisti düz bir 2D haritadır ve Mode 7 bu haritayı perspektif projeksiyon ile 3D zemin gibi gösterir. Virajlarda döndürme, rampada ölçekleme kullanılır. 60 fps'de akıcı sahte 3D yarış — 1990'da bu gerçekten etkileyiciydi. 3D modelleme veya poligon yok — hepsi 2D texture dönüşümü.

🏁 Super Mario Kart (1992)

Mode 7'yi yol yüzeyi için kullanır, ama inovasyonu sprite scaling ile karakterlerin (diğer yarışçıların) uzaklığa göre büyütülüp küçültülmesidir. Aslında diğer araçlar 3D model değil, farklı açılardan önceden çizilmiş 2D sprite'lardır. Mode 7 zemin + ölçeklenmiş sprite'lar = ikna edici 3D yarış. Nintendo'nun dahice tasarım kararlarıyla dünyanın en ikonik yarış oyunlarından biri doğdu.

✈️ Pilotwings (1990)

Uçak ve paraşüt simülasyonu. Mode 7, arazinin kuşbakışı görünümünü oluşturur; alçaldıkça/yükseldikçe ölçeklendirme, dönüşte döndürme efektleri kullanılır. Mode 7'nin rotasyon ve ölçeklendirme yeteneklerinin en kapsamlı kullanımlarından biri.

🔮 Final Fantasy VI (1994)

Dünya haritasını Mode 7 ile döndürülerek ve ölçeklenerek gösterir — karakteriniz hareket ettikçe tüm dünya dönüyor gibi görünür. Airship (hava gemisi) sahneleri de Mode 7 ile üstten perspektif görünüm sağlar.

📌 Mode 7'nin Sınırlamaları

Mode 7 her ne kadar etkileyici olsa da önemli kısıtlamaları vardı: sadece tek bir arka plan katmanı Mode 7 efekti kullanabilir (diğer katmanlar devre dışı kalırdı). Sprite'lar Mode 7'den etkilenmez — dönüşüm sadece arka plana uygulanır. Ayrıca texture yakınlaştığında pikselleşme çok belirgin olurdu çünkü filtre yoktu (bilinear/trilinear yoktu). Yine de bu sınırlamalarla bile 2D donanımda 3D illüzyonu yaratmak büyük bir başarıydı.

6. Palet Döngüsü (Color Cycling) 🎨

Palet döngüsü (color cycling / palette rotation), erken dönem bilgisayar grafiğinin en zarif animasyon tekniklerinden biridir. Piksel verileri hiç değiştirilmeden, sadece renk paletindeki değerler kaydırılarak görüntüde hareket illüzyonu yaratılır. Bu teknik neredeyse sıfır işlem gücü ve sıfır ek bellek kullanır — çünkü değişen şey pikseller değil, renklerin kendisidir.

Nasıl Çalışır?

İndeksli renk (indexed color) sistemlerinde —ki Amiga, C64, VGA bilgisayarlar hep bunu kullanır — her piksel doğrudan RGB değeri tutmaz. Bunun yerine bir palet indeksi (0-255 arası bir sayı) tutar ve bu indeks renk paletinde karşılık gelen RGB değerine bakar. Palet döngüsü bu tabloyu manipüle eder:

⚙️ Palet Döngüsü Adımları

  1. Sanatçı bir görüntü çizer. Belirli alanları (su, ateş, ışık) ardışık palet indeksleri ile boyar (örn: #10, #11, #12, #13, #14 — giderek açılan mavi tonları).
  2. Her karede (veya belirli aralıklarla), bu ardışık indekslerdeki renk değerleri bir pozisyon kaydırılır (rotate): #10'un rengi #11'e, #11'inki #12'ye... ve #14'ünki #10'a gider.
  3. Pikseller hiç değişmedi — ama piksellerin "baktığı" renkler kaydı. Sonuç olarak su akar, ateş yanar, ışıklar parlar gibi görünür.

Mark Ferrari — Color Cycling Ustası

Mark J. Ferrari, palet döngüsü tekniğinin en usta uygulayıcılarından biridir. LucasArts macera oyunları (Loom, The Secret of Monkey Island, Thimbleweed Park) ve kendi kişisel çalışmalarıyla tanınır. Ferrari'nin Deluxe Paint (DPaint) ile Amiga'da yaptığı çalışmalar, statik bir pikseli sanat yapıtına dönüştürmenin şaheser örnekleridir.

🖌️ Mark Ferrari'nin Palet Döngüsü Teknikleri — Detaylı

🌊 Su Animasyonu

Su efekti için Ferrari 6-8 ardışık palet girişi kullanır: koyu mavi → orta mavi → açık mavi → beyaz (ışık yansıması). Bu girdiler döngüsel olarak kaydırıldığında, su yüzeyindeki ışık yansımaları kayıyor gibi görünür. Üstelik bunu birden fazla hızda yaparak — yüzeydeki dalgalar hızlı, derin sudaki tonlar yavaş — çok katmanlı bir su illüzyonu elde eder.

🔥 Ateş ve Lav Animasyonu

Ateş için kırmızı → turuncu → sarı → beyaz gradyanında palet döngüsü. Lavlar genellikle daha yavaş bir döngü ile koyu kırmızı → parlak turuncu arasında kaydırılır. Ferrari, aynı görüntüde farklı döngü hızları ve yönleri kullanarak birden fazla bağımsız hareket oluşturur.

💎 Mücevher ve Parıltı

Mücevherlerde 4-5 palet girişi beyaz bir "specular highlight" (yansıma parlıltısı) oluşturmak üzere döndürülür. Parlak nokta mücevherin yüzeyinde kayar gibi görünür. Aynı teknik metal yüzeylerdeki yansımalar için de kullanılır.

🌅 Gündüz/Gece Geçişi

Ferrari'nin en etkileyici çalışmalarından biri: tüm palet yavaşça değiştirilir (döngü değil, gradyan geçiş). Gökyüzü mavisinden turuncu gün batımına, oradan gece lacivertine ve tekrar şafak gülüne — tüm görüntü canlı bir gündüz/gece döngüsü yaşar. Hiçbir piksel değişmez, sadece renkler.

🎨 Deluxe Paint (DPaint)

Electronic Arts tarafından 1985'te Dan Silva tarafından yaratılan Deluxe Paint, Amiga platformunun en önemli grafik programıydı. DPaint, döngüsel renk aralıkları tanımlama özelliği ile palet döngüsü sanatını doğrudan destekliyordu. Ferrari, DPaint IV'ü ana aracı olarak kullanmıştır. DPaint, retro grafik topluluğu tarafından hâlâ saygıyla anılır — birçok retro-stil oyun ve piksel sanatı hâlâ DPaint'ten ilham alır.

💡 Günümüzle Bağlantı: Palet Döngüsü Hâlâ Yaşıyor

Palet döngüsü tekniği, Unity ve Godot gibi modern oyun motorlarında shader olarak uygulanabilir: bir renk arama tablosu (LUT) oluşturup bunu zamana göre kaydırmak, temelde aynı tekniktir. Retro-stil oyunlarda (Shovel Knight, Celeste) palet swap efektleri aktif olarak kullanılır. Ayrıca gif animasyonları bile palet döngüsü prensibini kullanır — GIF formatı indeksli renk tabanlıdır!

7. Dithering: Zorunluluktan Doğan Sanat 🔳

Dithering, az sayıda renkle daha fazla renk/ton illüzyonu yaratma tekniğidir. Farklı renklerdeki pikseller belirli desenlerde (pattern) yan yana yerleştirilerek, insan gözünün bu pikselleri ortalama bir ton olarak algılaması sağlanır. Baskı tekniklerindeki halftone (yarım ton) ile aynı prensiptir — gazetelerdeki siyah-beyaz fotoğraflar da aslında farklı boyutlarda siyah noktalardan oluşarak gri ton illüzyonu yaratır.

Sega Genesis/Mega Drive ve Dithering Zorunluluğu

Sega Genesis/Mega Drive (1988), rakibi SNES'e kıyasla daha sınırlı bir renk paletine sahipti:

ÖzellikSega GenesisSNES
Toplam palet512 renk (9-bit: 3-bit R, 3-bit G, 3-bit B)32.768 renk (15-bit: 5-bit per kanal)
Aynı anda ekranda61 renk (4 palet × 15 renk + 1 arka plan)256 renk
AvantajDaha hızlı CPU (Motorola 68000 @ 7.67 MHz)Daha zengin renk, Mode 7, özel ses

Genesis'in 512 renklik paleti, SNES'in 32.768'ine kıyasla oldukça kısıtlıydı. Bu fark özellikle gradyan geçişlerde (gökyüzü, su, gölgeler) belirginleşiyordu: SNES pürüzsüz tonlama yapabilirken, Genesis'te renk bantlaması (color banding) oluşuyordu. Sanatçıların çözümü: sistematik dithering.

Sonic the Hedgehog'da Dithering

🦔 Sonic Serisindeki Dithering Kullanımları

  • Şelale efektleri: Sonic 1'in Green Hill Zone'ndaki şelaleler, açık mavi ve beyaz piksellerin checkerboard düzeninde sıralanmasıyla oluşturulmuş saydam su illüzyonudur. CRT televizyonların piksel karıştırma (blending) özelliği bu dithering'i yumuşatarak pürüzsüz bir görünüm sağlıyordu.
  • Yer altı bölümleri: Marble Zone'daki lav ve mağara duvarlarında dithering, sınırlı palet ile doku ve derinlik oluşturmak için kullanılır.
  • Special Stage: Dönen labirent sahnelerinde dithering özellikle yoğundur — arka plan gradyanları dithering olmadan çok kaba bantlar halinde görünürdü.
  • CRT avantajı: Genesis sanatçıları, oyunların CRT televizyonlarda oynanacağını biliyordu. CRT'nin analog sinyal işleme yapısı yan yana pikselleri doğal olarak ayırt ederdi — bu da dithering pattern'lerini gözle görülebilir piksel desenleri yerine pürüzsüz gradyanlara dönüştürüyordu. Dithering, CRT için "tasarlanmış" bir teknikti.

Dithering Türleri

🔲 Ordered Dithering (Bayer Matrix)

Sabit bir eşik matrisi (genellikle 2×2, 4×4 veya 8×8) kullanılarak piksellerin hangi rengi alacağı belirlenir. Düzenli, tekrarlayan bir desen oluşturur. Oyunlarda en yaygın kullanılan tür — hafif ve öngörülebilir.

📊 Error Diffusion (Floyd-Steinberg)

Bir pikselin "hatası" (istenen renk ile mevcut palet arasındaki fark) komşu piksellere dağıtılır. Daha doğal, düzensiz bir desen üretir ama hesaplama maliyeti yüksektir. Genellikle baskı ve fotoğraf dönüşümlerinde kullanılır, gerçek zamanlı oyunlarda nadirdir.

🧠 Düşünün: Dithering Modern Dünyada

Dithering hâlâ çok yaygın: GIF formatı (256 renk sınırı), video sıkıştırma (bantlamayı gizleme), CSS/web gradyanları (düşük kalite ekranlarda), ve hatta oyun motorlarındaki post-processing (film grain, banding azaltma) dithering kullanır. Bir sonraki bölümde göreceğiniz pixel art çalışmalarında da dithering temel bir tekniktir!

8. Sprite Flickering: Kısıtlamadan Özelliğe 👻

NES bölümünde kısaca değindik; şimdi sprite flickering'in teknik detayını ve kültürel etkisini daha yakından inceleyelim. Bu konu, "bir hatanın nasıl bir özelliğe dönüştürülebileceğinin" ders kitabıdır.

Teknik Açıklama

NES PPU'su bir scanline'ı render ederken, sprite evaluation aşamasında o satırda hangi sprite'ların görünür olduğunu belirler. OAM'deki 64 sprite'dan o scanline ile kesişenleri bulur ve ilk 8'ini seçer. OAM sırasına göre (düşük index = yüksek öncelik) seçim yapılır. Eğer 8'den fazla sprite aynı satırdaysa, 9. ve sonrakiler o karede render edilmez.

PPU ayrıca sprite overflow flag (Status Register bit 5) set eder — ama bu flag donanım hatası nedeniyle tam güvenilir değildir (false positive/negative üretebilir).

Geliştiricilerin Çözümleri

🔄 OAM Döndürme (Rotation) Tekniği

  1. Her karede (1/60 saniye), OAM'deki sprite'ların sırasını döndür (rotate)
  2. Kare 1: Sprite A, B, C, D, E, F, G, H görünür → I, J, K kayıp
  3. Kare 2: Sprite D, E, F, G, H, I, J, K görünür → A, B, C kayıp
  4. Sonuç: Her sprite 60 fps'nin yaklaşık 40-50 fps'inde görünür → hızlı bir titreşim (flicker)
  5. İnsan gözü bunu "yarı saydam" veya "hafif titreyen" olarak algılar — tamamen kaybolmaktan çok daha iyi

Flickering'i "Özelliğe" Dönüştürme

Bazı oyunlar flickering'i bilinçli bir tasarım aracı olarak kullandı:

💡 Retro Estetiğin Parçası

Bugün retro-stil oyunlar (Shovel Knight, Celeste, Undertale) bazen kasıtlı olarak sprite flickering efekti ekler — teknik bir gereklilik olmadığı halde. Bu, NES kuşağının nostaljik "hissini" yaratmak için yapılır. Kısıtlamanın zorunlu sonucu olan bir teknik artefakt, zamanla estetiğin doğal bir parçası haline gelmiştir.

9. Parallax Scrolling: 2D'de Derinlik İllüzyonu 🏔️

Parallax scrolling (paralaks kaydırma), ekrandaki arka plan katmanlarını farklı hızlarda kaydırarak derinlik (depth) illüzyonu yaratma tekniğidir. Yakındaki nesneler hızlı, uzaktaki nesneler yavaş hareket eder — tıpkı gerçek hayatta bir arabadan dışarı baktığınızda yol kenarındaki ağaçların hızla geçerken uzaktaki dağların neredeyse yerinde durması gibi. Bu, hareket paralaksı (motion parallax) olarak bilinen bir derinlik algısı ipucudur.

Paralaksın Kısa Tarihi

🌙 Moon Patrol (1982)

Irem tarafından geliştirilen Moon Patrol, parallax scrolling kullanan ilk arcade oyunu olarak kabul edilir. Ay yüzeyinde ilerlenen bu side-scroller'da üç arka plan katmanı farklı hızlarda kayar: yakındaki tepeler hızlı, uzaktaki dağlar yavaş, yıldızlı gökyüzü çok yavaş. Bu basit teknik anında "dünya" hissini güçlendirdi.

🌴 Jungle Hunt (1982)

Taito'nun Jungle Hunt'ı da aynı yıl parallax scrolling kullandı. Orman sahnelerinde ağaç katmanları farklı hızlarda kayarak ormanın derinliğini hissettirir. Moon Patrol ile birlikte parallax scrolling'in arcade dünyasında yayılmasını başlatan öncülerdir.

Teknik Uygulama

2D donanımda parallax scrolling birkaç yöntemle uygulanabilir:

YöntemMekanizmaÖrnek Platform
Çoklu arka plan katmanı Donanım birden fazla bağımsız kaydırılabilir arka plan katmanı destekliyorsa (SNES: 4'e kadar, Genesis: 2), her katman farklı hızda kaydırılır. SNES, Genesis, GBA
Raster efektleri / Scanline tricks Tek arka plan katmanı olan sistemlerde, her scanline'da scroll register'ı değiştirilerek farklı satırlar farklı hızlarda kayar. Donanım 1 katman desteklese bile yazılımla çok katmanlı parallax yapılabilir. NES, C64, Game Boy
Sprite tabanlı Arka plan katmanı olmayan veya yetersiz olan sistemlerde, yatay şeritler halinde sprite'lar kullanılır. Atari 2600 (çok sınırlı), erken arcade
HDMA (Horizontal DMA) SNES'e özel: H-Blank sırasında DMA ile register değerleri otomatik olarak her satır için tablo dan güncellenir. Yazılım döngüsü gerektirmez, CPU serbest kalır. SNES

Parallax'ın Etkisi ve Mirası

Parallax scrolling, 1980'ler ve 1990'ların tüm 2D oyunlarında standart hale geldi: Sonic the Hedgehog (Genesis — 3-4 parallax katmanı), Donkey Kong Country (SNES — çok katmanlı, sahne sahneden değişen parallax), Street Fighter II (arka plan detayları), Metroid serisi ve sayısız platformer.

💡 Günümüzde Parallax

Parallax scrolling bugün web tasarımında da yaygındır — scroll yaparken arka plan resimlerinin farklı hızlarda kayması (CSS background-attachment: fixed veya scroll-linked JavaScript animasyonları). 2D oyunlarda (Hollow Knight, Celeste, Ori) parallax hâlâ aktif olarak kullanılır. CSS ve Canvas/WebGL tabanlı parallax efektleri, aslında 1982'deki Moon Patrol'un doğrudan mirasçısıdır.

10. Teknik Karşılaştırma Tablosu 📊

Aşağıdaki tablo, bu sayfada ele aldığımız tüm platformları yan yana karşılaştırmaktadır. Bu tablo, her platformun güçlü ve zayıf yanlarını bir bakışta görmenizi sağlar:

Atari 2600 NES/Famicom Commodore 64 Game Boy Sega Genesis SNES
Yıl 1977 1983 1982 1989 1988 1990
CPU MOS 6507 @ 1.19 MHz Ricoh 2A03 @ 1.79 MHz MOS 6510 @ ~1 MHz Sharp LR35902 @ 4.19 MHz Motorola 68000 @ 7.67 MHz Ricoh 5A22 @ 3.58 MHz
RAM 128 byte 2 KB 64 KB 8 KB 64 KB 128 KB
Video RAM 2 KB Paylaşımlı (16 KB video alanı) 8 KB 64 KB 64 KB
Çözünürlük 160×192 256×240 320×200 / 160×200 160×144 320×224 256×224 (512×448 interlaced)
Toplam palet 128 renk 54 renk 16 renk 4 ton (DMG) 512 renk 32.768 renk
Aynı anda ekranda ~4-5 (scanline'a bağlı) 25 renk 16 renk 4 ton 61 renk 256 renk
Sprite sayısı 2 Player + 2 Missile + 1 Ball 64 (8 per scanline) 8 donanım sprite 40 (10 per scanline) 80 (20 per scanline) 128 (32 per scanline)
Sprite boyutu 8px genişlik (1x/2x/4x) 8×8 veya 8×16 24×21 (hi-res) / 12×21 (mc) 8×8 veya 8×16 8×8 ile 32×32 arası 8×8 ile 64×64 arası
Arka plan katmanı 1 Playfield (20-bit) 1 (+ nametable scroll) 1 (karakter/bitmap) 1 BG + 1 Window 2 scroll katmanı 4'e kadar (mod bağlı)
Özel yetenek Mapper çipleri Raster interrupt, SID ses Taşınabilirlik Hızlı CPU, "Blast Processing" Mode 7, HDMA, ses (SPC700)
Frame buffer ❌ Yok! Tile tabanlı Bitmap veya Karakter Tile tabanlı Tile tabanlı Tile tabanlı
🧠 Tabloya Bakarak Düşünün

Atari 2600'ün 128 byte RAM'i ile SNES'in 128 KB RAM'ini karşılaştırın: 1000 kat fark. Ama aralarında sadece 13 yıl var! 1977'den 1990'a görkemli bir sıçrama. Şimdi SNES'in 128 KB'ını bugünkü bir bilgisayarın 16-64 GB RAM'iyle karşılaştırın: 125.000 - 500.000 kat daha fazla. Bu katlanarak büyüme, Moore Kanunu'nun (yaklaşık her 2 yılda transistor yoğunluğunun ikiye katlanması) doğrudan sonucudur.

11. Kaynaklar ve YouTube Kanalları 📺

Önerilen YouTube Kanalları

🎬 The 8-Bit Guy

David Murray tarafından yürütülen kanal (~1.3M abone), retro bilgisayar donanımı ve grafik teknolojilerine odaklanır.

  • "How Old School Graphics Worked" serisi — CGA, EGA, VGA grafik donanımlarının nasıl çalıştığını, renk paletlerinin nasıl oluşturulduğunu, karakter/bitmap modlarını detaylıca anlatan çok bölümlük bir seri. Bu dersin konularıyla doğrudan ilişkili.
  • Commodore 64 grafikleri — VIC-II çipinin çalışma mantığını, karakter setlerini ve multicolor modunu görsel olarak açıklayan videolar.
  • "How Oldschool Sound/Music Worked" — SID çipi, NES APU ve FM sentez dahil retro ses donanımlarını kapsar.
  • CRT vs LCD karşılaştırmaları — Dithering ve palet döngüsü tekniklerinin CRT'de neden daha iyi göründüğünü anlamanız için önemli.

🔬 Retro Game Mechanics Explained

Retro oyunların teknik altyapısını inanılmaz detayda açıklayan bir kanal.

  • NES PPU açıklama videoları — Nametable mirroring, sprite evaluation, scanline rendering sürecini adım adım açıklar. OAM'in nasıl çalıştığını, sprite overflow flag'inin donanım hatasını ve flickering mekanizmasını gösterir.
  • SNES grafik analizi — Mode 7'nin matematiksel temellerini, HDMA'nın nasıl kullanıldığını, DMA transfer mekanizmasını teknik diyagramlarla açıklar.
  • Mapper ve bank switching videoları — MMC1, MMC3 çiplerinin çalışma prensiplerini, scanline counter'ın split-screen efektleri için nasıl kullanıldığını gösterir.
  • Ses donanımı videoları — NES APU'dan SNES SPC700'e ses altyapısının evrimini kapsar.

🎮 Diğer Önerilen Kaynaklar

  • Displaced Gamers — NES ve SNES grafik pipeline'ı hakkında çok detaylı teknik videolar. PPU iç yapısını register seviyesinde açıklar.
  • Modern Vintage Gamer — Konsol donanım analizleri, emülatör geliştirme hikayeleri ve "impossible ports" (imkânsız portlar) videoları.
  • Morphcat Games — NES homebrew geliştirici. NES'in donanım sınırlarını itme konusunda pratik deneyim paylaşır. Micro Mages oyunları standart NES kartuşunda çıkmıştır.
  • Coding Secrets (YouTube/Blog) — Genesis/Mega Drive geliştirme tekniklerini, VDP çipini ve Sonic oyunlarının teknik altyapısını açıklar.

📚 Kitaplar ve Makaleler

  • "Racing the Beam" — Nick Montfort & Ian Bogost (MIT Press, 2009). Atari 2600'ün TIA donanımını ve üzerindeki yaratıcı programlamayı detaylıca anlatan akademik çalışma.
  • "I Am Error" — Nathan Altice (MIT Press, 2015). NES/Famicom platformunun teknik ve kültürel tarihini kapsayan kapsamlı kitap.
  • NESDev Wiki (nesdev.org/wiki) — NES donanım ve yazılım geliştirme konusunda en kapsamlı teknik referans. PPU, APU, mapper'lar hakkında her detay burada.
  • "The Commodore 64 Programmer's Reference Guide" — Commodore (1982). VIC-II ve SID register'larını, bellek haritasını ve programlama tekniklerini içerir.
  • Copetti.org (Rodrigo Copetti) — "Architecture of Consoles" yazı serisi. NES, SNES, Genesis, Game Boy ve birçok konsolu detaylı mimari diyagramlarla açıklayan harika bir online kaynak.

İnteraktif Web Kaynakları

🌐 Tarayıcıda Deneyin

  • effectgames.com/demos/canvascycle — Mark Ferrari'nin palet döngüsü çalışmalarını tarayıcıda canlı olarak deneyimleyebileceğiniz interaktif demo. Su, ateş, gündüz/gece geçişlerini görün.
  • famitracker.com — NES ses donanımını simüle eden bir müzik oluşturma aracı. Chiptune müzik yapmayı deneyin.
  • nesdev.org/wiki — NES geliştirme topluluğunun wiki'si. PPU, APU ve mapper'lar hakkında en detaylı teknik bilgiler burada.
  • lospec.com/palette-list — NES, Game Boy, C64, Genesis gibi eski platformların renk paletlerini indirip kendi pixel art'ınızda kullanabileceğiniz kaynak.

12. Sonuç: Kısıtlama Yaratıcılığın Anasıdır 🎯

📌 Bu Sayfanın Ana Mesajı

Bu sayfada gördüğünüz her teknik — racing the beam, sprite flickering, dithering, palet döngüsü, parallax scrolling, tile tabanlı rendering — bir kısıtlamaya verilen yaratıcı bir yanıttır. Bu tekniklerin birçoğu sadece tarihsel değil; modern oyun geliştirmede, web grafiklerinde ve shader programlamada hâlâ aktif olarak kullanılıyor.

Bir sonraki derste (Bölüm 5: Pixel Art) bu tarihsel bilgileri pratiğe dökeceğiz: kendi 4 renkli Game Boy sprite'ınızı çizecek, dithering tekniklerini uygulayacak ve NES renk kısıtlamasıyla çalışacaksınız.

🔑 Anahtar Çıkarımlar

  • Frame buffer yokluğu → "Racing the beam" ile satır satır gerçek zamanlı grafik üretimi (Atari 2600)
  • Renk paleti sınırlaması → Dithering, palet döngüsü, stratejik renk kullanımı
  • Sprite sınırlaması → Flickering tekniği, multiplexing, seviye tasarımını donanıma göre planlama
  • Bellek sınırlaması → Tile tabanlı rendering, bank switching ile mapper çipleri
  • 2D donanım sınırlaması → Mode 7 ile sahte 3D, parallax scrolling ile derinlik illüzyonu
  • Karakter tasarımı sınırlaması → Mario'nun bıyığı, şapkası, tulumu — her detay bir çözüm
  • Genel ilke: Kısıtlama altında çalışmak, daha sade, daha akılda kalıcı ve daha optimize çözümler üretmeye zorlar. Bu ilke her zaman geçerlidir.

Bölüm 1'e Dön · Ana Sayfa