ゲームボーイカラー

ゲームボーイカラーのレジスタ (I/O レジスタ) について説明します。
ゲームボーイカラーは、次の場所で通常のゲームボーイと違いがあります。

  • カラーパレット
  • VRAM バンク
  • VRAM DMA 転送
  • LCDC レジスタのビット 0
  • シリアル通信

ゲームボーイカラーの機能のアンロック


ゲームボーイカラーのレジスタを使う場合、最初にカートリッジヘッダの 0143h を変更する必要があります。
白黒のゲームボーイでは、通常 80h が使われますが、ゲームボーイカラー専用ゲームの場合は C0h になります。
C0h 以外の値が入っていた場合は、白黒のゲームボーイと同様の動作になります。

ゲームボーイカラー (ゲームボーイアドバンス) の見分け方


起動直後に CPU の A レジスタの値を確認することで、ゲームボーイカラーを見分けることができます。
11h が入っていた場合は、本体がゲームボーイカラー (またはゲームボーイアドバンス) で、
ゲームボーイカラーの機能を使うことができます (上記のようにアンロックされている場合)。

A = 11h の時、 B レジスタのビット 0 を確認することで、
ゲームボーイカラーとゲームボーイアドバンスを見分けることができます。
ゲームボーイカラーでは、この値が 0 で、ゲームボーイアドバンスでは 1 です。
ゲームボーイカラーとゲームボーイアドバンスを見分けることで、
パレットデータの表示色を、機種ごとに入れ替える処理を入れることができます。

FF4D - KEY1 - ゲームボーイカラーモードのみ - 速度切り替え準備


 Bit 7: 現在の速度        (0 = 通常、 1 = 倍速) (読み込み専用)
 Bit 0: 速度切り替え準備  (0 = 切り替えない、 1 = 切り替え準備) (読み込み/書き込み可能)

ゲームボーイの速度を、通常・倍速で切り替える準備のために使用されます。
実際に速度を切り替える時は、 STOP 命令を実行します。
このレジスタのビット 0 が自動的に 0 になり、速度が切り替わります。

切り替える時の処理は、疑似コードで次のようになります。

 IF KEY1_BIT7 <> DESIRED_SPEED THEN
   IE=00H       ;(FFFF)=00h
   JOYP=30H     ;(FF00)=30h
   KEY1=01H     ;(FF4D)=01h
   STOP         ;STOP
 ENDIF

電源 ON 時、ゲームボーイカラーは通常速度で動いています。
倍速モードは電力消費量が上がるため、可能な限り通常速度で動かす方が良いです。
また、速度の切り替え時、画面が少しの間ちらつきます。

倍速モードでは、次の要素が倍速で動くようになります。

  • CPU (2.10 MHz, 1 サイクル = 約 0.5 マイクロ秒)
  • タイマー
  • シリアルポート
  • DMA

次の要素は速度が変わりません。

  • LCD コントローラ
  • HDMA
  • サウンドのタイミングと周波数

FF56 - RP - ゲームボーイカラーモードのみ - 赤外線通信ポート


ゲームボーイカラーに内蔵された、赤外線ポートからデータをやり取りします。
データの読み込み時は、ビット 6 と 7 を 1 にし、ビット 0 を 0 にする必要があります。
データの通信後は、バッテリーの電力消費を抑えるため、このレジスタの値を 00h にしておきます。

 Bit 0:   データの書き込み      (0 = LED オフ、 1 = LED オン)         (読み込み/書き込み可能)
 Bit 1:   データの読み込み      (0 = IR 信号の受け取り, 1 = ノーマル) (読み込み専用)
 Bit 6-7: データの読み込み有効  (0 = 無効、 3 = 有効)                 (読み込み/書き込み可能)

赤外線のレシーバーが、環境に合わせてノーマルレベルの調整をするため、
LED ON の信号を長時間送信していると、その信号をノーマルレベルとしてしまいます。
例えば、 Philips のテレビのリモコンは 32 回の LED ON/OFF パルス (ON: 10 マイクロ秒、 OFF: 17.5 マイクロ秒) を送信します。

ゲームボーイアドバンスでは、赤外線ポートはありません。

FF70 - SVBK - ゲームボーイカラーモードのみ - WRAM バンク


ゲームボーイカラーモードでは、 32 KB の内部 RAM が使用可能になります。
4 KB の、 8 つのバンクに分割されます。
バンク 0 は C000 - CFFF から、常に使用可能です。
バンク 1 から 7 は、アドレス空間 D000 - DFFF の部分で切り替えます。

 Bit 0-2  WRAM バンクの選択 (読み込み/書き込み可能)

01h から 07h の値が書き込みできます (バンク 1 - 7 の選択)。
00h を書き込んだ場合は、バンク 1 が使われます。

ドキュメントに書かれていないレジスタ


FF6C - Undocumented (FEh) - Bit 0 (読み込み/書き込み可能) - ゲームボーイカラーモード専用

FF72 - Undocumented (00h) - Bit 0-7 (読み込み/書き込み可能)

FF73 - Undocumented (00h) - Bit 0-7 (読み込み/書き込み可能)

FF74 - Undocumented (00h) - Bit 0-7 (読み込み/書き込み可能) - ゲームボーイカラーモード専用

FF75 - Undocumented (8Fh) - Bit 4-6 (読み込み/書き込み可能)

FF76 - Undocumented (00h) - 常に 00h (読み込み専用)

FF77 - Undocumented (00h) - 常に 00h (読み込み専用)


これらは、ドキュメントに書かれていないゲームボーイカラーのレジスタで、用途は不明です。
括弧の中の数値は、初期値です。

FF6C と FF74 は、ゲームボーイカラーモードでない場合、常に FFh になります。
最終更新:2017年08月30日 20:02