フラッシュ表示の仕組み
フラッシュ表示は、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コードでは仮想アドレスを参照するため、直接書き込みはできないので注意してください。