ニンテンドーDSのプログラミング。 最初のステップ

この記事では、ニンテンドーDS for Linuxのソフトウェア開発の基本について説明します。 ただし、使用されるツールはすべてクロスプラットフォームであり、他のOSに大きな違いはないはずです。



最初に、このゲーム機が何であるかを理解しましょう。 ウィキペディアが伝えていることは次のとおりです。

*プロセッサー:ARM946E-S-67 MHz、コプロセッサーARM7TDMI-33 MHz

*メモリ:4 MB、656 KBビデオメモリ、512 KBテクスチャメモリ

*画面:2つの個別のLCD、対角77 mm(3インチ)、解像度256x192ピクセル、最大26万色。 スクリーン間の距離は約21 mmで、これは92の「隠された」ラインに相当します。

*ビデオシステム:2Dおよび3D(T&L、テクスチャ座標変換、テクスチャマッピング、アルファブレンディング、スムージング、整数シェーディング、Zバッファリング)のサポートにより、理論的には1秒あたり120,000ポリゴンを描画できます(ただし、6144頂点のレンダリングには制限があります1フレームに2048個の三角形)。

*サウンド:ステレオ、16チャンネルADPCM / PCM

*ドライブ:ニンテンドーDSカスタムカートリッジスロット1個、ニンテンドーゲームボーイアドバンスカートリッジスロット2個

*通信:IEEE 802.11(Wi-Fi)、接続に独自の任天堂形式を使用。 条件に応じて、10〜30メートルのLANの半径。

*管理:タッチスクリーン、音声認識用の内蔵マイク、A / B / X / Yボタン、D-Pad、L / R暗号、開始および選択ボタン

*作業時間:6-10時間

*重量:275グラム

*寸法:148.7×84.7×28.9 mm



ご覧のとおり、コンソールにはARM9とARM7の2つのプロセッサがあります。 私たちにとっての主なものはARM9です。プログラムが実行されるのはその上です。 ARM7は一般に、タッチスクリーン、キーボード、マイク、およびその他の周辺機器の保守に使用されます。 libNDSライブラリには、ARM7の標準プログラム(default.arm7)が含まれており、標準周辺機器との通信のニーズを完全に満たします。 そのため、最初の段階では、2番目のプロセッサの動作について考える必要はありません。



次に、クロスコンパイル用の環境を構成します。

必要なもの:

ARM開発キット-DevkitARM sourceforge.net/projects/devkitpro/files/devkitARM ;

ニンテンドーDSの開発を簡素化するライブラリ-libNDS sourceforge.net/projects/devkitpro/files/libnds

DeSmuME-desmume.org/downloadなどのエミュレーターも同様です

/ opt / devkitproディレクトリーを作成し、そこにdevkitARMとlibNDSを解凍します。

環境変数を設定します。

export DEVKITPRO=/opt/devkitpro

export DEVKITARM=$DEVKITPRO/devkitARM






ここでは、一般に、すべてが設定されています。



次に、グラフィックスサブシステムを見て、同時に「Hello World!」のような簡単な小さなプログラムを作成します。 NDSには2つのグラフィックコアがあります。メイン(メイン)はデフォルトでトップ画面に使用され、追加(サブ)はボトム画面に使用されます。 各コアは6つのモードのいずれかで動作し、メインのコアには大きな画像を表示するための2つの追加モードがあります。



ビデオコントローラーのグラフィックモード:
メイン2Dコア
モード BG0 BG1 BG2 BG3
モード0 テキスト/ 3D テキスト テキスト テキスト
モード1 テキスト/ 3D テキスト テキスト 回転
モード2 テキスト/ 3D テキスト 回転 回転
モード3 テキスト/ 3D テキスト テキスト 延長
モード4 テキスト/ 3D テキスト 回転 延長
モード5 テキスト/ 3D テキスト 延長 延長
モード6 3D - 大きなビットマップ -
フレームバッファ ビットマップとしての直接VRAM表示
追加の2Dコア
モード BG0 BG1 BG2 BG3
モード0 テキスト テキスト テキスト テキスト
モード1 テキスト テキスト テキスト 回転
モード2 テキスト テキスト 回転 回転
モード3 テキスト テキスト テキスト 延長
モード4 テキスト テキスト 回転 延長
モード5 テキスト テキスト 延長 延長




カーネルを使用するには、まずカーネルをオンにして、動作モードを設定し、メモリを「マップ」する必要があります。

プログラムは2D情報を出力する必要があるため、メイン画面の2Dグラフィックコアをオンにします。

powerOn(POWER_2D_A);







グラフィックコアのビデオモードを設定します。

videoSetMode(MODE_FB0);





フレームバッファモード-ビデオメモリとディスプレイピクセルの直接対応。



次に、両方のグラフィックコアが共有ビデオメモリを使用するため、使用するメモリ領域をグラフィックコアに伝える必要があります。 バンクAをトップ画面のフレームバッファーとして使用します。

vramSetBankA(VRAM_A_LCD);







これで初期化が完了し、すでに画面に情報を表示できます。 たとえば、画面をランダムな色のピクセルで塗りつぶします。

プログラムの全文は次のとおりです。

#include <nds.h>

int main()

{

powerOn(POWER_2D_A); // 2D

videoSetMode(MODE_FB0); //

vramSetBankA(VRAM_A_LCD); //

uint16* buffer;

while ( true ){

buffer = VRAM_A + rand()/(RAND_MAX/SCREEN_WIDTH/SCREEN_HEIGHT); //

*buffer = RGB15(rand()/(RAND_MAX/31),rand()/(RAND_MAX/31),rand()/(RAND_MAX/31)); //

}

}




* This source code was highlighted with Source Code Highlighter .






makefileを使用したプログラムは次のとおりです。narod.ru / disk / 23987391000 / example1.tar.gz.html



ですから、私たちは、プリミティブではありますが、ニンテンドーDS向けに適切に機能するプログラムを作成しました。 次の記事では、単純なゲームの例として、タイルグラフィックス、割り込み、キーボード、タッチスクリーンの操作を検討する予定です。



そして、ここに英語の非常に良いレッスンのシリーズがあります: dev-scene.com/NDS/Tutorials



All Articles