Tsubasa Türkiye | Giriş yapmadınız veya üye değilsiniz. Sitemize tam erişim için Giriş Yapın veya Kayıt Olun

*

NES Oyun Programlama Kılavuzu Bölüm 1

Bu konu; 3 defa yorumlanmıştır.
Konu Sahibi : Kojiro Hyuga
Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Tanıtım
 Bu, Nintendo Entertainment System (NES) oyun konsolunun programlanmasıyla ilgili yazı dizimizin ilki. 35 yıldan daha uzun bir süre önce piyasaya sürülen NES, hiç deneyimim olmayan bir programlama biçimini temsil ediyor. Çoğu geliştirici, temel CPU mimarisini gizleyen yüksek seviyeli dillerde programlama yapıyor. Buna karşılık, NES programları, sınırlı donanımdan en iyi şekilde yararlanmak için genellikle Assembly’de 'el yapımıdır'. Bu, işlem kodlarını, adresleme modlarını, kayıtları, çağrı yığınını, kesintileri ve daha fazlasını öğrenmeyi içerir. Bu gerçekten çıplak metal programlamadır! Ama ondan önce konsola genel bir bakışla başlayalım.
 
NES(Nintendo Entertainment System)

[Resim: evfdibx.jpg]Nintendo, NES'i 80'lerin ortalarında Batı'da piyasaya sürdü. Nintendo'nun 1983'te Japonya'da piyasaya sürdüğü ev konsolu Famicom'un ihracat versiyonuydu. Oyunlar Game Paks adı verilen ve konsola takılan kartuşlarda satıldı. İki oyun kumandası ile geldi. Her kumandada bir D-pad, A ve B işlem düğmeleri, bir Başlat(Start) düğmesi ve bir Seç(Select) düğmesi vardı. Konsolun kendisinde yalnızca iki düğme vardı: Güç(Power) ve Yeniden Başlat(Reset).
 PAL renkli televizyon standardı için NES'in bir versiyonu ve NTSC standardı için bir başka versiyonu vardı. Konsol bir hit oldu ve Nintendo daha sonra NES'in iki arcade versiyonunu geliştirdi: Nintendo vs Sistem ve PlayChoice-10. Ayrıca Zapper gibi alternatif kontrolörler de dahil olmak üzere çeşitli çevre birimleri yaptılar. 90'ların ortalarında Nintendo, Super NES'i piyasaya sürdü ve NES'in satışları düştü. Nintendo, NES'i 1995'te durdurdu.

 
