この記事では、ニンテンドー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