NES'e gelince (ve SNES çok fazla), işte temel bir bakış. Herhangi bir NES oyunu yazmadım, ama bir NES öykünücüsü (Graybox) yazdım ve eski arabaları revize ettim.
Programlama dili gelince: evet, hepsi meclisti. NES'in programlanması, doğrudan donanım kesintileri, DMA portları, banka değiştirme vb. İle çalışmak anlamına geliyordu. Neyse ki, 6502'yi (ya da daha doğrusu 2A03'ü) programlamak oldukça kolaydır [1]:
- Çok az sayıda kayıt var: A, X ve Y temelde ikincisi sadece indeksleme ve yineleme için kullanılabilir
- komut seti küçük ve çoğunlukla basit
- çok fazla bellek yok: isteğe bağlı pille desteklenen 8KB uzatma özelliğine sahip ana RAM 2KB'dir. Bu 2KB'den, 256 bayt yığın için ayrılmıştır ve sayfa 0 (ilk 256 bayt) bazı özel adresleme modları nedeniyle en çok kullanılan işaretçilerinizi ve değerlerinizi saklamak istediğiniz yerdeydi.
Bu üç şey birlikte çalışırken, ezberlemek için yeterince kolay bir ortam sağlar. Evet, tüm hafızayı kendiniz yönetirsiniz, ancak bu esasen her şeyin yolunda gittiği bir harita oluşturduğunuz ve o haritanın çok büyük olmadığı anlamına gelir, çünkü sadece 2K için endişelenmeniz gerekir, böylece bunu bir parçaya koyabilirdiniz. grafik kağıdı. İşleri biraz daha fazla planlamak ve değişkenleri ve sabitleri RAM ve ROM (kartuştaki) konumlarına atamak zorundaydınız.
Kartuş verileriniz CPU'nun adreslenebilir sınırlarının ötesine geçtiğinde biraz kandırır. Bu, 32KB'nin altına taşlanmış ve her türlü donanım portuna ve RAM'e eşlenen 64KB'dir. Banka değiştirme işleminin devreye girdiği yer burasıdır, bu da ROM'un bir bölümünü yüksek 32KB adres alanına (bir kısmının) eşlemek anlamına gelir.
Bu, programcının istediği şekilde kullanılabilir, ancak örnek bir kullanım, kartuştaki ayrı 8KB bellek alanlarına sıkıştırılan her seviye için tüm seviye verileri, meta veriler ve kod içeren 3 seviyeli bir oyuna sahip olabilir. Seviye, örneğin başlatma, kare güncelleme başına vb. İçin geri aramalara sahip olabilir. "Seviyeyi" yüklemek, örneğin 8 KB'lik bellek öbeğini eşlemek anlamına gelir, örneğin 0xC000. Ardından, başlangıç rutininin her zaman 0xC000'de olduğunu, çerçeve güncelleme yordamının 0xC200'de olduğunu ve düzey verilerinin 0xC800'de başladığını belirleyebilirsiniz. Oyunun ana kodu başka bir bellek öbeğine yerleştirilir ve ardından seviye doğru değişiklikleri yalnızca doğru öbek yerine geçerek ve uygun zamanlarda 0xC000 ve 0xC200 mutlak adreslerine atlayarak kontrol eder.
Grafik verilere göre: NES'in döşeme verileri 2-bit 8x8 piksel haritalardır. Arka plan için 1/4 çözünürlükte 2 bit katmanla birleştirilirler. Bu 4 bitlik değerler daha sonra 53 efektif renk seçeneğine inanıyorum. Sprite'lar ayrıca 2-bitlik piksel verilerini kullandı ve her bir sprite, yine bir 4-bitlik pal dizini oluşturan kendi 2-bitlik grup dizinini belirledi. Ekrandaki BG resmi 32x30 karo indeksi numara dizisidir.
Temel olarak, bir ton tekrar ve indeksler halinde indeksler oluşturarak verileri çok küçük tutabilirsiniz. Seviye verileri genellikle kiremit indekslerinin dikey çubukları olarak depolandı ve bu dikey çubuklar da tekrar kullanıldıkları için bunlar da indekslendi ve kartuşta yalnızca bir kez saklandı. Basit veri sıkıştırma teknikleri benzer şekilde çalışır. Bu, Mario 1'in 32KB veri (oda boş bırakılacak) ve 8KB bitmap veri olmasına izin verdi.
Dev ortamlara gelince, insanların çalışmak için EEPROM brülörlerine bağlı eski ve güvenilir bilgisayarlarda çalıştığı bazı fotoğraflar gördüm. Takım yardımlı hata ayıklama, SNES yaşından sonraya kadar bir olasılık değildi [2]. Bu, eski oyunların çoğunda "bariz" böceklerin bulunmasının ve Gameshark gibi şeylerin yaptıklarını yapabilmelerinin ana nedenidir; oyuncu sağlığı her zaman mem-X konumunda olacak, böylece her zaman 100 olması için zorlayabilirsin.
Bunları ilginç bulursanız, örneğin, http://wiki.nesdev.com/w/index.php/Nesdev_Wiki sayfasını incelemenizi öneririz
. NES'in çevrimiçi olarak bulunabileceği bir kaç tane programlama kursu vardır.
Umarım bu basitleştirilmiş genel bakış 80'li yılların oyun gelişimi hakkında bazı bilgiler vermiştir.
[1] Göreceli olarak konuşuyorum. Ayrıca Graybox'ın kendisini% 85 PowerPC montajında yazdığı için önyargılıyım. [2] FF6 makalesinin yapımına bakınız: http://www.edge-online.com/features/the-making-of-final-fantasy-vi/