Merkezi İşlem Birimi(CPU)
 NES'in kalbinde Ricoh firması tarafından yapılan bir merkezi işlem birimi (CPU) bulunur. Bu, MOS Teknolojisi 6502'ye dayanmaktadır, ancak patentli bir ikili kodlu ondalık modu es geçer. NTSC NES ve PAL NES, Ricoh CPU'nun farklı sürümlerini kullanır. İlki Ricoh 2A03'ü (diğer adıyla RP2A03) ve ikincisi Ricoh 2A07'yi (aka RP2A07) kullanır.
 Bir CPU, makine komutlarını yürüterek çalışır. Her komut, bir komut işlem kodu (opcode) ile başlar. İşlem kodu, CPU'nun gerçekleştirmesi gereken belirli işlemi tanımlar. 6502, 151 resmi işlem koduna sahiptir. Birçoğu, üzerinde çalışılacak verileri tanımlayan bilgileri (bir işlenen) içerir.
 Saat hızı, bir CPU'nun komut çalıştırma hızını belirler. Saniyedeki saat döngüleriyle ölçülür. NES'in CPU'sunun saat hızı, konsolun sürümüne bağlıdır. PAL versiyonu 1.66 MHz saat hızına sahiptir ve NTSC versiyonu 1.79 MHz saat hızına sahiptir. Çoğu komutun çalıştırılması 2 ila 7 saat döngüsü sürer.
 Makine komutları şeklinde yazılan koda makine kodu denir. NES için oyunlar genellikle Assembly ile yazılır. Bu, makine koduna benzeyen ancak yazması daha kolay olan düşük seviyeli bir programlama dilidir. Bunu makine koduna dönüştürmek için bir assembler kullanılır.
 CPU 8 bitlik bir CPU'dur, yani 8 bitlik bir veri yoluna sahiptir. Veri yolu, dahili RAM ve CPU dahil olmak üzere sistemin farklı bölümleri arasında veri aktarımı yapar. Veri yolunun genişliği, aktardığı bireysel değerlerin bit cinsinden boyutudur. 8 bitlik bir veri yolu, bir seferde yalnızca 8 bit - bir bayt - aktarabilir. Böylece her makine talimatı sadece 8 bitlik veri değerleri üzerinde çalışabilir. Daha büyük değerler üzerinde çalışmanız gerekiyorsa, birden fazla talimatı birleştirmeniz gerekir.
 NES'in yalnızca 2 KiB dahili (sistem) RAM'i vardır. Ancak bu, oyun kartuşu aracılığıyla artırılabilir.
 CPU'nun 16 bitlik bir adres alanı vardır, yani 0000 ile $FFFF arasında 65.536 (=#ffffff2^=#ffffff16) bellek konumunu adresleyebilir. Bu bellek birkaç bölgeye ayrılmıştır, ancak hepsi faydalı veya hatta mevcut bile değildir. Sistem RAM'i, adres alanının ilk 2 KiB'inde, 0000 $ ile 07FF $ arasındaki adreslerde bulunur. Oyun kartuşu ayrıca ROM ve bazen de RAM içerir ve bu, adres alanına eşleştirilir. (Bu eşleştirme, CPU adres alanının o kısmından bir değer okuduğunda, aslında oyun kartuşundan bir değer okuduğu anlamına gelir.) Adres alanı ayrıca grafik ve ses bileşenlerini kontrol etmek ve bağlı çevre birimlerinin durumunu sorgulamak için kullanılır. Bunu, adres alanındaki belirli baytlardan okuyarak ve bunlara yazarak yapabilirsiniz.
 Bellekteki alanlara başvurmanın kullanışlı bir yolu sayfa numarasıdır. CPU adres alanı, her biri 256 baytlık 256 sayfaya bölünebilir. Sıfır sayfası olarak bilinen ilk sayfa, $0000 adresinde başlar. CPU küçüktür, bu nedenle programdaki herhangi bir adres ilk önce en az anlamlı bayt (LSB) ve ikinci olarak en önemli bayt (MSB) olarak kodlanır. $1234 adresinin işleneniyle Assembly'de bir talimat yazarsak, assembler bunu $3412 ($12 MSB ve $34 LSB'dir) olarak kodlayacaktır.
 CPU, altı işlemci kaydı içerir. Bunlar, erişimi hızlı olan ve NES'in 2 KiB sistem RAM'inden ayrı olan özel veri depolama alanlarıdır. Bunları, bellek konumları arasında veri aktarmak ve CPU'nun aritmetik mantık birimini (ALU) kullanarak hesaplamalar yapmak için kullanabilirsiniz. Bunları ayrıca CPU'nun mevcut durumunu keşfetmek için de kullanabilirsiniz. Assembly’deki öğrenme sürecinin çoğu, işlem kodlarını ve bu kayıtları nasıl etkilediklerini anlamayı içerir. Bu anlayışla, Assembly’de döngüler ve koşullu ifadeler gibi yapıları programlayabilirsiniz.

 
Grafik Desteği
 Resim İşlem Birimi (PPU), NES'den video çıkışını yönetir. 256 x 240 piksel çözünürlüğü ve 54 farklı renkte paleti vardır. 64 adede kadar eşzamanlı sprite (nesne de denir) ve arka planları kaydırmak için desteği vardır.

