NES'in CPU'su popüler 8-bit MOS Technology 6502 tabanlı bir Ricoh 2A03 olup 1,79 MHz (veya PAL sistemlerinde 1,66 MHz) hızında çalışır.
Biraz bağlam
70'lerin sonu ve 80'lerin başında CPU pazarı oldukça çeşitliydi.

Bir Commodore PET, 6502 CPU taşıyor.

Bir Tandy TRS-80, 6502 CPU taşıyor.
Eğer bir şirket uygun fiyatlı bir mikrobilgisayar üretmek istiyorsa, aşağıdaki seçenekler mevcuttu:
- Intel 8080: ilk 'kişisel' bilgisayar olan Altair'de yer alan popüler bir CPU. 8 bitlik bir veri yolu ve 16 bitlik bir adres yolu vardır.
- Zilog Z80: 8080'in daha fazla talimat, kayıt ve dahili bileşenle geliştirilmiş 'resmi olmayan' bir versiyonu. Daha ucuz bir fiyata satıldı ve hala 8080 programlarını çalıştırabiliyordu . Amstrad ve Sinclair (diğerlerinin yanı sıra) bu CPU'yu seçti.
- Motorola 6800: Motorola tarafından tasarlanan bir başka 8-bit CPU, tamamen farklı bir komut seti içerir. Birçok kendin yap bilgisayar kiti, sentezleyici ve hepsi bir arada bilgisayar 6800'ü içeriyordu.
Bu seçenekler yetmezmiş gibi, MOS adında başka bir şirket piyasaya çıktı ve 6800'ün yeniden tasarlanmış bir versiyonunu sundu: 6502. Diğerleriyle uyumsuz olsa da, yeni çipin üretimi çok çok daha ucuzdu ve en ünlü bilgisayar üreticilerinin (Commodore, Apple, Atari, Acorn ve diğerleri) makinelerine güç sağlamak için 6502'yi seçmeleri sadece bir zaman meselesiydi.
Japonya'da Nintendo'nun ucuz ama geliştirmeye uygun bir şeye ihtiyacı vardı, bu yüzden 6502'yi seçtiler. CPU tedarikçisi Ricoh, 6502 uyumlu bir CPU'yu başarıyla üretti.
Ricoh'nun lisanslama muamması
Ricoh'un 6502'yi nasıl klonlamayı başardığı bugün bile net değil. MOS'un çip tasarımını Ricoh'a lisanslamış olması beklenebilir, ancak bununla ilgili birçok çelişki var:
- Hem Ricoh'un hem de MOS'un varyantları aynı düzene sahiptir, ancak Ricoh'unki kesintili veri yolları içerir (belirli işlevleri devre dışı bırakır) . Daha sonra daha fazla ayrıntıya gireceğim.
- MOS'un 6502'yi Ricoh'a lisansladığını açıkça belirten bir belge henüz bulunamamıştır.
- Nikkei Trendy tarafından 2008 yılında yayınlanan bir makalede Ricoh'un yetkili bir çip üreticisi olan Rockwell'den lisans aldığı belirtilmektedir . Ancak, MOS'un onayı bir yana, ikinci bir kaynağın üçüncü bir tarafa IP sağlayıp sağlayamayacağı tartışmalıdır.
- Nintendo'nun fikri mülkiyet haklarını aşması ilk kez değil, çünkü Japonya'da Ikegami Tsushinki v. Nintendo davasında, Nintendo'nun orijinal Donkey Kong koduna sahip olmadığına karar verildi .
Hurdaya çıkarılan fonksiyonlar
Ricoh 2A03, orijinal olarak 6502'de bulunan Binary-Coded Decimal (BCD) modunu içermemektedir . BCD, bir sayının her ondalık basamağını ayrı bir 4 bitlik ikili olarak kodlar. 6502, 8 bit 'words' kullanır - yani her word iki ondalık basamak depolar.
Meraklısı için bir örnek olarak, ondalık sayı 42 olarak gösterilir:
0010 1010binary'de.0100 0010BCD'de.
Bu konuda konuşmaya devam edebiliriz, ancak ana hatlarını vermek gerekirse: BCD, her ondalık basamağın ayrı ayrı ele alınmasını gerektiren uygulamalar için kullanışlıdır (örneğin, dijital bir saat). Bununla birlikte, her 8 bitlik kelime yalnızca 99 ondalık sayısına kadar kodlayabildiğinden daha fazla depolama gerektirir - oysa geleneksel ikili 255'e kadar kodlayabilir.
6502, 8 bit 'word' kullanır - yani her kelime iki ondalık basamak depolar. Bu muhtemelen MOS'a telif ücreti ödememek için yapıldı, çünkü BCD'nin patenti onlar tarafından alınmıştı (ve Amerika Birleşik Devletleri'nde entegre devre düzenlerinin telif hakkını sağlayan mevzuat 1984 yılına kadar yürürlüğe girmemişti ).
Bellek
Hem Ricoh 2A03 hem de MOS 6502, 8-bit veri yolu ve 16-bit adres yoluna sahiptir, bu da 64 KB'a kadar belleğe erişmelerini sağlar. Peki, Nintendo bu bellek alanını nasıl doldurdu?
Anakartın bir tarafında 2 KB Statik RAM (SRAM) sağlayan bir yonga bulunmaktadır. Nintendo bu alanı 'Work RAM'i' (WRAM) olarak adlandırır ve depolamak için kullanılabilir:
- Oyun durumunu işlemek ve/veya bilgi aramak için değişkenler.
- CPU alt rutinleri yürütürken kayıt değerlerini geçici olarak kaydeden 'yığın'.
- CPU'nun iki konum arasında büyük verileri kopyalayabilmesi için bir 'tampon alan'.
Diğer taraftan, sistemin bileşenleri memory-mapped , yani bellek adresleri kullanılarak erişilirler, dolayısıyla CPU'nun adres alanının bir kısmını işgal ederler. Bu nedenle CPU'nun bellek alanı oyun kartuşu, WRAM, PPU, APU ve iki denetleyiciye işaret eden adreslerle doldurulur (bu makale boyunca açıklandıkları için her bir bileşen hakkında endişelenmeyin).
Kartuş/oyun verileri
Bilmiyorsanız söyleyeyim, NES oyunları kartuşlar halinde dağıtılır ve kartuşların veri yolları doğrudan CPU'ya bağlanır.
Nintendo kartuş hatlarını sadece 49120 Bayt (~ 49.97 KB) kartuş verisine erişilebilecek şekilde bağladı . Şimdi, 'kartuş verileri' ile ne demek istiyorum? Örneğin, bu veri yollarına bağlı herhangi bir çip:
- Oyunun programının bulunduğu bir Program ROM'u. Bu, daha sonra 'Grafikler' bölümünde göreceğiniz gibi grafik verilerini hariç tutar. Doğal olarak ve diğer çiplerden farklı olarak, bu çip zorunludur.
- WRAM'i genişletmek için RAM çipleri.
- Kayıtları saklamak için bir pilden güç alan RAM çipi.
Farklı kombinasyonların olması, CPU'nun ne tür bir bileşenden okuma yapıldığını önemsememesi, sadece bellek konumlarını görmesi gerçeğinden kaynaklanmaktadır. Dolayısıyla, oyunlarını sığdırmak için uygun bir düzen seçmek (veya bulmak) oyun stüdyolarına kalmıştır.

Önemli parçaları etiketlenmiş aynı PCB. 'Kilitleme' çipinin anlamı 'Korsanla Mücadele' bölümünde açıklanmıştır.
Örneğin, Nintendo'nun 'Super Mario Bros' oyunu NES-NROM-256 adını verdikleri bir düzen kullanmıştır ve 32 KB program ROM'u ve grafikler için 8 KB 'Karakter ROM'undan oluşmaktadır ('Grafikler' bölümünde daha fazlasını göreceğiz) . NES-NROM-256 ayrıca 3 KB'a kadar ekstra WRAM barındıracak şekilde hazırlanmıştır, ancak oyun bunu kullanmamaktadır.
Mevcut yeteneklerin ötesine geçmek
16-bit adres veri yollarının en büyük sınırlamalarından biri (3. ve 4. nesil konsolları etkileyen) kompakt adres alanlarıdır. Günümüzde 32-bit bilgisayarlar 4 GB'a kadar bellek adresleyebilmektedir (ve 64-bit makineler 16 exabyte'a kadar cömertçe kullanmaktadır), bu nedenle bu artık bir sorun değildir, ancak o zamanlar NES'in yalnızca 64 KB adres alanı vardı ve bunun büyük bir kısmı bellek eşlemeli donanım tarafından tüketiliyordu (rakiplerin kaçındığı bir şey).
Peki bu, oyun stüdyolarının yalnızca 49,97 KB sınırını aşmayan oyunlar geliştirebileceği anlamına mı geliyordu? Kesinlikle değil! Tarih bize bir şey öğrettiyse, o da zorlu bir soruna her zaman akıllıca bir çözüm bulunabileceğidir; ve bu sorun bir Mapper ile ele alındı.

