【偽IPL2(圧縮+暗号化適用)】 フラッシュヘッダアドレス : 0x00000000 ARM9フラッシュアドレス : 0x00000180 ARM7フラッシュアドレス : 0x000001A0 ARM9実行アドレス : 0x021F0000 ARM7実行アドレス : 0x0380F800 ARM9コードサイズ : 0x00000014 ARM7コードサイズ : 0x00000110 処理: PMICのサウンド/バックライト電源ON → A/B/START/SELECT 同時押しでカートリッジ起動シーケンス1へ → 0x080000AC = "BOOT" 文字列一致でカートリッジ起動シーケンス1へ → 改変された正規版IPL2の先頭パッチを起動(アドレス情報は下記参照) ○カートリッジ起動シーケンス1 ARM7 がカートリッジ 0x080000C0 番地へジャンプ → ARM9 は無限ループへ入っており、ARM7 によってジャンプアドレスが 書き換えられるのを待つ 【改変された正規版IPL2(圧縮のみ適用)】 ARM7フラッシュアドレス : 0x00029FA8 ARM9フラッシュアドレス : 0x000323B0 フラッシュヘッダアドレス : 0x0003FC80 ARM9実行アドレス : 0x0231FE00(正規版は0x02320000) ARM7実行アドレス : 0x037FA600(正規版は0x037FA800) ARM9コードサイズ : 0x00010F24 ARM7コードサイズ : 0x0000B1EC 先頭パッチ処理: POWCNTレジスタでサウンド回路をON → サウンドバイアスをセット → POWCNTレジスタで各グラフィックス回路を全てONにし、画面出力を上下反転 → SELECT 押しで改変IPL2起動シーケンスへ → A/B/X/Y 同時押しでカートリッジ起動シーケンス2へ → 0x080000A0 = "DSBooter" or 0x080000AC = "PASS" 文字列一致でカートリッジ起動シーケンス2へ → 上記以外は改変IPL2起動シーケンスへ ○改変IPL2起動シーケンス → PMICのバックライト電源OFF ←→ PMICのバックライト電源ON(数回繰り返す) → リンクレジスタへカードプログラムのエントリアドレス (0x027ffe24/0x027ffe34 番地のデータ)を格納 → 改変IPL2起動(正規版の実行アドレスへジャンプ) ○カートリッジ起動シーケンス2 フラッシュメモリ 0x0003FE00 番地から0x180バイト(オーナー情報x2+pad)を メインメモリ 0x023FFC80 番地へロード → セーブカウントが新しい方のオーナー情報0x80バイトを 0x023FFC80 番地へコピー → ARM7 PAUSEレジスタの起動チェックフラグをセット → カートリッジ起動シーケンス1へ