古めの iNES のドキュメントがかなりカオス

ファミコンエミュレータ用のイメージフォーマットの .nes は Marat Fayzullin による iNES 向けに策定された(Nintendo unoffical)。仕様が公開されたとか、エミュレータのできがよかったのかは不明だが、他のエミュレータにも採用され、.nes ファイルは普及している。

iNES 0.5 Linux (1996年6月)

iNES.doc より抜粋:

                         * CARTRIDGE FILE FORMAT *

  The iNES distribution includes a single cartridge image with a program
allowing to test the emulator. There is also a source code of this program
included. Following is the format of ROM-image files used by iNES (.NES
extension): 

byte    contents
                                                                                                                                                • -
0-3 String "NES^Z" 4 Number of 16kB ROM banks 5 Number of 8kB VROM banks 6 bit 0 1 for vertical mirroring, 0 for horizontal mirroring bit 1 1 for battery-backed RAM at $6000-$7FFF bit 2 1 for a 512-byte trainer at $7000-$71FF bit 3 Reserved bit 4-7 Type of ROM bank selector 0 - None 1 - Megaman2,Bomberman2,Destiny,etc. 2 - Castlevania,LifeForce,etc. 3 - QBert,PipeDream,Cybernoid,etc. 4 - SilverSurfer,SuperContra (experimental) 8 - F3xxx carts off FFE CDROM (experimental) 15 - 100-in-1 cartridge (experimental) 7-15 Reserved 16-... ROM banks, in ascending order. If a trainer is present, its 512 bytes precede the ROM bank contents. ...-EOF VROM banks, in ascending order.
                                                                                                                                                • -
Note that this format will most likely expand in the next version of iNES, therefore do not take it for something permanent. The general structure will stay the same though.

mapper と呼ばれているものが 4bit で定義されていて、16通りしか持てない仕様になっている。Note には不十分なので変更しますと書いてある。手元のカートリッジを順番に対応していきました感が伝わってくる*1

NES.doc には PPU 周辺の解析仕様が書かれており、おまけとしてカートリッジの仕様も書いてある。サウンドについては書かれてない。


memory mapper についてもいくらか抜粋してみる。

1.  Mapper #1, Sequential

  This is a sequential mapper used in many 256kB cartridges, such as
Bomberman 2, Destiny Of The Emperor, Megaman 2, Airwolf, Operation Wolf,
Castlevania 2, Silk Worm, Yoshi, Break Thru. It may be used to switch ROM
and VROM. If there is no VROM, 8kB of VRAM is present at $0000. 

MMC1 を利用したゲームの名前が列挙され、レジスタの仕様が書かれている。まだ IC の名前を仕様の分別に使ってなかったものと見られる。

2. Mapper #2, Konami
  This is a quite simple mapper used in most Konami (Life Force,
Castlevania, Metal Gear) and some other cartridges. It only switches the
ROM. All cartridges with this mapper have 8kB VRAM at $0000 (i.e. no
VROM). 

この番号が何故 Konami かというと、列挙されている NES ソフトの基板は何故か Konami が設計していたのでそういう名称にしたようだ。Konami が作った方には UNROM とか書いてないし、標準ロジックICの 7432 と 74161 を組み合わせる手法は他にも大量にあったからとか、混乱があったものと思われる。

参考, 分解したスキャン画像:
http://bootgod.dyndns.org:7777/profile.php?id=79

3. Mapper #3, VROM Switch

  Mapper #3, also known as a VROM switch, is used in the Goonies series
and many Japanese-only games. It only allows you to switch 8kB pages of
VROM. 

このハードウェア自体は NES でもファミコンでもかなりの数が採用されているのに Japanese-only games と書かれているし、グーニーズシリーズに使われているとも書かれている。

グーニーズ初代は mapper #3 ではないので、当初からマッパーハックが行われていて、ちゃんと解析する余裕がまだなかったものと思われる。おそらくNESでは販売されなかったので作者の手元になかったのが原因だと推測される。

なお米国でも販売された続編のグーニーズIIも mapper #3 ではない。この紹介の説明は間違いだらけである。

4. Mapper #4, 5202 Chip (???)

  This mapper (or should I say 'an expansion chip'?) is used in many
recent cartridges, such as Batman Returns, Super Contra, Vindicators,
Silver Surfer, etc. 

MMC3 が使われたゲームタイトルが列挙されているが、この 5202 というものがどこで名前を付けられたか不明。こんな状態では ROM の扱いだけは何故か非常に似ている namco の IC がごちゃ混ぜになっても仕方がないものである。

考察

この段階ではシステムの基本部分の CPU, グラフィックの再現で精一杯みたいで、カートリッジの内部まではなかなか手が回らなかったようである。とはいえ mapper 0 から 4 まで実装してあればかなりの数の NES ソフトは動いた(ファミコンはソフトはまた別)ので当時のレベルではこれでよかったものと思われる。

*1:この FFE CDROM って未だに実物の写真を見たことがない