OS_GetConsoleType

構文

#include <nitro/os.h>

u32 OS_GetConsoleType( void );

引数

なし。

返り値

プログラムの実行環境による u32 型の値です。
説明の項を参照してください。

説明

プログラムの実行環境を表す u32 型の値を返します。

この OS_GetConsoleType() は動作環境によって処理を動的に切り替えたい場合に有効です。この関数によって複数の動作環境で共通のプログラムを作成することができます。

OS_GetConsoleType() は、「動作している環境」を取得するための関数であり、「動作しているモード」を調べるための関数ではありません。動作モードを調べる関数は、OS_IsRunOnTwl() です。 例えばNTR 用のゲームは NTRでも遊べますし、TWL で遊ぶことも出来ます。どちらの場合でも「NTRモード」でプログラムは動いていますが、動作しているハードウェアはNTR であったり TWL であったりと異なります。

OS_IsRunOnTwl() では、「動作モードがNTRモードか、TWLモードか」はわかります。しかしどちらのハードウェア上で動作しているかはわかりません。

OS_GetConsoleType() では、「NTRで動作しているか、TWLで動作しているか」はわかります。しかし動作モードはわかりません。
 (但し、NITRO専用ROMの FINALROM版を TWL で動作させる場合、"NTR で動作している" ことを表す値が返ります。)

OS_GetConsoleType() は、1回目の呼び出しではデバイスやメモリ等を調査して値を決定しますが、2回目の呼び出しからは以前返した値と同じものをそのまま返しますので呼び出しによるオーバーヘッドは殆どありません。

最終版ROM (FINALROM) ライブラリでは返る値が限定されています。デバッガ上など実機以外で動作させていたときに、その環境を表す値以外の値を返すことがあります。



類似の関数

同様の関数として、OS_GetRunningConsoleType() があります。こちらはは 最終版ROM (FINALROM) でも実際にハードウェア構成を調べて値を返す点が違います。

この違いは、例えば TWL 最終版ROM を IS-TWL-DEBUGGER で動作させた場合などに見ることが出来ます。IS-TWL-DEBUGGER にはメモリが 32MB 搭載されていますのでOS_GetRunningConsoleType() & OS_CONSOLE_SIZE_MASK の値は OS_CONSOLE_SIZE_32MB となりますが、OS_GetConsoleType() & OS_CONSOLE_SIZE_MASKOS_CONSOLE_SIZE_16MB となります。

最終版ROM にこれらの動作環境取得の関数が残る場合、OS_GetRunningConsoleType() よりは OS_GetConsoleType() の方が無難です。製品となった状況を想定すると、最終ROM は実機でしか動作しないはずなので、「動作している環境はデバッガである」など実機で有りえない値が返る可能性は排除しておきたいからです。そういう意味では OS_GetRunningConsoleType() はデバッグ用途にのみ使用するのに留めておくのがよいでしょう。



取得できる値について

・動作環境

返り値とOS_CONSOLE_MASK の論理積は、動作環境によって以下の値を取ります。
動作環境
OS_CONSOLE_TWL TWL 実機で動作 *1
OS_CONSOLE_NITRO NITRO 実機で動作
OS_CONSOLE_TWLDEBUGGER IS-TWL-DEBUGGER 上で動作 *2
OS_CONSOLE_ISDEBUGGER IS-NITRO-DEBUGGER 上で動作
OS_CONSOLE_ENSATA ensata NITRO Software Emulator 上で動作

TWL実機で動作していると判定された *1 の場合、OS_CONSOLE_TWLTYPE_MASK との論理積でさらに分類されます。
但し通常は OS_CONSOLE_TWLTYPE_DEV の考慮は不要です。OS_CONSOLE_TWL だけで TWL実機と見なして問題ありません。
なお、TWLデバッガをデバッガソフトウェア非接続で使用する場合、動作環境は OS_CONSOLE_TWL となり、TWL実機の種類は OS_CONSOLE_TWLTYPE_DEV となります。
但し NITROデバッガをデバッガソフトウェア非接続で使用する場合は、動作環境は OS_CONSOLE_IS_DEBUGGER で、接続使用する場合と変わりません。
TWL実機の種類
OS_CONSOLE_TWLTYPE_RETAIL TWL 製品実機
OS_CONSOLE_TWLTYPE_DEV 開発用途にセキュリティー用の鍵が異なる TWL 実機 / TWLデバッガのソフトウェア非接続使用時

IS-TWL-DEBUGGER で動作していると判断された *2 の場合、OS_CONSOLE_BOARD_MASK との論理積でさらに分類されます。
IS-TWL-DEBUGGER の種類
OS_CONSOLE_BOARD_A9_A7 コンポーネント開発用 ARM9 / ARM7 両対応デバッガ
OS_CONSOLE_BOARD_A9 アプリケーション開発用 ARM9 専用デバッガ

・プログラムの読み込みデバイス

