3DS研究所

homebrew・CFW全般

フラッシュ表示の仕組み

フラッシュ表示は、CFWを導入している方なら馴染みがあるのではないでしょうか?BannerBomb3を実行したときに一瞬紫色になる下画面、3gx形式のプラグインを起動したときに一瞬水色になる上画面、これらはすべてフラッシュ表示によるものです。目に見えるところだけではありません。画面の初期化の際にも、内部処理では黒色のフラッシュ表示が行われています。これらのフラッシュ表示はどのような仕組みで行われているのでしょうか?

LCDレジスタ

フラッシュ表示はLCDレジスタという場所で処理されます。構成は以下の通りです。

項目

アドレス サイズ 項目
0x10202204 0x4 上画面フラッシュ
0x10202A04 0x4 下画面フラッシュ

オプション

ビット 説明
0~7 赤強度
8~15 緑強度
16~23 青強度
24 フラグ(0=無効、1=有効)

実装

以下のコードでフラッシュ表示を実装できます。

//上画面フラッシュ(白色)
*(u32 *)0x90202204 = 0x1FFFFFF;

//下画面フラッシュ(白色)
*(u32 *)0x90202A04 = 0x1FFFFFF;

物理アドレスのベースは0x80000000なので、前述した値に0x80000000を加算した値を書き込むアドレスとして指定します。
また、代入値は0x1(カラーコード)となるようにします。カラーコードはBGRの順で指定してください。これで指定色をフラッシュ表示できます。
※CTRPFの関数やGatewayコードでは仮想アドレスを参照するため、直接書き込みはできないので注意してください。

最後に

いかがでしたか?LCDレジスタでは他にもバックライトの輝度設定などが行えるので、よければ試してみてください。

参考文献:https://www.3dbrew.org/wiki/LCD_Registers