プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

NDSアプリ開発二日目: 実機で動いた!


先日動かないよー!と言ってたデモプログラムが、ようやく実機で動いた!



背景に絵を表示して、タッチペンで赤い字が書けるデモアプリ。
nintendogsは自分で書きました。:)


いつもながら、こういった携帯機器で自分の作ったプログラムが動くと、感動するなあ。
嬉しくて、誰かにしゃべりたいので、さっそくブログに書いてます。^^;
まあ動いたといっても、本当にしょぼいテストプログラムを走らせただけなんだけど。


自分用のメモも兼ねて、実機で動かす際のTips等を。
なお、今回のアプリ制作にはNDS Dev Env 2.3.0、PassMe及びFlash2Advanceを使用しました。

NDS Dev Envのサンプルは、そのままでは動かない


NDS Dev Env 2.3.0のサンプルは、コンパイルしただけでは動かないようだ。
バージョンによっては、コンパイルすら通らない場合がある。
サンプルはバージョンごとにアップデートされていないようなので、それが原因か?


ネットにはサンプルアプリのソースを公開されている方がいらっしゃるので、参考にするといいだろう。
特にht9さん、SaTaさんのサイトには、大変お世話になりました。
この場を借りて、お礼申し上げます。(_O_)


ぼくのデモアプリのソースも後ほど公開する予定。
あまり参考にはならないと思うけど、誰かの役に立てば幸いかと。

エミュレータで動いても、実機で動くとは限らない


現在はエミュレータも開発環境も発展途上にあるので、いろいろ試してみないとダメみたい。
開発環境が整備されれば、エミュレータでもかなりのデバッグができるようになると思うけどね。

swiWaitForVBlank()は使わない


前回ARM7側のコードが動いていないと言っていたが、実はそうではなく、swiWaitForVBlank()が制御を戻さないのが原因だった。(エミュレータだけの問題?)
これに気が付くのに、えらく時間がかかったよ。
よく見ると、動くサンプルもコメントアウトしてある。
サンプルコード、直しておいてくれー!(笑)

メインVRAMに書く、一番簡単な方法


いろいろサンプルを見たが、なんかVRAMのアクセスは難しそうだ。
とりあえずやっつけ的に試してみるが、ちゃんと仕様を理解してないため、なんかうまくいかない。
GBAのMode3みたいに、単純にフレームバッファに書きたいだけなんだけどなー。


と思っていたら、DSEmuのページに、いいチュートリアルがあった。
なるほど。単純にフレームバッファを使うだけだったら、これだけでいいんだ。

    // Turn on the screens and 2D cores and switch to mode 0
    powerON(POWER_ALL);

    // Set up display
    videoSetMode(MODE_FB0);
    videoSetModeSub(MODE_FB1);
    vramSetBankA(VRAM_A_LCD);
    vramSetBankB(VRAM_B_LCD);
    lcdSwap();


ていうか、あのデモだったら、フルカラーいらないだろ>わし


ちなみにここのチュートリアルは、基本的なことが分かりやすく書いてあるので、初めてNDS開発をする時にはオススメです。

これからとか


デモが動いたとは言うものの、とりあえず基本的な開発サイクルが分かっただけ。
まだまだNDSについては分からないことが多いので、今後とも精進ですな。
グラフィックなどの基本機能はもちろん、RTCとかファイルシステムとか、楽しそうな機能があるし。


ところで今更ですが、NDSって、ARM7とARM9のマルチプロセッサシステムだったのね。
割り込みもちゃんと別系統で拾えるし。
こういう携帯機器でマルチプロセッサが扱えるなんて、なんかすごくクールだぜ!


お楽しみはこれからだ!(なんちゃって:)