Bir eşleyicinin CPU'nun adresleme yeteneklerini nasıl genişlettiğinin basitleştirilmiş gösterimi. CPU, bir mapper'ın dahil edilmesiyle, büyük bir Program ROM'unun ekstra bankalarına (adres grupları) erişebilir. Her ne kadar oyun/program gerektiğinde bankalar arasında manuel geçiş yapma gibi yeni bir göreve sahip olsa da.

Aynı kurulum ancak eşleyici yüklü değil. Daha basit ve ucuz olsa da, CPU yalnızca sınırlı sayıda bankaya erişebilir.
Eşleyici, kartuşta bulunan ve bellek yongaları ile konsolun adres hatları arasında yer alan ekstra bir yongadır. Ana görevi, geliştiricilerin daha fazla yonga sığdırabilmesi için adres alanını genişletmektir. Bu bank switching ile yapılır: Bellek adresleri bankalar halinde gruplandırılır ve eşleyici bankalar arasında geçiş yapmak için anahtarlar (bellek adresleri aracılığıyla kontrol edilir) sağlar. Şimdi, CPU hala aynı miktarda bellek görüyor, bu yüzden onu çalıştırmaktan sorumlu bir eşleyici ile programlanmış olan oyun. Maliyet etkinliği nedeniyle, 80'lerden 90'ların başlarına kadar teknolojide haritacılar ön plandaydı.