[Resim: szosxgi.png]
Castlevania oyunundan bir ekran görüntüsü.


PPU, $0000 ile $3FFF arasında 16 KiB adres alanına sahiptir. PPU ayrıca, Nesne Özellik Belleği (OAM) olarak adlandırılan 256 baytlık bir bellek bloğu içerir. Bu bellek, PPU'nun 16 KiB adres alanından ayrıdır. PPU, görünümlerini ve konumlarını belirlemek için sprite oluştururken ondan okur. Ekranda görüntülenen görüntüyü değiştirmek istediğimizde PPU'nun durumunu güncellememiz gerekiyor. Bu genellikle CPU adres alanındaki özel adresler kullanılarak yapılır. Bu adreslere yazarak PPU ve OAM'nin durumunu güncelleyebiliriz.
NES, yaygın olarak kullanılan görüntüleme teknolojisinin katot ışın tüpü (CRT) olduğu bir zamanda oluşturuldu/ortaya çıktı. CRT, bir floresan ekrana bir veya daha fazla elektron ışını yansıtarak çalışır. Bir görüntü oluşturmak için ışını bir yandan diğer yana ve yukarıdan aşağıya tarar. Işın dibe ulaştığında, sonraki kareyi taramaya başlamak için ekranın en üstüne döndürülmesi gerekir. Ekranın en üstüne geri dönmek kısa bir zaman alır ve bu süre dikey boşluk aralığı veya vblank olarak adlandırılır. Vblank sırasında PPU bir çerçeve oluşturmaz ve bu nedenle PPU'nun durumunu güncellemek güvenlidir. NTSC NES saniyede 60 kare hızında, PAL NES ise saniyede 50 kare hızında işlenir.

 
Ses Desteği
 Ses İşleme Birimi(APU), NES'deki sesleri işler. APU, CPU ile aynı fiziksel çiptedir. Beş ses kanalını destekler: dört analog ve bir dijital. PPU'da olduğu gibi, APU, CPU adres alanındaki belirli adreslere yazma kullanılarak kontrol edilir.
 
Oyun Kartuşu
 NES'e taktığınız oyun kartuşu da sistemin bir parçasını oluşturur. En basit oyun kartuşu NROM'dur. Program ROM (PRG-ROM) ve Karakter ROM (CHR-ROM) olmak üzere iki bellek yongası içerir. Bu adlardan da anlaşılacağı gibi, her ikisi de salt okunurdur(Read-only). PRG-ROM, programın kendisini (makine kodu olarak) içerir ve 16 KiB veya 32 KiB boyutundadır. CPU'nun bu program kodunu çalıştırabilmesi için CPU'nun adres alanına eşlenir. CHR-ROM, arka plan ve spritelar için model tablosu verilerini içerir. Bu, 4 KiB veya 8 KiB boyutundadır. Bu veriler, PPU'nun adres alanına eşlenir.
NES donanımının sınırları, PRG-ROM ve CHR-ROM'un boyut sınırlarını belirledi. Bu sınırlar, NES'in piyasaya sürülmesinden sonra geliştiricilerin daha karmaşık oyunlar oluşturmak istemesi nedeniyle bir sorun haline geldi. Çözüm, bellek yönetimi denetleyicisiydi (MMC). Bu, oyun kartuşunda daha fazla program kodu ve daha fazla desenin saklanmasına izin veren ekstra bir yongadır. NES hala aynı donanım sınırlarına sahip ancak artık MMC, oyun kartuşundaki hangi baytların CPU ve PPU ile eşlendiğini kontrol edebiliyor.

