Nanashi-softプログラマ専用NDSでプログラミング


◇NDSでプログラミング-ビルドしてみる-

インストールしたDS開発キットには,Hello Worldが入っています
それをビルドしてみます

◎基礎知識

まずは DSプログラミングの基礎知識から
スペックを見て分る通り DSには 2つの CPUが登載されています
特徴として,それぞれ別々のプログラムを走らせる事ができます
しかも,2つのバイナリをそれぞれの CPUにロードして実行する事ができます

この 2つを区別する為に,CPUの種類で呼ぶ事が多いです
メインCPUを ARM9,サブCPUを ARM7と呼んで区別します
大きく分けて ARM9はメイン処理を,ARM7は IOを担当します

ビルド作業としては,
・ARM9用ソースをコンパイル
・ARM7用ソースをコンパイル
・コンパイル済の両ファイルを結合
と言う流れになります

◎ARM9コンパイル

[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コンパイル

次に 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が必要です

特に問題なく起動するはずです
ペンでタップすると,その座標が表示されます


[2006/09/17]追記
devkitPro Updater 1.3.5の場合は,プログラムファイル名が変更になっています

そして,同じファイル名が2つあると間違えるので(汗
C:\devkitPro\examples\nds\templates\combined\arm9\source\template.c

arm9.c

C:\devkitPro\examples\nds\templates\combined\arm7\source\template.c

arm7.c
にファイル名を変えて,同一フォルダに入れている事を前提とします

・arm9.bat (1.3.5用)

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));




TOPプログラマ専用NDSでプログラミング