Super Mario Bros 2'ün PCB'si . Super Mario Bros 3'de bu tasarıma sahip ama 256 KB Program ROM ile birlikte gelir.

Önemli kısımları etiketlenmiş aynı resim. İlk başta, ekstra WRAM'in kayıtları saklamak için olduğunu düşündüm, ancak daha sonra bu oyunda kayıt olmadığını fark ettim (ve bir pil de yok). Gerçekte, bu RAM yongası sıkıştırılmış bir seviyeyi depolamak için kullanılır.
NES'e geri dönersek, 'Super Mario Bros 2' ve 'Super Mario Bros 3' gibi oyunlar kartuşlarında 'MMC3' eşleyici (Nintendo tarafından yapılmıştır) ile birlikte gönderilmiştir. Karşılaştırma için MMC3, Program ROM'u için 512 KB'a kadar, Karakter belleği için 256 KB'a kadar ve ekstra WRAM için 8 KB'a kadar alan sağlamıştır . Şimdi 'Super Mario Bros 3'ün ilk taksitle karşılaştırıldığında neden kalite açısından önemli ölçüde farklı olduğunu görebilirsiniz.
Sonuç olarak, bu konsol dahili özelliklerini incelerken sınırlı görünse de, Nintendo teknoloji geliştikçe uyum sağlayabileceğinden emin oldu. Diğer taraftan, bu teknik konsolun maliyetlerini düşük tutmaya yardımcı olurken, yükün bir kısmını oyun kartuşuna kaydırdı. Dolayısıyla, oyun kalitesi ve kartuş maliyetleri, oyun stüdyolarının dengelemek zorunda olduğu iki endişeydi.
