ゲームボーイで最初の MBC チップです。
後続の MBC も MBC1 と同じように動くため、他のチップにアップグレードするのが簡単になっています。
カートリッジ内で MBC が使われている場合、
メモリマップの 0000-7FFF の領域は次の目的で使用されるようになります。
- ROM の読み込み
- MBC 制御レジスタへの書き込み
0000-3FFF - ROM バンク 00 (読み込み専用)
この領域には、カートリッジ ROM の最初の 16 KB が常に接続されます。
4000-7FFF - ROM バンク 01-7F (読み込み専用)
この領域には、カートリッジ ROM の 16 KB 以降の領域が接続されます。
最大 125 個のバンクが切り替え可能で、約 2 MB まで容量を増やすことができます。
後述するように、ROM バンクの 20h、 40h、 60h は使用できないため、 125 個のバンクになります。
A000-BFFF - RAM バンク 00-03 (読み書き可能)
この領域には、カートリッジ内の外部 RAM が接続されます。
ゲームボーイの電源を切って、カートリッジを本体から外した時にも内容が保存されるように、
電池を使って外部 RAM の内容を保存することがあります。
有効な RAM サイズ
- 2KB (アドレス空間: A000-A7FF)
- 8KB (アドレス空間: A000-BFFF)
- 32KB (8KB のバンク 4 つを、 A000-BFFF の範囲で切り替える)
0000-1FFF - RAM 有効 (書き込み専用)
外部 RAM への読み書きをする前に、このアドレス空間に対して書き込みを行い、外部 RAM を有効にする必要があります。
また、ゲームボーイのスイッチ OFF 時に内容が壊れないようにするために、外部 RAM へのアクセスが終わった後、
外部 RAM へのアクセスを無効にするようにします。
有効・無効の切り替え時に、次の値が使用されます。
- 00h: 外部 RAM を無効にする (デフォルト値)
- 0Ah: 外部 RAM を有効にする
実際には、下位 4 bit に 0Ah がセットされている時に外部 RAM が有効になり、他の値が入っている場合は、外部 RAM が無効になります。
2000-3FFF - ROM バンク番号 (書き込み専用)
このアドレス空間へ書き込みすることで、 ROM バンクの下位 5 bit の値を設定することができます (01 - 1Fh)。
00h が書き込まれた時、 MBC は 01h が書き込まれた時と同じように動作します。
ROM バンク 00h へのアクセスは、常にアドレス空間 0000-3FFF から行うことができるため、この動作による問題は生じません。
しかし、 4000-5FFF の領域で ROM バンクの上位 2 ビットを設定する時に、
20h、 40h、 60h の値を指定するケースでも上記と同様のことが起きます。
つまり、それぞれ 21h、 41h、 61h を指定したことになります。
4000-5FFF - RAM バンク番号または、 ROM バンク番号の上位ビット (書き込み専用)
この領域では、 2 bit の値を設定します。
また、次のいずれかの動作を行います。
- RAM バンクを切り替える (00-03h)
- ROM バンクの上位 2 ビット (5-6 ビット) を指定する
次に説明する、 6000-7FFF の領域のモードによって、上記の動作をどちらかに切り替えます。
6000-7FFF - ROM/RAM モード選択 (書き込み専用)
この領域では、 1 bit の値を設定します。
その値を使って、 4000-5FFF の領域で設定する、 RAM バンク、 ROM バンクのモードを切り替えます。
- 00h = ROM バンクモード (最大 8 KB RAM, 2 MB ROM) (デフォルト値)
- 01h = RAM バンクモード (最大 32 KB RAM, 512 KB ROM)
プログラムによって、自由にモードを切り替えることができます。
また、モードにより次の制限があります。
- モード 0: RAM バンク 00h のみ使用することができる
- モード 1: ROM バンク 00-1Fh のみ使用することができる
最終更新:2017年08月31日 01:02