

#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 |
システム設定レジスタ由来の値を用いて判定します。
2007/11/16 記述追加
2007/11/06 初版