(ちなみに、mbは"Multi Boot"の頭文字)
2つの方法で、起動時のアドレスが異なる。(cart : 0x08000000, mb : 0x02000000)
これを利用してプログラムで起動モードに合わせて動的に処理を変更するプログラムが書ける。
.arm @ARMモードの場合。THUMBモードの場合はこれではダメ
movs r0, pc, lsl #5
bcs cart_proc
b mb_proc
cart_proc:
@ cart起動時の処理
mb_proc:
@ mb起動時の処理
ロジックは、プログラムの通りだが、
- プログラムカウンタ(PC)を5ビット左シフトして、
- キャリーが発生した場合は、cart起動
- キャリーが発生しなかった場合は、mb起動
devkitARMでも同様な処理をしているが、こちらはTHUMBモードで動作させているので、
アセンブラの書き方は異なっている。
THUMBモードはまだ良く分かっていないので、今回はARMモードでプログラム作成。
0 件のコメント:
コメントを投稿