
マルチメモリコントローラまたはメモリ管理コントローラ[ 1 ] ( MMC ) は、任天堂エンターテイメントシステム(NES)カートリッジで使用するために様々なビデオゲーム開発者によって設計されたさまざまな種類の特殊チップです。これらのチップは元のコンソールの機能を拡張し、元のコンソールだけでは提供できない機能を備えた NES ゲームの作成を可能にします。基本的な NES ハードウェアは合計 40KB の ROM、最大 32KB の PRG、8KB の CHR のみをサポートしているため、タイルとスプライトテーブルは 1 つしか使用できません。この制限はファミコンが市場に登場してから最初の 2 年ですぐに達し、ゲーム開発者はコンソールの機能を拡張する方法を求め始めました。
エミュレーションやHomebrewコミュニティでは、これらのチップはマッパーとも呼ばれています。[ 2 ]
CNROM はファミコンで最初に導入されたバンキング ハードウェアです。これを最初に使用したゲームは1985 年後半にリリースされたNinja Jajamaru-kunでした。これは 7400 シリーズのディスクリート ロジック チップ 1 つで構成されています。 CNROM は、1 つの固定 PRG バンクと最大 8 つの CHR バンクをサポートし、ROM は合計 96 KB です。一部のサード パーティのバリエーションでは追加機能がサポートされていました。ほとんどの CNROM ゲームは 32k CHR ROM ですが、16k CHR ROM のゲームもあります。3 つのゲーム (Ninja Jajamaru-kun、Joust、および City Connection (J)) には、16k PRG ROM と 16k CHR ROM があります。いくつかのファミコン CNROM ゲームには、ゲームが ROM ではなく RAM で実行されていることを検出した場合に、CHR データへのアクセスを防ぐように設計されたダイオード セットアップで構成される弱いコピー プロテクションが組み込まれていました。ほとんどの CNROM ゲームは、ゲームのレベル データを CHR ROM の未使用部分に配置し、それを読み取るために PPU を空白にします。これにより、追加のゲーム ロジックやその他のデータ用に PRG ROM スペースが解放されます。
初期の NES マッパーは、7400 シリーズの個別のロジック チップで構成されていました。[ 1 ] : 29 UNROM は 1986 年後半に登場しました。これは 16KB の固定 PRG バンクを 1 つサポートし、PRG の残りの部分は切り替え可能です。[ 3 ]グラフィック データを保持するための専用 ROM チップ (任天堂では CHR と呼びます) の代わりに、UNROM を使用するゲームはグラフィック データをプログラム ROM に格納し、実行時にカートリッジの RAM にコピーします。これにより、アニメーション化されたタイルやグラフィック変換などの効果が可能になり、後者はバンク間でタイルを複製する必要があることが多い CHR ROM ゲームよりも必要なタイルの総数が少なくなります。ただし、PRG ROM の一部はグラフィックを保持するために使用する必要があり、コードやその他のデータ用の余地が少なくなります。UNROM ゲームの大多数は 128k の PRG ROM を持ちますが、Paperboy 2などいくつかは256k を使用します。Crazy Climberというゲームでは、PCMチャンネルのサンプルをサポートするために、通常の$C000-$FFFFではなく$8000-$BFFFに固定されたPRGバンクを持っています。[ 1 ]:29

MMC1は、PRG RAM、バッテリバックアップセーブ、および多方向スクロール設定のサポートを組み込んだ任天堂初のカスタムMMC集積回路です。これは最も広く使用されているファーストパーティマッパーであり、MMC1カートリッジボードのバリエーションは他のタイプよりも多くあります。最大メモリ容量は、PRG ROMが512k、CHR ROMが128kです。オプションでCHR RAMを使用することもできます。その場合、グラフィックはPRG ROMに保存され、必要に応じてCHR RAMにコピーされます。[ 1 ]:p.30 チップには少なくとも5つの異なるバージョンがあります:MMC1A、MMC1B1、MMC1B2、MMC1B3 、およびMMC1C。異なるバージョン間の違いはわずかで、主にセーブゲームメモリの保護動作によるものです。MMC1チップでは、異なるメモリバンクの切り替えが可能です。プログラムROMは16KBまたは32KBのチャンク単位で選択でき、キャラクターROMは4KBまたは8KBのチャンク単位で選択できます。このメモリコントローラの特徴は、入力がパラレルではなくシリアルであるため、回路にコマンドを送るには5回の連続書き込み(ビットシフトを含む)が必要であることです。MMC1にはPRG RAMへの書き込みアクセスを無効にする機能がないため、バッテリーセーブを使用するゲームでは、セーブデータの破損を防ぐため、電源オフ時にリセットボタンを押し続けなければなりません。チップのレジスタはシリアルにアクセスされるため、複数回の書き込みが必要となり、結果としてMMC1のROMバンクの切り替えは遅くなります。[ 4 ]
MMC2は 『マイク・タイソンズ・パンチアウト!!』と、マイク・タイソンを置き換えた後期の再リリース版でのみ使用されている。プログラムROMは8KBバンクを1つ選択可能(残りの24KBはロックされている)で、キャラクターROMは4KBバンク2組から選択可能で、ビデオハードウェアがメモリから特定のグラフィックタイルを読み込もうとすると自動的に切り替えられるため、ゲーム側で手動で切り替える必要がなく、画面上でより多くのグラフィックを使用できる。[ 5 ]

