OS_IsRunOnTwl

構文

#include <nitro/os.h>

BOOL OS_IsRunOnTwl( void );

引数

なし。

返り値

TRUE ならTWLモードで動作していることを表します。実際の動作環境は TWL実機であったり IS-TWL-DEBUGGER であったりするかもしれません。

FALSE ならそれ以外のモード(すなわち NITRO モード)で動作していることを表します。実際の動作環境は NITRO実機であったり IS-NITRO-DEBUGGER であったりするかもしれません。また、IS-TWL-DEBUGGER を使い NITRO モードで動作している場合も該当します。

説明

プログラムが TWLモードで動作しているかどうかを調べます。

OS_IsRunOnTwl() は動作モードを判定する関数で、動作環境を判定するものではありません。たとえば、IS-TWL-DEBUGGER 上で動作していても、この関数は TRUE を返す場合もあれば FALSE を返す場合もあります。すなわち、IS-TWL-DEBUGGER 上ではプログラムが TWL モードで動作する場合があり、NITROモードで動作する場合もあります。

OS_IsRunOnTwl() は TWLとNITROのハイブリッドROMを作成するときに有用な関数です。ハイブリッドROM は TWL 上では TWL モードで動作し、NITRO 上では NITRO モードで動作するので、TWL 上では TRUE を、NITRO 上ではFALSE を返します。これを利用して処理を動的に切り替えることが可能です。

(例) NITRO/TWL ハイブリッド ROM に対応した処理の分け方

if ( OS_IsRunOnTwl() )
{
    // TWLモードで実行したい処理
}
else
{
    // NITROモードで実行したい処理
}


また通常のアプリケーション開発では余りないケースですが、ライブラリ開発などで 「NITRO専用」「TWL専用」「NITRO/TWL ハイブリッド」の3種類のROM に対応するライブラリのソースを記述する場合などに、SDKで定義される define と合わせ、次のように記述することができます。

(例) NITRO専用ROM、TWL専用ROM、NITRO/TWLハイブリッドROM に対応した処理の分け方

if ( OS_IsRunOnTwl() )
{
#ifdef SDK_TWL
   // TWLモードで実行したい処理
#endif
}
else
{
#ifndef SDK_TWLLTD
    // NITROモードで実行したい処理
#endif
}

OS_IsRunOnTwl() はハイブリッド時にはランタイムにプラットフォームを判別しますが、NITRO専用時 には定数 FALSE に、TWL専用時には定数 TRUE になります。NITRO専用ROMとTWL専用ROM を作成する場合には if 文の条件に合わない方はデッドストリップが期待出来ますが、デッドストリップされる側に書かれた関数の未定義エラーなどを避けるために SDK_TWL (TWL専用ROM と NITRO/TWL ハイブリッドROM のコンパイル時に定義されます) と SDK_TWLLTD (TWL 専用ROM のコンパイル時に定義されます) を用いています。



環境による実際の値

以下は、OS_IsRunOnTwl() が返す値をまとめたものです。DEBUG, RELEASE, FINALROM といったビルドによる差はありません。

NITRO モードの場合
動作環境 OS_IsRunOnTwl()の値
DS実機 FALSE
TWL実機 FALSE
IS-NITRO-DEBUGGER FALSE
ENSATA EMULATOR FALSE
IS-TWL-DEBUGGER
(一般開発用: ARM9)
FALSE
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7)
FALSE
TWL モードの場合
動作環境 OS_IsRunOnTwl()の値
TWL実機 TRUE
IS-TWL-DEBUGGER
(一般開発用: ARM9)
TRUE
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7)
TRUE


内部動作

システム設定レジスタ由来の値を用いて判定します。

参照

OS_Printf, OS_GetConsoleType

履歴

2007/11/16 記述追加
2007/11/06 初版