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