返り値とOS_CONSOLE_DEV_MASK の論理積は プログラムデータの読み込みデバイスによって以下の値を取ります。
読み込みデバイス
OS_CONSOLE_DEV_CARD カードバスから読み込み
OS_CONSOLE_DEV_CARTRIDGE カートリッジバスから読み込み *3
OS_CONSOLE_DEV_NAND NANDから読み込み
OS_CONSOLE_DEV_SDCARD SDカードから読み込み
OS_CONSOLE_DEV_MEMORY メモリ上から読み込み
OS_CONSOLE_DEV_DOWNLOAD ダウンロードでの読み込み

*3 …TWL本体にはカートリッジスロットが無いのでTWL プラットフォームでこの値を取ることはありません。
・メモリサイズ

返り値とOS_CONSOLE_SIZE_MASK の論理積は、実装されているメインメモリサイズによって以下の値を取ります。
メインメモリサイズ
OS_CONSOLE_SIZE_4MB 4MByte
OS_CONSOLE_SIZE_8MB 8MByte
OS_CONSOLE_SIZE_16MB 16MByte
OS_CONSOLE_SIZE_32MB 32MByte

TWL実機でNITRO専用ROMを動作させた場合はビルド種類に依らずメモリサイズは 4MB となります。



環境やビルドによる実際の値

以下は、OS_GetConsoleType()OS_GetRunningConsoleType() で取得できる値を表しています。表の項目の論理和が取得できる値となります。OS_CONSOLE_DEV_xxx は、実際にROMデータを読み込んだデバイスの値となります。

NITRO モードの場合
動作環境 ビルド OS_GetConsoleType()の値 OS_GetRunningConsoleType()の値 備考
NTR実機 DEBUG
RELEASE
OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
4つとも
同じです。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
TWL実機 DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
FINALROMの
OS_GetConsoleType()
だけ異なります。

ビルドに関わらず、メモリ搭載
量は 4MB になります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
IS-NITRO-DEBUGGER
(デバッガソフトウェア
非接続時を含む)
DEBUG
RELEASE
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
ENSATA EMULATOR DEBUG
RELEASE
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_ISDEBUGGER
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_8MB
IS-TWL-DEBUGGER
(一般開発用: ARM9)
DEBUG
RELEASE
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7)
DEBUG
RELEASE
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
IS-TWL-DEBUGGER
(一般開発用: ARM9) の
デバッガソフトウェア非接続時
DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
FINALROMの
OS_GetConsoleType()
だけ異なります。

ビルドに関わらず、メモリ搭載
量は 4MB になります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7) の
デバッガソフトウェア非接続時
DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
FINALROMの
OS_GetConsoleType()
だけ異なります。

ビルドに関わらず、メモリ搭載
量は 4MB になります。
FINALROM OS_CONSOLE_NITRO
OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_4MB
TWL モードの場合
動作環境 ビルド OS_GetConsoleType()の値 OS_GetRunningConsoleType()の値 備考
TWL実機 DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
4つとも
同じです。
FINALROM OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
IS-TWL-DEBUGGER
(一般開発用: ARM9)
DEBUG
RELEASE
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7)
DEBUG
RELEASE
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWLDEBUGGER
OS_CONSOLE_BOARD_A9_A7

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
IS-TWL-DEBUGGER
(一般開発用: ARM9) の
デバッガソフトウェア非接続時
DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
IS-TWL-DEBUGGER
(コンポーネント開発用
ARM9 + ARM7) の
デバッガソフトウェア非接続時
DEBUG
RELEASE
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB
FINALROMの
OS_GetConsoleType()
だけ異なります。
FINALROM OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_RETAIL

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_16MB
OS_CONSOLE_TWL
OS_CONSOLE_TWLTYPE_DEV

OS_CONSOLE_DEV_xxx
OS_CONSOLE_SIZE_32MB




NITRO モードでの動作環境識別

NITRO モードで動作する場合、本関数 OS_GetConsoleType() だけではNTR本体と TWL 本体のどちらで動作しているかの判断が出来ません。OS_GetRunningConsoleType() の値を調べれば区別できますが、前述の通り OS_GetRunningConsoleType() はできればデバッグ用途に留めたい関数です。そもそも通常はどちらのハードウェアで動作しているかを意識する必要はありませんが、どうしても識別したい場合のためにOSi_IsNitroModeOnTwl() という関数が用意されています。この関数が TRUE を返すときは、TWL上で NITRO モードの ROM が動作していることになります。

OSi_IsNitroModeOnTwl() は限られた用途で使われるべきであるという理由と、TWL開発当初は NITRO 開発者がTWL のことを知っているとは限らないという配慮から TWL の名が出ているこの関数は非公開関数の扱いとなっていたという経緯により、現在も非公開関数として扱われています。

参照

OS_IsRunOnDebugger, OS_IsRunOnEmulator, OS_GetRunningConsoleType

履歴

2009/10/30 デバッガ非接続時に関しての情報を追記。NITROモードでの動作環境識別を修正
2008/04/15 モードによって表を分割
2008/03/27 環境やビルドによる実際の値を追加
2007/11/16 記述追加
2007/11/05 OS_GetRunningConsoleType() に移行