Nanashi-soft○プログラマ専用○NDSでプログラミング○
インストールしたDS開発キットには,Hello Worldが入っています
それをビルドしてみます
まずは DSプログラミングの基礎知識から
スペックを見て分る通り DSには 2つの CPUが登載されています
特徴として,それぞれ別々のプログラムを走らせる事ができます
しかも,2つのバイナリをそれぞれの CPUにロードして実行する事ができます
この 2つを区別する為に,CPUの種類で呼ぶ事が多いです
メインCPUを ARM9,サブCPUを ARM7と呼んで区別します
大きく分けて ARM9はメイン処理を,ARM7は IOを担当します
ビルド作業としては,
・ARM9用ソースをコンパイル
・ARM7用ソースをコンパイル
・コンパイル済の両ファイルを結合
と言う流れになります
[2006/09/17]追記
※devkitPro Updater 1.1.0の場合です
DS開発キットをインストールすると,
C:\devkitPro\examples\nds\templates\combined
に Hello Worldサンプルが置かれます
この中の
C:\devkitPro\examples\nds\templates\combined\arm9\source\template.c
が,ARM9用のソースです
同一フォルダに,arm9.batファイルを作成して,以下の内容を記述
C:\devkitPro\devkitARM\bin\arm-elf-g++ -g -Wall -O2 -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer -ffast-math -mthumb-interwork -IC:\devkitPro\libnds\include -DARM9 -c template.c -oarm9.o C:\devkitPro\devkitARM\bin\arm-elf-g++ -g -mthumb-interwork -mno-fpu -specs=ds_arm9.specs arm9.o -LC:\devkitPro\libnds\lib -lnds9 -o arm9.elf C:\devkitPro\devkitARM\bin\arm-elf-objcopy -O binary arm9.elf arm9.bin pause
長いですね(汗
でも1回書けば,後はバッチファイルを実行するだけなので,まぁ良いでしょう
このファイルを実行すると,arm9.o,arm9.elf,arm9.binの3つのファイルが作成されます
必要なのは arm9.binだけで,.oと.elfは削除して構いません
次に ARM7側のコンパイルを行います
C:\devkitPro\examples\nds\templates\combined\arm7\source\template.c
が,ARM7用のソースです
同一フォルダに,arm7.batファイルを作成して,以下の内容を記述
C:\devkitPro\devkitARM\bin\arm-elf-g++ -g -Wall -O2 -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer -ffast-math -mthumb-interwork -IC:\devkitPro\libnds\include -DARM7 -c template.c -oarm7.o C:\devkitPro\devkitARM\bin\arm-elf-g++ -g -mthumb-interwork -mno-fpu -specs=ds_arm7.specs arm7.o -LC:\devkitPro\libnds\lib -lnds7 -oarm7.elf C:\devkitPro\devkitARM\bin\arm-elf-objcopy -O binary arm7.elf arm7.bin pause
このファイルを実行すると,arm7.o,arm7.elf,arm7.binの3つのファイルが作成されます
必要なのは arm7.binだけで,.oと.elfは削除して構いません
最後にコンパイルしたファイルを結合して,実行形式にします
arm9.binと arm7.binを同一フォルダに入れて下さい
そこに build.batファイルを作成して,以下の内容を記述
C:\devkitPro\devkitARM\bin\ndstool -c templete.nds -9 arm9.bin -7 arm7.bin pause
実行して出来た templete.ndsが実行ファイルです
CFカードの適当な場所に templete.ndsだけをコピーして下さい
スーパーCARDに挿して,DSに挿して,起動して下さい
その際,DSモードで起動しなければなりませんので,SuperPassか FlashMeが必要です
特に問題なく起動するはずです
ペンでタップすると,その座標が表示されます
C:\devkitPro\devkitARM\bin\arm-eabi-g++ -g -Wall -O2 -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer -ffast-math -IC:\devkitPro\libnds\include -DARM9 -fno-rtti -fno-exceptions -c arm9.c -oarm9.o C:\devkitPro\devkitARM\bin\arm-eabi-g++ -g -mthumb -mthumb-interwork -mno-fpu -specs=ds_arm9.specs arm9.o -LC:\devkitPro\libnds\lib -lnds9 -o arm9.elf C:\devkitPro\devkitARM\bin\arm-eabi-objcopy -O binary arm9.elf arm9.bin pause
・arm7.bat (1.3.5用)
C:\devkitPro\devkitARM\bin\arm-eabi-g++ -g -Wall -O2 -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer -ffast-math -fno-rtti -fno-exceptions -IC:\devkitPro\libnds\include -DARM7 -c arm7.c -oarm7.o C:\devkitPro\devkitARM\bin\arm-eabi-g++ -g -mthumb-interwork -mno-fpu -specs=ds_arm7.specs arm7.o -LC:\devkitPro\libnds\lib -lnds7 -oarm7.elf C:\devkitPro\devkitARM\bin\arm-eabi-objcopy -O binary arm7.elf arm7.bin pause
・build.bat (共通)
C:\devkitPro\devkitARM\bin\ndstool -c templete.nds -9 arm9.bin -7 arm7.bin pause
arm7.batを実行するとコンパイルエラーになります
テンプレートソースに誤りがあり,arm7.cの 117行目を以下のように変更する必要があります
irqEnable(IRQ_VBLANK | IRQ_VCOUNT); ↓ irqEnable(IRQ_MASK(IRQ_VCOUNT | IRQ_VCOUNT));