MMC3 は 1988 年に発表され、8 Eyes はそれが使用された最初のゲームです。スプライト 0 を犠牲にせずに分割画面スクロールを可能にする IRQ タイマーが追加され、選択可能な 2 つの 8KB プログラム ROM バンクと、スプライトとタイルのデータの簡単な即時スワップを可能にする 2 つの 2KB + 4 つの 1KB 選択可能なキャラクター ROM バンクが追加されました。8KB のセーブ ゲーム RAM がサポートされています。ROM の最大容量は 512k PRG と 256k CHR です。MMC1 からのシングル スクリーン ミラーリング モードは存在しません。MMC3 は PRG RAM への書き込みアクセスを無効にすることをサポートしているため、バッテリ バックアップ セーブを使用するゲームでのデータ損失を防ぐために電源オフ時にリセットを押し続ける必要はありません。MMC3 レジスタはアクセスに 2 回の書き込みのみを必要とするため、MMC1 よりも高速に ROM バンクを切り替えることができます。 NECのチップは1つのIRQしかサポートしていないが、シャープのチップは画面の8行ごとに1つのIRQをサポートしている。[ 6 ]
このチップは、インテリジェントシステムズ社によって開発された、日本でファミコン専用に発売された3つのゲームにのみ使用されています。機能的にはMMC2とほぼ同じですが、MMC4ではプログラムROMを8KBバンクではなく16KBバンクに切り替え、ゲームデータを保存するためのバッテリーバックアップSRAMをサポートしている点が異なります。[ 7 ]
MMC5は任天堂の最先端MMCである。当初は最も高価でもあった。このチップを定期的に使用していたのはコーエーだけだった。コナミのVRC6に似ているが、割り込み処理が異なっている。このチップには1KBの追加RAM、2つの追加矩形波サウンドチャンネル、1つの追加PCMサウンドチャンネル、垂直分割画面スクロールのサポート、グラフィック機能の向上(画面ごとに256ではなく16,384の異なるタイルが使用可能になり、2x2タイルグループごとに1つの色セットに制限されるのではなく、個々の8x8ピクセルの背景タイルに独自の色割り当てが可能)、高度に設定可能なプログラムROMとキャラクターROMバンク切り替え、およびスキャンラインベースのIRQカウンターがある。MMC5は合計2MBのROMをサポートするが、市販ゲームで1MBを超えるものはなかった。[ 8 ]
MMC6はMMC3に似ていますが、バッテリーバックアップで保存できる1KBのRAMが追加されています。[ 9 ]
ファミコンディスクシステムのASICは拡張オーディオチップであり、シングルサイクル(6ビット×64ステップ)のウェーブテーブルルックアップシンセシスを1チャンネルサポートし、内蔵の位相変調器(PM)により周波数変調シンセシスに類似したサウンド生成を実現します。ディスクシステムゲームのカートリッジコンバージョンの中には、オーディオチャンネルをMMCに置き換えるものもある。
A*ROM MMCは、これを使用するAMROM、ANROM、AOROMカートリッジボードにちなんで名付けられ、Rare社のクリス・スタンパー氏によって開発され、任天堂によって製造されました。Rare社が任天堂、Tradewest、GameTek、Acclaim、Milton Bradley向けに開発したゲームに搭載されています。[ 10 ] PRG ROMを32KBの単一チップで切り替えることができ、CHR RAMを使用して最大256KBのROMを使用することができます。他のチップとは異なり、シングルスクリーンミラーリングを採用しています。[ 11 ]
コナミ、サンソフト、ジャレコ、アイレム、バンダイ、ナムコなど、日本のメーカーは自社でファミコンのカートリッジ、PCB、マッパーを製造していました。任天堂はNESカートリッジの製造を厳しく管理しており、サードパーティはNES標準のグレーカートリッジシェルを使用し、10NESロックアウトチップを搭載した場合にのみ自社のハードウェアを使用できました。そのため、コスト上の理由からほとんどのメーカーは任天堂のハードウェアを購入することを選択しました。アクレイム、コナミ、テンゲンは自社でカートリッジのPCBを製造し、サードパーティ製のマッパーを使用していました。サンソフトも1つのゲーム(『バットマン:ジョーカーの帰還』)でサードパーティ製のマッパーを使用していました。
VRC2はコナミ製のチップで、プログラムROMを8KBバンク単位で、キャラクターROMを1KBバンク単位で切り替えることができます。このMMCには、VRC2aとVRC2bの2つのリビジョンが知られています。[ 13 ]
サラマンダーの日本語版専用。

