2007年12月1日

devkitARMのcrt解析

GBAでプログラミングを行うにあたり、crtファイルでどのような処理を行えば良いか調べる。
そのために、devkitProで公開されているdevkitARM(GBA等のARMプロセッサ用の開発ツールキット)のcrtがどのような処理を行っているか、ソースコードを追いかけてみる。
  1. GBAヘッダを定義 → GBAでは、ROMの先頭に所定のヘッダデータが必要
  2. IMEレジスタに、"割り込み可”を設定
  3. CPUモードの"IRQモード”および”SYSモード”のスタックポインタを設定
  4. .text領域の開始アドレスをチェック(CARTかMBかをチェックするため)
  5. CARTの場合は、EWRAMをゼロクリア
  6. .bbs領域をゼロクリア
  7. .data領域を、ROMからRAM(IWRAM)にコピー
  8. libcの初期化コードを実行
  9. ユーザプログラム(main関数)へジャンプ

3.で設定されるスタックポインタの値は、
  • IRQモード → 0x03007FA0
  • SYSモード → 0x03007F00
となっている。スタックサイズとしてこれで十分なのだろうか‥‥?


参考ページ
  • devkitPro ‥ GBAやDS等用の開発キットを提供しているプロジェクト
  • ARMメモ ‥ ARMプロセッサのデータシート和訳

0 件のコメント: