4. ソフトウェア構成

この章では 3DS のソフトウェア構成について説明します。

4.1. アプリケーション

アプリケーションから別のアプリケーションへと切り替えるには、HOME メニューを経由して再起動しなければなりません。

図 4-1. アプリケーションの切り替え

Application A Push HOME button HOME Menu Start Application Application B

4.2. 標準アプリ、拡張アプリ

2.5. 動作モード」で説明したように、SNAKE には CPU 性能等が異なる「標準モード」と「拡張モード」の 2 つの動作モードがあります。なお、CTR は動作モードが標準モードのみのプラットフォームとして扱います。

これに合わせるように、アプリケーション種別には SNAKE でも標準モードで動作する「標準アプリ」と SNAKE では拡張モードで動作する「拡張アプリ」の 2 つが存在します。

表 4-1. アプリケーション種別による各プラットフォームでの動作モード
アプリケーション種別 SNAKE CTR 備考
標準アプリ 標準モード 標準モード 過去の SDK でビルドされたアプリケーション含む
拡張アプリ 拡張モード 標準モード  

4.2.1. 標準アプリの作成方法

CTR-SDK のビルドシステムを利用している場合は、OMakefile に "DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/ExtApplication.desc" があればその行をコメントアウトしてください。

VSI-CTR(要 VSI-CTR Platform 3.0.0 以降)を利用している場合は、プロジェクトの[構成プロパティ] - [全般] - [拡張アプリケーションを作成] を "いいえ" に変更してください。

4.2.2. 拡張アプリの作成方法

CTR-SDK のビルドシステムを利用している場合は、OMakefile に "DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/ExtApplication.desc" を追加してください。

VSI-CTR(要 VSI-CTR Platform 3.0.0 以降)を利用している場合は、プロジェクトの[構成プロパティ] - [全般] - [拡張アプリケーションを作成] を "はい" に変更してください。

4.2.3. 拡張モード使用時の注意事項

拡張モードでは L2 キャッシュが有効になりますが、L2 キャッシュは容量が大きいため nngxUpdaterBuffer() 等のパフォーマンスが低下する可能性があります。

このパフォーマンスの低下を防ぐため、拡張モードでは目的に合わせて API が分けられています。拡張モードで動作するアプリケーションにおいてグラフィックを扱う場合は、適切な API を使用するようにしてください。

4.2.4. 動作モードが切り替わるタイミング

SNAKE の動作モードは nn::applet::Enable() が呼び出されたときに切り替わります。そのため、標準アプリであっても、3DSロゴの表示中とアプリケーションに制御が移ってから nn::applet::Enable() を呼び出すまでは拡張モードで動作しています。

アプリケーションが起動しているかどうかにかかわらず、HOMEメニューが表示されているときの動作モードは拡張モードです。そのため、標準アプリが HOMEメニューの表示によって中断されると、標準モードから拡張モードに切り替わり、アプリケーションに戻ったときに標準モードに切り替わります。

また、「ゲームメモ」や「インターネットブラウザー」などのシステムアプレットはアプリケーションを中断しているため、HOMEメニューを表示したときと同じように、標準モードと拡張モードの切り替えが行われます。

表 4-2. アプリケーションの種別と動作モードが切り替わるタイミング
アプリケーション種別 ロゴ表示 nn::applet::Enable() アプリケーション HOMEメニュー ライブラリアプレット システムアプレット
拡張アプリ 拡張モード 拡張モード 拡張モード 拡張モード 拡張モード 拡張モード
標準アプリ 拡張モード 標準モード 標準モード 拡張モード 標準モード 拡張モード

4.2.5. SNAKE と CTR でアプリケーションの挙動を変化させる

3DS シリーズに SNAKE が追加されたことにより、動作しているハードウェアの種別によってアプリケーションの挙動を変化させる必要が出てくることもあります。

アプリケーションが動作しているハードウェアの種別が SNAKE であるかどうかは nn::os::IsRunOnSnake() で判断することができます。これにより、CTR の拡張スライドパッド相当の入力装置が標準搭載されている SNAKE では拡張スライドパッドの接続確認処理を省略するなど、ハードウェアの特性に合わせた実装が可能になります。

拡張アプリとして作成されたアプリケーションが SNAKE の拡張モードで動作しているかどうかは nn::os::IsRunningAsExtApplication() で判断することができます。ただし、この関数は実行コストが高く、nninitStartUp() 内で呼び出すことができないなどの制限があります。

ハードウェアとアプリケーションの組み合わせで、nn::os::IsRunOnSnake()nn::os::IsRunningAsExtApplication() が返す値は以下のようになります。

表 4-3. ハードウェアとアプリケーションの組み合わせによる返り値の変化
ハードウェア アプリケーション IsRunOnSnake() IsRunningAsExtApplication()
SNAKE 拡張アプリ true true
標準アプリ true false
CTR 拡張アプリ false false
標準アプリ false false
注意:

拡張モードで強化される項目(アプリケーションが使用できるメモリのサイズや CPU 性能)を利用できるかの判断には、必ず nn::os::IsRunningAsExtApplication() を使用してください。ただし、L2 キャッシュが有効になることにより追加されたキャッシュ操作関連の関数は標準モードでも使用することができます。

nn::os::IsRunOnSnake() は上記以外で SNAKE と CTR とで異なる仕様となっている機器を利用できるかの判断に使用してください。

4.2.6. SNAKE 専用タイトル

アプリケーションの動作対象を SNAKE のみにする場合、bsf ファイルに SNAKE 専用(SNAKEOnly を True)の設定をしてください。 SNAKE 専用タイトルは CTR では起動しないため、CTR での動作を考慮する必要がなくなります。

補足:

 bsf ファイルについては、CTR-SDK のツール「ctr_makebanner」のリファレンスを参照してください。

4.3. SDK で提供されるもの

3DS では、キー入力などの各種デバイスを扱うためのライブラリだけでなく、HOME メニューやいつの間に通信などを利用するためのアプレットやライブラリが提供されます。

4.3.1. アプレット

HOME メニューのように、アプリケーションに特定の目的を持った機能を提供し、アプレットで提供されている機能については、アプリケーションの開発にかかるコストの削減などに効果を発揮します。

注意:

利用可能なアプレットは任天堂が提供するものに限られています。デベロッパが独自のものを開発することはできません。

4.3.2. ライブラリ

CTR-SDK では、搭載されたハードウェアを利用するためのライブラリが用意されています。それぞれのライブラリはライブラリ名に即した名前空間を持ち、複数のクラスやメンバ関数で構成されています。

ライブラリは主に C++ で記述されていますが、C 言語用のラッパー関数も用意されています。C 言語用のラッパー関数については関数リファレンスを参照してください。以降の説明では、関数名などを C++ での記述に合わせています。

表 4-4. ライブラリ一覧

ライブラリ名

名前空間

説明

OS

nn::os

オペレーションシステムに関係するクラスをまとめたライブラリです。

RO

nn::ro

DLL 機能を提供するためのライブラリです。

APPLET

nn::applet

アプレットの起動、ふた閉じのスリープなどに対応するためのライブラリです。

FS

nn::fs

各メディア上のファイルにアクセスするためのライブラリです。

CX

nn::cx

データの圧縮、解凍を行うためのライブラリです。

MATH

nn::math

算術・数値演算の関数をまとめたライブラリです。

CRYPTO

nn::crypto

暗号化を行うライブラリです。

FND

nn::fnd

ヒープ、時間など、基礎的なクラスをまとめたライブラリです。

FONT

nn::font

フォントデータを利用した文字描画のためのライブラリです。

HID

nn::hid

デジタルボタン、スライドパッド、タッチパネル、加速度センサー、ジャイロセンサー、デバッグパッドからの入力を扱うライブラリです。

PTM

nn::ptm

電源とアラームを制御するライブラリです。

GX

nn::gx

GPU、LCD の制御を行うライブラリです。3D グラフィックスの描画には gl、nngx 関数を使用します。

GD

nn::gd

GX ライブラリの 3D グラフィックス描画関数を軽量化したライブラリです。

GR

nn::gr

3D グラフィックスコマンドの直接生成を支援するライブラリです。

MIC

nn::mic

マイクを使った自動サンプリングを行うライブラリです。

CAMERA

nn::camera

カメラを使った画像キャプチャを行うライブラリです。

Y2R

nn::y2r

YUVtoRGB 回路を利用して、YUV から RGB への変換を行うライブラリです。

QTM

nn::qtm

SNAKE でのみ利用可能なフェイストラッキングを行うためのライブラリです。

DSP

nn::dsp

サウンド再生に DSP を利用するためのライブラリです。

SND

nn::snd

サウンド再生を行うライブラリです。

AACDEC

nn::aacdec

AAC データのデコードを行うためのライブラリです。

AACENC

nn::aacenc

AAC データのエンコードを行うためのライブラリです。

NDM

nn::ndm

ネットワーク処理を行っているデーモンを制御するためのライブラリです。

UDS

nn::uds

無線通信モジュールを利用したローカル通信を行うライブラリです。

RDT

nn::rdt

UDS ライブラリを利用して、信頼性のあるデータ通信を行うライブラリです。

CEC

nn::cec

すれちがい通信の設定などを行うライブラリです。

DLP

nn::dlp

ニンテンドー 3DS ダウンロードプレイに対応するためのライブラリです。

AC

nn::ac

インフラストラクチャ通信の自動接続を行うライブラリです。

BOSS

nn::boss

ダウンロードタスクの登録などを行うライブラリです。

FRIENDS

nn::friends

フレンドの情報にアクセスするためのライブラリです。

NEWS

nn::news

おしらせを投稿するためのライブラリです。

ACT

nn::act

アカウントシステムに登録された情報の取得や、認証をするライブラリです。

EC

nn::ec

EC 機能を利用するためのライブラリです。

IR nn::ir 本体間赤外線通信を利用するためのライブラリです。

NFP

nn::nfp

amiibo™(アミーボ)と呼ばれるキャラクター商品とアプリケーションを連携させるためのライブラリです。

ULCD

nn::ulcd

立体視表示で使用する左目、右目用のカメラ行列を算出するライブラリです。

JPEG

nn::jpeg

JPEG 形式のエンコードとデコードを行うライブラリです。

TPL

nn::tpl

複数枚のテクスチャをまとめた TPL ファイルを扱うためのライブラリです。

CFG

nn::cfg

本体設定で扱われている情報を取得するライブラリです。

NGC

nn::ngc

NG ワードリストによって NG ワードをチェックするためのライブラリです。

UBL

nn::ubl

受信拒否リストを管理するためのライブラリです。

PL

nn::pl

3DS 固有の機能(歩数情報など)を使用するためのライブラリです。

UTIL

nn::util

ユーティリティ関数のライブラリです。

ENC

nn::enc

文字コード変換を行うライブラリです。

ERR

nn::err

エラー処理のためのライブラリです。

ERREULA

nn::erreula

エラー・EULA アプレットを使用するためのライブラリです。

SWKBD

nn::swkbd

ソフトウェアキーボードアプレットを使用するためのライブラリです。

PHTSEL

nn::phtsel

写真選択アプレットを使用するためのライブラリです。

VOICESEL

nn::voicesel

音声選択アプレットを使用するためのライブラリです。

EXTRAPAD

nn::extrapad

拡張スライドパッド補正アプレットを使用するためのライブラリです。

WEBBRS

nn::webbrs

インターネットブラウザーを使用するためのライブラリです。

OLV

nn::olv

Miiverse アプリ、投稿アプリを使用するためのライブラリです。

SOCKET

nn::socket

(デバッグ用途のみ)ソケット通信を行うライブラリです。

SSL

nn::ssl

(デバッグ用途のみ)SSL による通信を行うライブラリです。

HTTP

nn::http

(デバッグ用途のみ)HTTP 通信を行うライブラリです。

DBG

nn::dbg

デバッグ補助のためのライブラリです。

HIO

nn::hio

(デバッグ用途のみ)Host IO を利用するためのライブラリです。

MIDI

nn::midi

(デバッグ用途のみ)MIDI を利用するためのライブラリです。

※ ライブラリの構成や名前は今後変更される場合があります。

4.4. エラー処理について

3DS では本体更新によりライブラリが更新されるため、アプリケーションを開発した時点では定義されていなかった値を処理結果として返す可能性があります。このようなケースに問題なく対応するためにも、処理の成否は必ず nn::Result::IsSuccess() もしくは nn::Result::IsFailure() で判定するようにしてください。

成否を確認せずに一致判定のみでエラー処理を行うことは、想定外のエラーが発生した際に意図しない成功または意図しない失敗と判定してしまう危険性があるため推奨しません。

補足:

リファレンスにある症状とは異なるエラーが特定の個体でのみ発生する場合は、そのハードの故障を疑ってみてください。