カートリッジ > メモリバンクコントローラ > MBC3

MBC3 は、 2MB ROM (128 バンク)、 32KB RAM (4 バンク) の他に、リアルタイムクロック (RTC) が内蔵されています。
RTC 使用時は、 32.768 kHz の水晶振動子と外部バッテリが必要になります (ゲームボーイ本体が電源オフの時にも時計の処理をする場合)。

0000-3FFF - ROM バンク 00 (読み込み専用)


この領域には、カートリッジ ROM の最初の 16 KB が常に接続されます。

4000-7FFF - ROM バンク 01-7F (読み込み専用)


この領域には、カートリッジ ROM の 16 KB 以降の領域が接続されます。
最大 127 個のバンクが切り替え可能で、約 2 MB まで容量を増やすことができます。
MBC1 と似ていますが、 MBC3 ではバンク 20h、40h、60h も使用可能です。

A000-BFFF - RAM バンク 00-03 (読み込み/書き込み可能)

A000-BFFF - RTC レジスタ 08-0C (読み込み/書き込み可能)


RAM バンク、 RTC のどちらを選択したかによって、この領域の内容が変わります (下記参照)。
RAM バンクか RTC レジスタ (1 つ) のどちらかが出現します。

0000-1FFF - RAM とタイマーの有効 (書き込み専用)


MBC1 と似ていて、 0Ah を書き込んだ時に外部 RAM と RTC レジスタが有効になります。
00h を書き込むと、両方とも無効になります。

2000-3FFF - ROM バンク番号 (書き込み専用)


MBC1 と同じで、 7 ビットの値を書き込むことで ROM バンクを選択します。
00h を書き込んだ時は、 ROM バンク 01h が選択されます。
01 から 7Fh を書き込んだ時は、それぞれ別の ROM バンクが選択されます。

4000-5FFF - RAM バンク番号 もしくは RTC レジスタ選択 (書き込み専用)


MBC1 の RAM バンクと似ていて、 00h から 03h の値を書き込むと、外部 RAM バンクが A000 - BFFF にマッピングされます (使用可能な場合)。
08h から 0Ch の値を書き込んだ時は、 RTC レジスタが A000 - BFFF にマッピングされます。
RTC レジスタは、この範囲の任意のアドレスから読み書きすることができます。
通常、 A000 からアクセスされます。

6000-7FFF - クロックデータのラッチ (書き込み専用)


このレジスタに 00h 、 01h と順番に書き込むことで、現在時刻が RTC レジスタにラッチされます。
ラッチされたデータは、もう一度ラッチするまで変更できなくなります。
もう一度ラッチする時も、 00h 、 01h と順番に書き込みます。

ラッチされた (凍結された) 時刻データも、 RTC レジスタから読み込みできます。
クロック自体は、バックグラウンドで動いています。

クロックカウンタレジスタ


 08h  RTC S   秒        0-59 (0 - 3Bh)
 09h  RTC M   分        0-59 (0 - 3Bh)
 0Ah  RTC H   時        0-23 (0 - 17h)
 0Bh  RTC DL  日付カウンタの下位 8 ビット (0 - FFh)
 0Ch  RTC DH  日付カウンタの上位 1 ビットと、キャリービット、 Halt フラグ
       Bit 0  日付カウンタの最上位ビット (Bit 8)
       Bit 6  Halt (0 = アクティブ、 1 = [[タイマー]]停止)
       Bit 7  日付カウンタのキャリービット (1 = カウンタオーバーフロー)

Halt フラグは、 RTC レジスタへの書き込み前にセットしておきます。

日付カウンタ


合計 9 ビットの日付カウンタは、 0 から 511 (0 から 1FFh) の日付をカウントします。
この値がオーバーフローした時、日付カウンタのキャリービットがセットされます。
キャリービットは、プログラムでリセットするまでセットされています。

日付カウンタの値は、バッテリーバックアップされた RAM の中に保存しておくこともできます。
例えば、日付カウンタが 0 でない値を返した時、その値を RAM に足しこんでおきます。
その後、日付カウンタを 0 にリセットするようにすると、いくらでも日付をカウントすることができます。
カートリッジが 511 日に 1 回以上起動されていれば、西暦 10000 年対応にすることもできます。

遅延


RTC レジスタにアクセスする時は、アクセスするごとに 4 マイクロ秒 (通常速度モードで 4 サイクル) の遅延を入れることが推奨されています。
最終更新:2017年08月31日 02:06