MMC'nin her biri kendine özgü özelliklere sahip çeşitli tasarımları vardır. Bazı MMC'ler oyun kartuşundaki RAM'i destekler. Bu, sistem RAM'inin sınırlı boyutu veya kalıcı olmaması bir sorun olduğunda kullanışlıdır. RAM, pil destekli olabilir ve geliştirici bunu mevcut oyun durumunu kaydetmek için kullanabilir (bunun yerine birkaç oyun EEPROM kullansa da). Normalde kartuştaki herhangi bir RAM, program RAM'dir (PRG-RAM) ve CPU adres alanının bazı alanlarına eşlenir. Birkaç oyun, PPU'nun adres alanına eşlenen parakter RAM'ini (CHR-RAM) kullanır. Bu, NES'in bazı görüntüleme kısıtlamalarını aşmak için kullanılır; Daha fazla bilgi için buraya bakın.
Kontrolcü Entegre Devre (CIC) yongası her zaman resmi oyun kartuşlarında bulunurdu. Belirli bir NES konsolunda yalnızca belirli bir dünya bölgesinden oyunların oynanabilmesini sağlayan bir kilitleme yongasıdır.

Aşağıdaki resim, açılmış bir oyun kartuşunu göstermektedir;

[Resim: gttvvbe.jpg]

En üstteki çip MMU'dur. Alt sırada, soldan sağa, CIC, CHR-ROM ve PRG-ROM yongalarını görüyorsunuz.
 
Sonuç
 NES, günümüzün oyun konsolları ve kişisel bilgisayarlarına kıyasla birçok sınırlamaya sahiptir. Sınırlı bir CPU'su, az miktarda sistem RAM'i, dar bir veri yolu ve kendine özgü bir PPU'su vardır. Buna rağmen mükemmel bir oyun kütüphanesine sahip ve çok sevilen bir konsol olmaya devam ediyor.

Kaynak
Savaşı kazanan adalet olacak!!!
Yukarı Çık Cevapla
#2
Siyah temadan dolayı yazılar görünmüyor.Yazıyı beyaz yapabilirsin.
Güzel bir bilgilendirme yazısı olmuş eline sağlık.
CT-2 Hack Nasıl Yapılır?

TsubasaTR Hackleri


TR.Net'i Youtube semalarına taşımış bulunmaktayız 
tsubasatr.net Her yerde peki ya sen nerdesin?
[img][Resim: mkVGaR.jpg]
Bunu ilk beğenen sen ol.
Yukarı Çık Cevapla
#3
Eline sağlık Mahir. Programlama bilmesem de merakla okudum. Devamını bekliyoruz.
Bunu ilk beğenen sen ol.
Yukarı Çık Cevapla
#4
NES konsollar gerçekten çok düşük 8 bit cihazlar. Fakat bu konsola oyun yapanlar bu kısıtlı imkanları o kadar güzel kullanmışlar ki, neredeyse tüm oyunlar efsane olabilecek kadar güzel. Bugün hala CT2 oyunu PS2'ye çıkan oyundan, hatta geçen sene çıkan oyundan daha çok seviliyorsa, bu konsolları tüm yaratıcılıklarıyla kullanan geliştiriciler sayesinde.
[Resim: hS4iDOk.png]
Bunu ilk beğenen sen ol.
Yukarı Çık Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Captain Tsubasa 2- Yeni Oyun Hileleri Hiena 7 2,351 20-04-2024, Saat: 09:54
Son Yorum: Kian
Captain Tsubasa - Hile kodları - Oyun Hilesi SacMisaki 6 6,413 29-01-2024, Saat: 05:35
Son Yorum: Lenib180
Captain Tsubasa 2 Super Striker - Oyun Müzikleri Karl Heinz Schneider 0 119 24-11-2021, Saat: 14:06
Son Yorum: Karl Heinz Schneider
Nes Oyun Programlama Kılavuzu Bölüm 2 Kojiro Hyuga 1 171 13-08-2021, Saat: 13:20
Son Yorum: Jun Misugi

Yönetim Ayarları
Hızlı Menü:



Konuyu Okuyanlar
2 Kullanıcı Bu Konuyu Okudu:
Martin_Diaz (23-04-2024, 06:30), Kian (29-04-2024, 01:26)
 
Görüntüleyenler: 1 Ziyaretçi