VRC4 チップは、VRC4 が 512KB CHR 容量、2 つの 8KB PRG ROM バンキング モード、および 1 つの画面ミラーリングを可能にすること以外は、VRC2 チップに似ています。
コナミの教育ゲーム「スペーススクール」シリーズのQTaアダプタ専用。 [ 15 ]

VRC6(Virtual ROM Controller)はコナミの高度なMMCチップで、プログラムコードとグラフィックスの両方のバンク切り替えと、スキャンラインカウンターとしても機能するCPUサイクルベースのIRQカウンターをサポートしています。このチップは、3つの追加サウンドチャンネル( 100%デューティサイクルを使用してPCMサンプルを再生するように設定できる、それぞれ8デューティサイクルの2つの矩形波と1つのノコギリ波)もサポートしています。これは悪魔城伝説で使用され、欧米版では任天堂のMMC5が使用されています。任天堂エンターテイメントシステムは設計上、カートリッジで追加のサウンドチャンネルを追加できないため、ファミコン版のサウンドトラックはその仕様に従うように作り直されました。欧米版のサウンドトラックは、NESに内蔵されている5つの標準サウンドチャンネルを使用しています。[ 16 ]
VRC7はコナミの先進的なMMCチップで、VRC6と同等のバンク切り替えとIRQカウントをサポートしているほか、2オペレーションFMシンセシスを6チャンネル提供するYM2413派生チップを搭載している。この先進的なオーディオハードウェアはファミコンゲーム『ラグランジュポイント』でのみ使用されている。日本版の『タイニー・トゥーン・アドベンチャーズ2』でもVRC7が使用されているが、拡張オーディオ機能は利用されていない。[ 17 ] [ 18 ]拡張オーディオ部分の欠点は、低音域で目立つ量子化ノイズが発生することである。これはVRC7のFMチップがベースとしているYM2413から引き継がれたものである。
FCG-1または2は、MMC3と同等の機能を備えています。オプションで、バンダイのDatachシステム、または128バイトまたは256バイトの小型シリアルSRAMをサポートしています。これらのSRAMは、マッパーレジスタを介して間接的にアクセスされ、ファミコンのCPUからは直接アクセスできません。
109は、ファミコンカートリッジに搭載された数少ない任天堂製以外のマッパーの一つでした。MMC1に似ていますが、アドレス指定できるメモリ容量ははるかに小さく、8KBのPRGバンキングと1KBのCHRバンキングに対応していました。
163は日本限定のゲームでのみ使用されていました。その性能は任天堂のMMC3よりもわずかに優れていました。派生型には、4ビット波形サンプルを再生する追加のサウンドハードウェアが搭載されていました。1~8チャンネルの追加サウンドチャンネルをサポートしますが、時分割多重化の影響で、チャンネル数が多くなるとエイリアシングが発生します。
FME-7は、サンソフトがNESおよびファミコンカートリッジ向けに開発したメモリマッピング回路です。プログラムROMを8KBバンク単位で切り替え、キャラクターROMを1KBバンク単位で切り替えます。また、指定されたCPUクロックサイクル数ごとにIRQ信号を生成するハードウェアも搭載しており、最小限の処理能力で分割画面効果を実現します。

このバージョンの FME-7 には、人気のAY-3-8910チップの派生品として、広く使用されているYamaha YM2149 (SSG)のバリアントが含まれています。
個人 (自作) や無認可の開発者の中には、NES 用のカスタム MMC を作成している人もいますが、そのほとんどは単に利用可能なメモリを拡張するだけです。
228は、ゲーム「Action 52」および「Cheetahmen II」で使用するために開発された、シンプルなバンクスイッチングMMCです。ネームテーブル制御ビットは備えていません。「Action 52」マルチカートでは、ゲーム終了時の古いメニュー選択を格納する16ビットの小さなレジスタ領域も備えています。
GTROM(Cheapocadabra)は、2015年に自作ゲーム市場向けに開発された、自己書き換え可能なMMCです。このボードには、512KBのPRG ROM、16KBのCHR ROM、そして2つのLEDが搭載されています。GTROMにはPRG RAMは搭載されていませんが、PRG ROMはNESソフトウェアで書き換え可能なため、セーブデータの保存が可能です。
MXM-1は、2022年に自作ゲーム『Former Dawn』用に開発されたカスタムMMCです。多くの非ライセンスMMCとは異なり、純正NESの機能セットを大幅に拡張し、8x1属性を使用してより多くの色を使用できるだけでなく、FMV再生、拡張オーディオ(エコーバッファ付きの8チャンネルPCMオーディオ、ウェーブテーブルサポート、スムーズなsinc関数ベースの補間)、768MBのROM(間接的に2.8GB)と1MBのRAMへの直接アクセスも備えています。[ 19 ]