# 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 ハイブリッド」の３種類の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 初版