ゲームボーイカラーのレジスタ (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