カードリッジ

前回のメモリエリアについてはカードリッジ以外のメモリ(IWRAM, EWRAM, PAK ROM)にコードや変数を置く方法を説明をしました。ところが電源を入れたとき、すべてのデータはROM領域(カードリッジ)にあります。その時点からいったいどうやってIWRAMやEWRAMに配置されていくのか、その流れを見ていきましょう。先に答えを言っておきますとROM領域にアクセスされた時「C:\devkitPro\devkitARM\arm-none-eabi\lib\gba_crt0.ld」(github)がまず一番最初に実行されます。よかったら平行して読んでみてください。

.gbaファイルの正体

実機のGBAにカードリッジを挿し電源をONにすると、そのカードリッジ内容はメモリの0x08000000からアクセスできるようになります。つまり.gbaファイルとは、その内容をファイル化しただけのものです。もちろんカードリッジはROM(リードオンリーメモリ)なので書き換え不可。あと大昔ということもあってデータは暗号化もされていませんでした。(いい時代やったなあ・・・。

ヘッダ

GBA上だと0x08000000~0x080000bf、.gbaファイル上だと0x00~0xbfまでの192(0xc0)サイズ分をヘッダと呼びます。内容は特に気にすることはないので素通りしましょう。一応次のような意味を持っています。

エミュレータ上で見るとこんな具合です。(Tools -> Memory viewer)

#ref(): File not found: "clip_1.png" at page "doc.4"

main関数までの処理

さて、main関数が実行されるまでの流れは以下のとおりとなります。

エミュレータ上で逆アセするとこんな感じになります。

#ref(): File not found: "clip_2.png" at page "doc.4"

履歴


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS