"."(ドット) で始まるファイルを追加
(2007/07/10)
CARD_ReadRom 関数内部の転送処理を若干修正しました。
動作仕様に変更はありません。
C++ コンストラクタや Static Initializer を Autoload セクションに配置するとリンク処理に失敗してしまっていました。
ですから lcf template ファイルを修正し、C++ コンストラクタや Static Initializer に対して Autoload 処理が出来るように修正しました。
デバッグ用拡張メモリへ Autoload 処理を行うとき OS_GetArenaLo 関数に引数 OS_ARENA_MAINEX を与えた際の値が正しく設定されていませんでした。
これを修正するため、拡張メモリ領域への Autoload を行なうための専用のセクションとして MAINEX という名のセクションを設定し、拡張メモリへ転送したいオブジェクトをこのセクション中で列挙できるように修正しました。
例: 拡張メモリに OBJS_MAINEX を配置する場合の lsf 記述
Autoload MAINEX
{
Address 0x02400000
Object $(OBJS_MAINEX) (.text)
Object $(OBJS_MAINEX) (.data)
Object $(OBJS_MAINEX) (.bss)
}
拡張メモリ領域への Overlay 処理においては修正点はありません。
ありません。
(2007/06/15)
Note 46-02 で追加したはずの関数が、実際は追加されていませんでしたので、これを追加しました。
メモリ確保およびメモリ解放の標準的な関数プロトタイプとして、MIAllocator 構造体とその操作関数群を公開しました。
Note 44-09 の修正をより正確なものに修正しました。
makerom.exe において -M オプションで指定された変数定義リストファイル内に記述した変数の定義を正しい値に展開する動作に問題があり、展開後の変数の値の末尾に改行コードが常に付加されるようになっていました。
これを修正し、改行コードを取り除くようにしました。
Note 46-21でテスト公開とされていたWFS ライブラリの関数リファレンスが用意され、 正式公開となりました。
使用すべきチャンネルが存在するかどうかに関わらず、常に TRUE を返してしまう不具合があり、これを正しい値を返すように修正しました。
ありません。
(2007/05/18)
バックアップデバイスの非同期処理を実行中に CARD_UnlockBackup 関数が呼び出された場合はライブラリ内部で強制的に完了を待つよう修正し、この点について関数リファレンスに説明を追記しました。
ROM アクセスの DMA 転送に伴うキャッシュ無効化処理について従来は転送サイズに関わらず部分的な無効化を行っていましたが、ある程度のサイズ以上になるとキャッシュ全体を無効化したほうが効率が良くなるため、この処理方式を切り替えるサイズ閾値を自由に設定できる CARD_SetCacheFlushThreshold 関数を追加しました。
マイクのサンプリング中にカードが抜かれるとバックライトが OFF になったりシャットダウンしてしまうことがあるという不具合があり、これを修正しました。
CARD ライブラリが 16Mb-FLASH バックアップデバイスに対応し、CARD_BACKUP_TYPE_FLASH_16MBITS を CARDBackupType 列挙型に追加しました。
関連して、リファレンスとサンプルデモも更新しました。
Note 38-03 で 追加したはずの CTRDG_GetPhiClock 関数が、実際は追加されていませんでしたので、これを追加しました。
ビルド変数 MAKELCF_FORMAT の定義を変更し、アプリケーション側のMakefile などにおいて独自の設定値があればそちらを優先するようにしました。
また、$NitroSDK/docs/SDKRules/Rule-Defines.html に ビルド変数 MAKELCF_FORMAT や MAKELCF_FLAGS などの説明を追加しました。
FS_LoadOverlay 関数のリファレンスにサンプルのコード例を1点追加しました。
GX_SetVCount 関数を以下のような方法で使用すると LCD に悪影響を及ぼす危険性があるため、そのような使用ができないよう関数内に制限を加えました。
2画面3D を使用し、2画面に別々のフォグを設定している際に負荷の高い処理を行うとフォグの設定が上画面と下画面でずれてしまうという不具合があり、$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D サンプルデモにフォグの設定とその対処コードを追加しました。
デバッガ環境で起動した際の実行制御が可能になるよう $NitroSDK/bin/ARM9-TS/ROM/mb_child.srl を更新しました。
擬似マルチブート子機から複数の GGID を検索したい場合など、ビーコン判定方法をコールバックとして任意に指定できるよう MB_FakeSetCompareGGIDCallback 関数を追加しました。
MI_SetMainMemoryPriority 関数のリファレンスに注意書きを追記しました。
ROM などのデバイスを制御するユーティリティとして MIDevice 構造体と MICache 構造体を新設し、それらを操作する関数群を追加しました。
MICAutoParam 構造体のリファレンスにバッファループ使用時の注意を追記しました。
mic-2 サンプルデモの実行結果を WAV ファイルに保存する sampling.bat スクリプトの記述内容が古いものであったため、loadrun.exe ツールを使用して正常に動作するよう修正しました。
以下の行列関数の内部実装を整理し、関数実体を GX ライブラリから MTX ライブラリへ移動しました。
関数仕様に変更はありません。
OS_ResetSystem 関数を呼び出しているスレッドのスタックがリセット時に ROM をロードする領域に存在する場合、そのスタックが破壊されてしまうという不具合があり、これを修正しました。
なおメインスレッドのスタックは DTCM 上にあるためスタックの位置を変更せずにメインスレッドから OS_ResetSystem 関数を呼び出している場合はこの不具合は発生しません。
以下の書式文字列出力関数群を追加しました。
makelcf SPECFILE の SearchSymbol 文において、複数のパラメータを指定すると makelcf コマンドが不正な LCF を出力する不具合がありました。
makelcf コマンドおよび標準の LCF テンプレートを修正し、複数のパラメータ記述に対応しました。
Note 39-18 で仮対応されていた 2Gbit ROM が正式対応となりました。
MP 通信を使用して親機から子機へファイルシステムを提供する WFS ライブラリをテスト公開しました。
これは従来 $NitroSDK/build/demos/wirelss_shared/wfs に収録されていたサンプルモジュールをライブラリ化したものです。
現在、テスト公開のため以下の既知の問題があります。
WM_ERRCODE_OVER_MAX_ENTRY の発生条件に関する説明を以下のファイルに追記しました。
これまで、WM_StartMPEx 関数で設定した ignoreFatalErrorMode などの設定値は WM_EndMP 関数で MP モードを抜けても保持されており、次に WM_StartMP 関数を呼び出すと、前回の設定が引き継がれていました。
このため、MB_EndToIdle 関数を使用しつつ、WM_StartMP 関数で引き続き MP 通信を開始した場合、MB ライブラリが内部的に設定している設定値である ignoreFatalErrorMode が TRUE となっていました。
そこで、この問題が発生しないよう、WM_StartMPEx 関数の引数で設定する MP の各種設定値は、次の WM_StartMP 関数の呼び出し時に引き継がないように変更しました。
WM_StartMP 関数の呼び出し時のデフォルトの設定値を変更したい場合は、WM_SetMPParameter 関数で明示的に設定値を変更するようにしてください。
なお、これらの MP の各種設定値は WM_Initialize 関数や WM_Enable 関数を呼び出した時点で初期化されます。
WM_StartMPEx 関数において、mpFreq が連続転送モードを示す 0 であった場合は、fixFreqMode の指定を無視するように変更しました。
Wii が MP 親機である場合に電波環境によらず MP ライフタイム切れで通信が切断されてしまうことがあり、これを修正しました。
Wii のネットワーク機能に関する開発キットである RevoEX に収録されている mpdldemo/mpdlntr2rvl デモが配信する子機プログラム wmPadRead-child を追加しました。
ありません。
(2007/02/15)
ライブラリおよびサンプルデモのソースコード全体で、インデントや改行に関する構文上の書式を統一しました。
$NitroSDK/data 以下の picto chat 及び wireless 関連のアイコンを更新しました。
ありません。
(2007/01/22)
ENV_STRING(X), ENV_BINARY(X) において必要なキャスト処理が行われていなかったため、これを修正しました。
また、ライブラリの関数内に不必要なデバッグ出力がありましたので、これを修正しました。
逆正弦、逆余弦を求める関数として FX_AsinIdx 関数および FX_AcosIdx 関数を追加しました。
GXBg23Control256x16Pltt 構造体から必要のない reserved 領域を削除した新しい構造体 GXBg23Control256x16Affine を追加しました。
この修正に伴い、G2*_GetBG2Control256x16Pltt、G2*_SetBG2Control256x16Pltt に変わる関数として、G2*_GetBG2Control256x16Affine、G2*_SetBG2Control256x16Affine 関数を追加しました。
GX_SetVCount 関数のリファレンスに注意書きを追記し、それに伴って $NitroSDK/build/demos/gx/UnitTours/VCount デモを削除しました。
MB_Init 関数でライブラリを初期化した後に MB_StartParent 関数などを呼び出さずそのまま MB_End 関数を呼び出した場合にライブラリ内部で強制停止してしまう不具合があり、この問題を修正しました。
DS ダウンロードプレイの子機プログラムとして mb_child_simple.srl を使用した際に再起動後のプログラムが本体実機と異なる挙動をする場合があり、この不具合を修正しました。
IRQ ハンドラ内でスレッドの切り替えが発生した際に、新しく実行状態になるスレッドのレジスタの1つが保存されているコンテキストから正しく戻されない不具合がありました。これを修正しました。
$NitroSDK/docs/TechnicalNotes/AboutExtendedLanguage.pdf に拡張言語対応アプリケーションの作成に関するドキュメントを追加しました。
LCD の off 期間が稀に仕様上不正な値(100ms 以下)になってしまうことがあり、これを修正しました。
makebanner のリファレンスマニュアルに中国、韓国向けアプリケーションのための説明を追加しました。
makelcf ツールで StackSize パラメータを省略した際のデフォルト IRQ スタックサイズを、従来の 1024 バイトから 2048 バイトへ変更しました。
ありません。
(2006/11/27)
DMA 転送中にカードを抜くと画像が乱れる場合がありましたのでこれを修正しました。
今まではカード抜け検出は意図せず、すべてをカード割り込みによってチェックしていましたが、これからは ROM ヘッダの「カード割り込みによる抜け検出禁止フラグ」をみてカード割り込みによってチェックするのか、カードの ROM-ID を見てチェックするのかを判断してカード抜けを検出するように変更しました。
また、今回の不具合は「カード割り込みによる抜け検出禁止フラグ」を意図的に立てた場合のみ発生していました。
プリコンパイルヘッダを使用せずに $NitroSDK/include/nitro/cp/divider.h をインクルードした場合、インクルード順によってコンパイルエラーが発生することがありましたので、これを修正しました。
NITRO-SDK パッケージのビルドに使用する CodeWarrior のバージョンを 2.0SP1 に変更しました。
IDE の言語設定において Enums Always Int の項目にチェックを入れずにコンパイルした場合、enum を int 型と異なるサイズになり、構造体などのサイズが変わってしまう可能性があるため enum が常に int サイズで定義されるように変更しました。
G3*_Vtx10 関数のリファレンスにおいて「説明」の記述に誤りがありましたので、これを修正しました。
MB_ReadSegment 関数をバッファサイズに MB_SEGMENT_BUFFER_MIN を指定し DS ダウンロードプレイを実行している最中に本体の蓋が閉じられカードが抜かれると MB ライブラリの中で強制停止してしまうという不具合があり、この問題を修正しました。
MB_FakeSetVerboseScanCallback 関数が追加され、MB_FakeStartScan 関数を使用してマルチブート親機のビーコンをスキャンする際に、受信したすべての生のビーコンを通知可能になりました。
この関数を使用することで、マルチブートではない親機のビーコンを同時に取得することが可能となります。
OSOwnerInfo 構造体のメンバ nickName, comment について、終端コード用に 2byte ずつ領域を確保するようにしました。
また OS_GetOwnerInfo 関数において、終端コードを入れるよう修正しました。
OS_Init 関数実行後常に V カウント値が一定になるようにウェイト処理を追加しました。
OS_VSNPrintf 関数にバイト列出力機能を追加した OS_VSNPrintfEx 関数及びそれを呼び出す OS_TPrintfEx関数、OS_TVPrintfEx 関数を追加しました。
拡張言語コードとして韓国語を追加しました。
また、韓国版アプリを作成するサンプルとして $NitroSDK/build/demos/os/forKorea-1 を追加しました。
Note 36-13 の修正によって、ストリーム再生中にカードが抜けた場合に、本体が閉じられている状態でも電源が OFF されないことがあるという不具合があり、これを修正しました。
SND_FlushCommand 関数がスレッドセーフになっていなかった問題がありましたが、これを修正しました。
STD_CopyLString 関数および STD_CopyLStringZeroFill 関数の返す値が正しくない不具合がありましたので、これを修正しました。
STD_TSScanf 関数などの文字列走査関数群の対応書式として文字クラスを追加しました。
bash の仕様変更にともない、$NitroSDK/tools/bin 以下の bash スクリプトの改行コードを CRLF から LF に変更しました。
Reject 文の設定パラメータの有効範囲についての記述を追加しました。
$NitroSDK/build/demos/wireless_shared 以下のサンプルライブラリ wh に以下の修正を加えました。
ありません。
(2006/08/28)
製品実機以外の環境において CARD_GetRomHeader 関数が正しい情報を取得できないという記述を関数リファレンスに追記しました。
$NitroSDK/build/demos/gx/UnitTours/AntiAlias サンプルデモにおいてアンチエイリアス ON/OFF の表示が、初期状態のみ誤った表示をしてしまっているという不具合がありましたので、これを修正しました。
関数コストを計測する際に使用するバッファが一杯まで使用されたかを調べるために、OS_CheckFunctionCostBuffer 関数, OS_CheckStatisticsBuffer 関数を追加しました。
ワイヤレス通信中でカード抜け発生時にごくまれにバックライトが OFF になってしまう場合があり、これを修正しました。
$NitroSDK/build/demo/wireless_shared の各サンプルライブラリに以下の修正を加えました。
ありません。
(2006/08/17)
ワイヤレス通信を実行中に本体が閉じられている状態でカード抜けが発生すると電源が正しく OFF されない場合があり、この不具合を修正しました。
割り込み処理内で CP_RestoreContext 関数を使用して除算器の状態を復元した際に、割り込み処理の完了までに除算器の状態復元が完了しない場合がありました。
この不具合を修正する為に、CP_RestoreContext 関数内に必要なウェイト処理を追加しました。
これまで割り込み内での CP の使用についての注意事項が CP_SetDiv 関数, CP_SetSqrt 関数, CP_RestoreContext 関数のリファレンス内にしか記述されていませんでしたので、CP の概要ページに他の CP 関連のリファレンスに割り込み内での使用についての注意とサンプルコードを追加しました。
また、除算器を内部で使用している関数のリファレンスすべてからこの注意事項へのリンクを追加しました。
電源投入時以外にソフトリセット後にもカートリッジの認識を行っていたため、カートリッジが挿入されていない状態で電源を入れた後カートリッジを挿入してソフトリセットするとそのカートリッジを認識してしまうという不具合があり、これを修正しました。
指定したスレッドを直接休止状態に遷移させることができる OS_SleepThreadDirect 関数を追加しました。
OS_RescheduleThread 関数によるスレッド切り替え処理が割り込みを禁止した状態で実行されるよう修正しました。
プログラム起動時、常に Vカウント値の初期値が一定になるようにウェイト処理を追加しました。
PRC の SuperFine アルゴリズムで、除算器を割り込み禁止にせずに使用している部分がありましたので、これを修正しました。
実際に格納された変換後の文字数と同様に、実際の変換された変換元の文字数も取得できるよう関数仕様を変更しました。
WBT_RegisterBlock 関数に NULL バッファを指定して WBT_CMD_PREPARE_SEND_DATA 通知を利用する場合に、完了時の WBT_CMD_REQ_GET_BLOCK_DONE 通知が発生しないという不具合があり、これを修正しました。
$NitroSDK/build/demos/wbt/wbt-1 サンプルデモにおいて切断と接続を繰り返して2回以上同じモードを選択した場合に接続状況を正常に管理できなくなるという不具合があり、これを修正しました。
WM_SetWEPKey/Ex 関数において、wepMode が WM_WEPMODE_NO の場合に wepkey に NULL を入れると正常に動作しない不具合がありましたので、これを修正しました。
状態が親機から子機に遷移する場合などに wepMode がリセットされないことがありましたので、これを修正しました。
接続を試みた親機の wepMode が子機側に設定される不具合がありましたが、子機側で呼ばれた WM_SetWEPKey/Ex 関数の値を反映されるように修正しました。
$NitroSDK/build/demo/wireless_shared 以下のサンプルライブラリ wh に以下の修正を加えました。
ありません。
(2006/07/25)
本体が閉じられている状態でカード抜けが発生した場合でも、電源 OFF されないことがありました。
この不具合を修正しました。
lcf テンプレートファイルによる ITCM/DTCM の使用領域のオーバーフローチェックにおいて、ITCM/DTCM 上にオーバーレイ領域を設定し、オーバーレイにより使用領域が多重化しているにも関わらず、多重化していないとみなして使用領域を計算していました。
このため領域に余裕があるにも関わらずエラーと判定されるケースがありました。
現状では lcf テンプレート上でオーバーレイ動作を加味した ITCM/DTCM のサイズのチェック処理をうまく実装できないため、使用領域のチェックにおいてはオーバーレイ領域を計算対象外としています。
このため ITCM/DTCM 上のオーバーレイ領域のサイズの管理はアプリケーション作成される方が注意する必要があります。
具体的にはダミー変数を ITCM/DTCM 領域の最後に置き、その変数のアドレスが領域をはみ出ていないかをチェックします。
MATHCompareFunc のリファレンスにおいて、「返り値」の記述が実際の動作とは逆の説明になっていましたので修正しました。
Note 39-05 の変更に伴って MATH_QSortStackSize 関数が 0 以下を返さないように変更しました。
$NitroSDK/build/demos/mb/multiboot-PowerSave サンプルの中で、実際には MB_SetPowerSaveMode 関数を呼び出していませんでしたので、これを修正しました。
MB ライブラリ内部のワイヤレス制御に使用するライフタイムのデフォルト値を、WM ライブラリと同じ設定になるよう変更しました。
文字コード変換関数に以下の修正を行いました。
VIB ライブラリに以下のような変更を加えました。
$NitroSDK/build/demo/wireless_shared/wh の WH サンプルモジュールに WH_SetSsid 関数を追加しました。
WM_EndParent および WM_Reset 関数で親機を終了する場合に、終了処理での子機切断の直後に新規の子機が接続してくる場合がありましたが、この場合に接続してきた子機を自動的に切断するように変更しました。
この際には子機側に WM_DISCONNECT_REASON_NO_ENTRY という切断要因が通知されます。
ありません。
(2006/07/07)
プログラム起動直後のわずかなタイミングでカードが抜けた場合に ARM7 側でのカード抜け自動検出が正しく発生しないことがあり、これを修正しました。
AGB バックアップアクセス関数のリファレンスに IS-NITRO-DEBUGGER 1.66 以前のバージョンでは AGB バックアップデバイスに正常にアクセスできない旨を追記しました。
以下の DS 用 AGB カートリッジバックアップアクセス解説ドキュメントにおいていくつかの誤記を修正しました。
$NitroSDK/docs/TechnicalNotes/AboutAGBBackupforDS.pdf
make システムにおいて使用される共通定義ファイル commondefs.cctype.CW において CodeWarrior for NINTENDO DS の Version 1.0.2 以前の古いバージョンのもののサポートを停止しました。
これより Version 1.2 以降のコンパイラがサポート対象となります。
ソートするデータの個数を 0 か 1 にした場合、正常に動作しない不具合があり、これを修正しました。
MI_CompressLZ関数およびMI_CompressLZFast関数での圧縮の際、
圧縮後のデータが圧縮前よりも大きくなる場合圧縮に失敗しますが、
この時に、圧縮先として用意されたバッファに対して1byteの
オーバーアクセスが発生する事がありました。
この不具合は修正されました。
エンディアン変換の関数に 8bit 版を追加しました。
これらはソースコードの視認性を統一するために用意され、実際には何の変換も行いません。
例外ハンドラが設定される条件に誤りがあり、loadrun でプログラムを実行した場合にユーザ指定の例外ハンドラが呼ばれなくなる不具合がありました。
これを正しい条件に修正をしました。
関数コスト計測に関して、__PROFILE_ENTRY 関数と __PROFILE_EXIT 関数で関数入出記録を保存するときに割り込みがかかって別のコスト計測の記録を取るという状況下で、正確なコスト計測が出来なくなる場合がありましたので、os_functioncost.c の該当箇所を割り込み禁止にしてこの不具合を回避しました。
Note 36-13 の修正の際、PM_ForceToPowerOffAsync 関数が割り込み禁止中に呼ぶことができないという問題があったため、LCD OFF 時にカードが抜けた場合に、本体が閉じられている状態でも電源 OFF されないという不具合が発生していました。
これを修正しました。
PM_GoSleepMode 関数のリファレンスにおいて、ガイドラインを考慮しない説明の記述があったためこれを修正しました。
復帰要因に RTC アラームを含めずにスリープモードに移行するとスリープからの復帰後にそれ以降の RTC アラーム割り込みが効かなくなることがありました。
この不具合を修正しました。
STD_CopyLString 関数のリファレンスに誤りがありましたのでこれを修正しました。
STD_CopyLString 関数が 一般的な strlcpy 関数とは違った仕様で実装されていたため、strlcpy 関数と同じ動作となるように変更を行いました。
この修正に伴い、関数の返り値がコピー先のポインタを示す char 型のポインタからコピー元の文字列長を返す int 型の値へ変更されました。
また、strlcpy 関数とは異なる仕様で実装されていた旧 STD_CopyLString 関数を、返り値を STD_CopyLString 関数と同じくコピー元の文字列長を返す int 型の値に変更して、STD_CopyLStringZeroFill 関数として追加しました。
この2つの関数の違いとしては、STD_CopyLStringZeroFill 関数はコピーサイズがコピー元より大きかった場合、差分の箇所を NULL で埋めるという処理になっている点になります。
STD ライブラリに ShiftJIS と Unicode の文字列の変換を行う関数を追加しました。
また、使用方法を示すデモを、$NitroSDK/build/demos/std/unicode-1 に追加しました。
CodeWarrior 2.x 以降において、リンク処理を行なうときに、シンボルの検索対象となるオーバーレイグループを指定することができるようになりました。
この機能をサポートするために lsf ファイルの書式を拡張し、SearchSymbol コマンドをサポートしました。
またこれに合わせて、makelcf コマンド、そして lcf テンプレートファイルもそれぞれ修正しました。
詳しくは makelcf のマニュアルをご参照ください。
この変更を以て、CodeWarrior2.0 に正式対応しました。
compstatic ツールのリファレンスにおいて -f オプションに関する記述を追記しました。
新仕様の 1Gbit/2Gbit ROM のサポートのために ROM フォーマットが一部変更され、1Gbit 以上のサイズの ROM イメージにおいて最上位の一定サイズの領域がシステム予約となりました。
NITRO-SDK 3.2 PR 以降では、この新仕様に対応した ROMフォーマットでの出力が makerom のデフォルト設定となっています。
NITRO-SDK 3.2 PR 以前の古いフォーマットで ROM イメージを出力したい場合は makerom のオプションに -V1 を追加してください。
makerom ツールの動作を指定するための rsf ファイルにおいて RomSize と RomSpeedType の設定の組み合わせが実際に ROM 化可能であるかどうかを判定するための処理を追加しました。
RomSpeedType が MROM の場合は RomSize が 512Mbit 以下である必要があります。
また RomSpeedType が 1TROM である場合は RomSize が 128Mbit 以上でなければなりません。
WM サンプルデモに以下の修正を加えました。
Note 39-23 の変更に伴って、WM_EndDataSharing 関数内のステートチェックを削除しました。
Wii がMP親機である場合に WM_GetLinkLevel 関数で取得できるリンクレベル値を調整しました。
$NitroSDK/build/demo/wireless_shared 以下のサンプルライブラリ wh, wc では WM_EndDataSharing 関数を呼び出していなかったため wc, wh の各 Reset 関数内に WM_EndDataSharing 関数を呼び出す処理を追加しました。
WM_Init 関数を実行中に別スレッドや割り込みハンドラから WM ライブラリの任意の関数を呼び出すと、初期化処理が完了していないにも関わらず初期化完了済みと判定され、その結果意図しない不正な動作を行う可能性がありました。
また、WM_Finish 関数にも同様の状態管理に関する不具合がありました。
これらの不具合を修正しました。
WM の初期化関数内でのポートコールバックの初期化に不具合があり、不要な警告が生成されていましたので、これを修正しました。
接続と切断を高頻度で繰り返すと、まれに WM の内部状態が不正な状態になることがありましたが、これを修正しました。
ありません。
(2006/05/02)
ROM からの DMA 転送を行う際に転送先バッファがキャッシュライン 32BYTE 境界に整合していないとバッファに隣接する変数がキャッシュ操作の影響を受ける場合がありましたが、これを修正しました。
AGB カートリッジ上に搭載されたバックアップデバイスへのアクセスを行うための一連の API を CTRDG ライブラリに追加しました。
カートリッジの PHI 端子から出力されるクロックの設定と設定値の取得を行う CTRDG_SetPhiClock 関数, CTRDG_GetPhiClock 関数を用意しました。
これまで同様の関数が MI_SetPhiClock 関数, MI_GetPhiClock 関数となっていましたがカテゴリの見直しを行って CTRDG_ に移動しました。
また内部の動作も、CTRDG_SetPhiClock 関数では、ARM7, ARM9 の両クロックを設定するようにしました。
これまでは ARM9 しか変更しておらず、カートリッジのアクセス権が ARM7 に移ったときにクロック出力のパターンが変わってしまっていました。
取得関数である CTRDG_GetPhiClock 関数の動作は MI_GetPhiClock 関数から変わっていません。
CARD_SetPulledOutCallback 関数で設定したコールバックが FALSE を返し、かつ CARD_TerminateForPulledOut 関数が呼び出されるまでの期間に FS_OpenFile 関数などの ROM ファイルアクセスを実行すると処理が完了しなくなってしまう不具合があり、これを修正しました。
なお、FS_LoadTable 関数でファイルテーブルをメモリにロードしている場合はこの不具合は発生しません。
FX_Mul 関数で桁あふれが発生した場合、マクロ SDK_WARNING でメッセージを表示するように変更しました。
また、関数リファレンスにも追記しました。
関数に与える値が一定値以上の場合に正しい結果が得られない不具合がありましたので、一定値以上の場合、マクロ SDK_WARNING でメッセージを表示するように変更しました。
また、関数リファレンスにも追記を行いました。
G2_SetBlendAlpha 関数のリファレンスに、第1対象面にはバックドロップ面を指定できない旨を追記しました。
MATH_QSort 関数でソートをおこなう際に、比較関数として与える関数の型である MATHCompareFunc のリファレンスに2つの比較要素が等しい場合は 0 を返す必要がある旨を追記しました。
Note 35-04 で修正された LZ 圧縮時にオーバーアクセスが発生する不具合の修正が LZ 圧縮関数の低速版 MI_CompressLZ 関数に反映されていませんでした。
この不具合を修正しました。
OS_GetConsoleType 関数の返り値が、関数リファレンスの記述と異なる値を返す可能性がありましたので、これを修正しました。
$NitroSDK/build/demos/os/exceptionDisplay-2 サンプルデモにおいて、CW2.0 を使用することにより、必要な関数がデッドストリップされてしまう問題があったため、明示的にデッドストリップを行わないように修正しました。
デモ用の図形辞書データで「げ」の書き順が間違っていましたので、これを修正しました。
・CodeWarrior 2.0 の仕様に暫定的に対応しました。ただしこれにともなった変更は現状のアプリケーションには影響はありません。
次回リリース時には正式対応となる予定です。
(2006/04/11)
CARD ライブラリが 8Mb FLASH バックアップデバイスに対応し、CARD_BACKUP_TYPE_FLASH_8MBITS を CARDBackupType 列挙型に追加しました。
関連して、リファレンスとサンプルデモも更新しました。
今までは .itcm/.dtcm/.wram セクションにおいて .bss セクションの指定をしていなかったため、初期値を持たない .bss セクションに置かれるものが
.data セクションに置かれてしまっていました。
$NitroSDK/build/tools/makelcf、$NitroSDK/include/nitro/section.h の修正及び、$NitroSDK/include/nitro/specfiles、$NitroSDK/build/components/ichneumon 以下の.template を修正し、.itcm/.dtcm/.wram に .bss セクションを追加しました。
sed コマンドのバージョンにより NITRO-SDK でビルドエラーが発生する場合がありましたので、これを修正しました。
MTX_Copy* 関数についての説明を関数リファレンスの FX カテゴリに追加しました。
以下の関数のリファレンスが追加されています。
ジオメトリコマンドの未定義コマンドである 0xFF をダミーコマンド G3OP_DUMMY_COMMAND として追加しました。
環境マップを使用した場合、各ソースに相当するコマンドのサイクル数が増えることが判明しました。
これについて関数リファレンスのジオメトリコマンドサイクル一覧に追記しました。
リトルエンディアン・ビッグエンディアンを考慮してメモリを読み書きするための関数群を追加しました。
ヒープのハンドルの指定が OS_CURRENT_HEAP_HANDLE だった場合にエラーを返される不具合がありました。
これを修正しました。
関数リファレンスの OS のアリーナについての概要において、アリーナの管理とメモリ確保についての図の記述に間違いがあったためこれを修正し、説明文を追加しました。
関数呼び出しの中でスタックポインタが常に8バイトに整合するようスタック処理を調整しました。
Note 36-13 での仕様変更に不具合がありましたので、これを修正しました。
シーケンストラックのミュート時に、発音中の音に対する処理を選択できる SND_SetTrackMuteEx 関数を追加しました。
attachsign ツールのリファレンスにおいて認証コード取得に関する記述を変更しました。
photoshop で作成した ppm ファイル(NetPBMformats Plugin経由で)を ppmconv* で変換しようとすると、Cannot convert file "xxxx.ppm" とメッセージが出力され、変換できませんでした。
原因は、ファイルヘッダの解析処理の実装が ppm 仕様を完全にカバーしていなかったことによるものです。
上記の問題点を修正しました。
これにより今まで変換できなかった幾つかの ppm ファイルが変換できるようになります。
また修正前の ppmconv* ツールで正常に変換が出来ていた ppm ファイルに対して、この修正の影響はありません。
Note 36-15 で NITRO-SDK のすべてのサンプルデモのソースから削除した SVC_WaitVBlankIntr 関数が pulse_vib サンプルデモ内で使用されていたため、これを OS_WaitVBlankIntr 関数に変更しました。
また、振動カートリッジライブラリの制限に反するパラメータを入力してもサンプルが停止しないように変更しました。
ユーザが指定した子機台数 (WH_CHILD_MAX) が WM_NUM_MAX_CHILD より少なかった場合、WH_CHILD_MAX を超えて WM_GetSharedDataAddress 関数が呼ばれていたので、これを修正しました。
WM ライブラリの機能を総合的に使用するサンプルとして $NitroSDK/build/demos/wm/wireless-all サンプルデモを追加しました。
WM サンプルデモに以下の修正を加えました。
・AGB カートリッジ上に搭載されたバックアップデバイスへのアクセスを行うための一連の API を CTRDG ライブラリに追加しました。
しかし、今回追加された AGB バックアップアクセス関数は検証が完全ではないため動作は保障されていません。
次回リリース時には正式対応となる予定です。
・CodeWarrior 2.0 の仕様に暫定的に対応しました。ただしこれにともなった変更は現状のアプリケーションには影響はありません。
次回リリース時には正式対応となる予定です。
(2006/03/14)
従来は、カードとカートリッジのいずれか一方のバスを OS_Lock* 関数で長期間ロックし続けているとその間は もう一方のデバイスの抜け検出が実行できませんでしたが、これを実行できるように変更しました。
CARD_CheckPulledOut 関数を複数回呼ばれた場合に、コールバックが何度も呼ばれてしまうことのないように変更しました。 今後は、CARD_CheckPulledOut 関数での呼び出し及び、ARM7 の抜け検出を通じて一度しかコールバックが呼ばれないようになりました。
AGB カートリッジ領域への不意な書き込みアクセスを回避するため、CTRDG_Init 関数内でプロテクションリージョンの初期設定を変更するよう処理を追加しました。
カートリッジへ書き込みアクセスを行う場合は、カートリッジ情報を必ず確認した上で CTRDG_Enable 関数を呼び出す必要があります。
※なお、この機能に対応した IS-NITRO-DEBUGGER ver1.65 以降のデバッガでないと
OS_Printf 関数などのデバッグ文字列出力時に強制停止してしまうのでご注意ください。
カートリッジの抜き検出を ARM9 からただちに行う CTRDG_CheckPulledOut 関数を追加しました。
$NitroSDK/build/demos/gx/UnitTours/2D_CharBg_Direct サンプルデモで、 GX_LoadBG3Bmp 関数の前に G2_SetBG3ControlDCBmp 関数で正しく設定するよう修正しました。
G2_GetBG2ScrPtr 関数および G2_GetBG3ScrPtr 関数のリファレンスにおいてビットマップ BG の場合の記述に間違いがあったため、これを修正しました。
MBFakeScanCallbackFunc コールバックへ通知されるイベントに MB_FAKESCAN_PARENT_BEACON を追加しました。
この通知は MB 親機のビーコンを受信するたびに発生します。
関連して、サンプルデモの multiboot-Model と fake_child で MB_GetUserVolatData 関数を使用するよう処理を追加しました。
MB_ReadMultiBootParentBssDesc 関数内で本来指定するべきだった gameInfo の magicNumber メンバ, ver メンバが初期化されないままであったので、これを修正しました。
Note 20-08:での修正内容がクローンブートサンプルに適用されておらず、 子機ブート後に親機に再接続する際、一度でも親機への接続に失敗するとリトライができないという不具合があったため、これを修正しました。
以下の MB ライブラリ関連ドキュメントを更新しました。
$NitroSDK/docs/technicalNotes/AboutMultiBoot.pdf
マイクの自動サンプリングを行う際に、サンプリング結果を格納するバッファとして拡張メインメモリを指定することができない、 という制限がある事をリファレンスマニュアルに追記しました。ライブラリの動作には変更はありません。
PM_GAINAMP_DEFAULT マクロ内で使用している定数 PM_AMPGAIN_DEFAULT が実際には定義されていなかったため、 これを修正し PMAmpGain 列挙型に PM_AMPGAIN_DEFAULT を追加しました。
アプリケーション側で DS 本体の電源を OFF にする際、LCD OFF 状態で本体電源を OFF にすると、ごくまれに DS 本体が再起動してしまうことがありました。
そのため LCDを ON にした後で電源を OFF にするよう PM_ForceToPowerOff 関数及び PM_ForceToPowerOffAsync 関数の仕様を変更しました。
makerom において ROM 内部へ収録するファイルをワイルドカードによって指定した場合に
ファイルの収録順序がビルドに使用している PC のファイルシステムのエントリの順番に
依存する場合がありました。このため、同じアプリケーションをビルドしているにも
関わらず PC 毎にファイルの収録順序が変わってしまうという現象が発生しました。
これを修正し、makerom においてファイルを名前でソートした順で収録することにしました。
ニンテンドーDS 用オプションカートリッジである振動カートリッジを制御するライブラリとして、VIB ライブラリを新設しました。
$NitroSDK/build/demos/wireless_shared/wfs に収録されているWFS サンプルモジュールに以下の修正を行いました。
関数リファレンスにおいて、以下のコマンドが子機から子機へ直接発行できる旨の誤った記述があり、これを修正しました。
WBT ライブラリの関数リファレンスに「概要」の項目を追加しました。
Note 30-06で MP 通信中の子機が Null 応答を返さないように仕様を変更しましたが、
環境により、まれに動作を不安定にすることがありましたので、Note 30-06 での変更をキャンセルし、以前の仕様に戻しました。
また、子機の Null 応答を許す代わりに、親機は Null 応答を受け取った場合、子機が通信を失敗したとみなすように仕様を変更しました。
なお、WM_SetMPInterval 関数の機能が追加されていますので、Null 応答を返すように変更しても、子機側の過負荷問題は発生しません。
WMGameInfo 構造体の定義を変更しました。version フィールドは廃止され、magicNumber フィールドに名前を変更しました。
magicNumber フィールドは DS 用のビーコンであれば 0x0001 で固定です。
また、予約領域から1バイトを使用して ver フィールドを新設しました。
現バージョンでは ver フィールドは必ず 0 ですが、今後、WMGameInfo 構造体の形式が変更されると増加します。
ただし、将来的に下位互換は保たれますので、ver フィールドをチェックして動作を制限してはいけません。
これらの変更により、WMGameInfo.version を参照していたプログラムでは書き換えが必要となります。
また、gameNameCount_attribute フィールドは attribute フィールドに名前を変更しました。
旧名でも参照できますが、今後は新しいフィールド名を使用してください。
また、この変更作業にあわせて、全く使用されていないコンパイルスイッチの
WM_GAMEINFO_TYPE_OLD のサポートを終了しました。
スキャン結果のビーコンが、DSワイヤレスプレイ用親機のものかどうかを判別するために WM_IsValidGameBeacon 関数と、WM_IsValidGameInfo 関数を追加しました。 内部的に WMGameInfo.magicNumber が正しいかどうかを判定します。 また、WM の各デモをこの関数を使用するように変更しました。
MP 通信のオプションである minPollBmpMode を有効にした場合、一定時間後に通信が途切れて MP ライフタイム切れになってしまう不具合がありましたが、これを修正しました。
minPollBmpMode を使用して特殊な通信を行っているタイトルのみこの不具合の影響を受けます。
以下の WM ライブラリ関連ドキュメントを更新しました。
$NitroSDK/docs/technicalNotes/AboutWirelessManager.pdf
引数に()がついていなかったマクロを正しい記述に修正しました。
()の存在の有無で動作が変わるような引数を与えていない限りこの変更による影響はありません。
修正したマクロは以下です。
ありません。
(2006/01/16)
CARD ライブラリの関数リファレンスに「概要」の項目を追加しました。
packnlf ツールのリファレンスマニュアルを追加しました。
ライブラリおよびサンプルデモのソースコード全体で、インデントや改行に関する構文上の書式を統一しました。
MI_CompressLZFast 関数で LZ 圧縮をする際に、メモリのオーバーアクセスを起こす可能性がありました。
また、NITRO-SDK 3.0 RC2 以降の ntrcomp.exe にも同様の不具合があり、異常終了または圧縮データサイズが僅かに増加する可能性がありました。
これらの不具合を修正しました。
OS_ResetSystem 関数の内部でカートリッジへアクセスすることがあり、そのためカートリッジバスがロックされたままで呼び出された場合にライブラリ内部で無限ループしてしまう問題があり、これを修正しました。
この不具合は NITRO-SDK 3.0 RC3 でのみ発生します。
Note 32-23 の更新に伴い、起動画面が文字化けするという不具合がありましたのでこれを修正しました。
デモ用の図形辞書データで「け」の書き順が間違っておりましたので、図形辞書データの「け」を修正しました。
$NitroSDK/build/demo/wireless_shared 以下のサンプルライブラリ wh, wfs, wc のデバッグ出力において16進数の前には "0x" をつけて表示するようにしました。
環境により MP 通信に失敗しやすくなることがありましたので、通信の内部パラメータに補正を入れて改善しました。
ありません。
(2005/12/26)
ビット演算を行う以下のインライン関数群を追加しました。
MB_ReadSegment関数で小さなバッファサイズを指定してアーカイブから動的に配信データをロードする際にブロック転送が進捗しなくなってしまう場合があり、 この問題を修正しました。
MBライブラリのブロック転送の実装において、 親機側でWM_ERRCODE_SEND_FAILEDがしばしば発生しうるような悪い通信環境では転送効率が大きく低下することがあり、これを修正しました。
ニンテンドーDSのCPUであるARM946E-Sはpld命令を実行しても何も行わない仕様のため、 この機能を使用しているDC_TouchRange関数のリファレンスにその旨を記述しました。
OS_CreateThread 関数で初期化するスレッド構造体の初期値によっては、 スレッド実行時にアクセス例外のエラーになってしまうという不具合がありましたが、 これを修正しました。
$NitroSDK/build/demos/wbt/wbt-1 サンプルデモで、 サンプルソース内のマクロスイッチ NOT_USE_ALLOCを有効にするとコンパイルエラーにより正しくビルドできなかったため、これを修正しました。
各コマンドの完了を通知するユーザコールバック内で引数のresultメンバの値が不定であったため、 これを修正しました。
3.0RC2 で追加された MP 通信の各種パラメータの設定が正常に機能していませんでしたので、これを修正しました。
WH を使用している SDK の全てのデモは$NitroSDK/build/demos/wireless_shared/wh/wh_config.hを直接参照し設定を共有していまし
たが、各デモで個別に設定を持つようになりました。
この変更によって、wh_config.hの場所が
$NitroSDK/build/demos/wireless_shared/wh/default/ に変更になっています。
DS本体のロットによっては、通信切断直後のわずかなタイミングでまれに内部動作に異常が生じるハードウェアがあり、 その対策をWMライブラリ内部で行うように処理を追加しました。
ありません。
(2005/12/05)
小さなサイズ指定でのバックアップ書き込みをワイヤレス通信中に実行すると、成功した場合でもまれにCARD_RESULT_TIMEOUTを返す場合があり、 この問題を修正しました。
AGBカートリッジへのアクセス許可状態を制御するための以下の関数群を追加しました。
SDK のバージョンを数値情報に変換するマクロ SDK_VERSION_NUMBER を追加しました。
また現在の SDK バージョンを表す定数 SDK_CURRENT_VERSION_NUMBER を追加しました。
関数のインライン指定用マクロシンボルとして SDK_INLINE および SDK_DECL_INLINE を追加しました。
これにより、インライン指定の形式を一括して切り替え可能になりました。
これらのマクロの値を変更した場合は NITRO-SDK 全体を再ビルドする必要があります。
ただし、インライン関数の実体化に関する不具合が修正されたバージョンのコンパイラを使用している環境であり、さらにこの不具合を回避するために inline を static inline にしていた関数の場合に限り、これらのマクロを static inline から inline に変更することによってコードサイズを削減することができます。
これらのマクロを変更することは基本的に無保証となりますのでアプリケーション側での判断において行ってください。
makebanner ツールで使用する bsf ファイル内の記述において、ゲームタイトル名または説明文の文字列の先頭部分が指定可能な言語パラメータのいずれかと一致する場合にこの文字列内容をバナーファイルへ含めないという不具合があり、これを修正しました。
$NitroSDK/tools/bin/ntexconv.exe を現在リリースされている最新の TXLib パッケージ内の netconv.exe に更新しました。
SDK ではアイコンイメージ作成時にのみ ntexconv を使用しているので動作は変わりませんが、テクスチャ作成を行う場合でも SDK 内の ntexconv を使用することができるようになりました。
.nlf ファイルが参照している全てのファイル指定を相対パス化し、それら全てをまとめ ZIP ファイルとして出力するツール packnlf を追加しました。
このツールの追加は NITRO-SDK 3.0 RC で入っていましたが、changelog から漏れていました。
$NitroSDK/build/demos/wireless_shared/mbp に収録されている MBP サンプルモジュールで、以下の不具合を修正しました。
MB_FakeInit関数を呼び出す際に必要となるバッファサイズをMB_FAKE_WORK_SIZEとして定義しました。 この値は、従来から存在するMB_FakeGetWorkSize関数で取得されるサイズと等価な定数として定義されます。
MB 親機が送信する初回のビーコンにおいて WM_ATTR_FLAG_MB フラグは無効のまま WM_ATTR_FLAG_ENTRY フラグのみ有効となっていたため、同一 GGID をワイヤレスプレイとダウンロードプレイで共用するアプリケーションがこれを誤検出しうるという不具合があり、これを修正しました。
9KB程度のワークバッファを必要とする代わりに、これまでも用意されていたMI_CompressLZ関数と比較して数倍高速にLZ圧縮をおこなうMI_CompressLZFast関数を追加しました。
OS_InitPrintServer 関数と OS_PrintServer 関数を OS ライブラリ内から自動的に呼び出すよう設定するビルドスイッチとして NITRO_ENABLE_ARM7_PRINT を追加しました。
このスイッチを指定しない場合は従来どおりの仕様となります。
このビルドスイッチはOSライブラリに対してのみ有効であり、設定を切り替える場合はOSライブラリを再ビルドする必要があります。
SVC_WaitVBlankIntr 関数は低優先度のスレッドにリソースを開放しない仕様であり、
使い方によっては問題が発生するため、SVC_WaitVBlankIntr 関数呼び出しが自動的に OS_WaitVBlankIntr 関数呼び出しに置換されるように変更しました。
但しこの置換はヘッダファイル内の define による置換ですので、再ビルドした際に初めて有効になる点にご注意下さい。
この変更の結果、実際にVブランク割り込み待ち動作へ入るまでにかかるオーバーヘッドがわずかに増加しました。
アプリケーションの挙動には殆ど影響ありませんが、どうしても従来通りのシステムコールを用いなければならない場合には、
環境変数 NITRO_SVC_WAITVBLANK_COMPATIBLE を定義する事で、今回の変更を無効にする事が出来ます。
但しこの場合はスレッドの問題は未解決のままになりますので、十分な検証を行って下さい。
また、「Note 32-18: (OS) Vブランク待ち関数の改良」において
SVC_WaitVBlankIntr 関数を弱シンボル化して別定義で上書き可能としたと報告しましたが、
今回の修正により弱シンボルである必要がなくなりましたので、これを元に戻しました。
NITRO-SDK の全てのサンプルデモのソースから OS_InitPrintServer, OS_PrintServer 関数を削除しました。
NITRO-SDK の全てのサンプルデモのソースから PXI_Init 関数を削除しました。
この変更によってデモの動作が変わることはありません。
NITRO-SDK の全てのサンプルデモのソースの SVC_WaitVBlankIntr 関数の呼び出し部分を OS_WaitVBlankIntr 関数に変更しました。
この変更によってデモの動作が変わることはありません。
拡張メインメモリアリーナの開始アドレスが、OS のアリーナ概要ページでは 0x23e0000 ( overlay がある場合はそれを考慮してさらに上位のアドレスとなります。以下同様) となっていますが lcf テンプレートの定義は 0x2400000 となっていました。
これを、OS概要ページにあわせるように 0x23e0000 としました。
$NitroSDK/build/demos/wireless_shared/wfs に収録されている WFS サンプルモジュールに以下の修正を行いました。
WFS サンプルモジュールを使用する以下のサンプルデモ内で子機が FS_ReadFile 関数を呼び出している箇所について、リード中の親機切断を検知できるよう処理を修正しました。
$NitroSDK/build/demos/gx/UnitTours/{2D_CharBg_3,Sub_CharBg_3} サンプルデモにおいて、縮小しすぎるとアサートで停止してしまう不都合を修正しました。
フレーム同期通信モードにおいて、各フレームの初回のMP通信の準備を開始するのはこれまで親機ではVアラームカウントが260、
子機では240と固定値となっていましたが、これを設定するWM_SetMPTiming関数を追加しました。
実装上の制限により、220〜262, 0〜190 の範囲内で設定する必要があります。
通信処理中は ARM7 が活発に活動するようになり、ARM9 でメインメモリアクセスのストールが多く発生するようになりますので、
通信タイミングを調整することによって
ARM9 の平均的な動作パフォーマンスが向上することがあります。
明示的に設定しなおさない場合は従来の設定値がデフォルトとして使用されます。
これまでは、MP通信の送信サイズは親機が通信前にWM_SetParentParameter関数で設定する
WMParentParam構造体内のparentMaxSizeおよびchildMaxSizeフィールドの値で固定となっていましたが、
これを通信処理中に変えられるように変更しました。
この親機送信サイズ、子機送信サイズはそれぞれWM_SetMPParentSize関数とWM_SetMPChildSize関数で設定できます。
親機と子機の送信サイズは、親機ではWM_StartParent関数の実行時にWMParentParam構造体のparentMaxSize、childMaxSizeの値で初期化され、
子機ではWM_StartConnect関数で接続した際にbeaconに乗っていた設定情報で初期化されます。
これらの値はWM_SetMPParentSize関数、WM_SetMPChildSize関数を使用して縮小することはできますが、初期値を超えることはできません。
また、子機側においては、親機送信サイズは設定する意味を持たず、また子機送信サイズの設定値は MP 通信を行うたびに親機の子機送信サイズの設定値で上書きされます。
親機の送信はこれまでもデータサイズが小さければ電波も短く送出されていましたので、設定しなおすメリットはあまりありません。
一方、子機側は常にchildMaxSizeで指定したバイト数分の電波を送出していましたので、必要なサイズに再設定することにより、
送信時間が減少して通信を安定化することができます。
なお、現在の実装ではこれらの関数で再設定した送信サイズよりも大きなサイズのデータがすでに
WM_SetMPDataToPort関数で送信予約されていた場合、
そのデータは送出されず送信キューに溜まり続けますので注意してください。
フレーム同期通信モードの2回目以降と連続通信モードでのMP通信において、
直前のMP通信との時間間隔を設定できるWM_SetMPInterval関数を追加しました。
親子独立にマイクロ秒単位で指定できます。
デフォルトでは、親機が1000us、子機が0us(間隔なし)となっています。
この値を調整することでスループットを向上させることができますが、
親機によるMP通信間隔が子機の受信処理時間より短くなってしまうと取りこぼしによって反対にスループットが低下します。
その場合、無駄な再送が発生することで電波の使用効率も悪くなりますので注意してください。
$NitroSDK/build/demos/wm/dataShare-Model サンプルデモで、接続対象の親機情報を表示する処理を親機リスト画面に追加しました。
$NitroSDK/build/demos/wm/dataShare-Model サンプルデモで起動時に文字出力画面が崩れることがあり、これを修正しました。
従来は再送も含めた1フレームあたりの最大MP通信回数は6回で固定でしたが、これを設定できるように変更しました。
WM_SetMPParameter関数でWMMPParam.maxFrequency を設定してください。
なお、WM_StartMPEx関数のfixFreqMode引数の処理は、maxFrequencyもmpFreq 引数の値に設定する、という動作に内部的に変更しています。
WM_GetLinkLevel 関数で取得できる受信強度レベルには、送信失敗時に補正がかかるようになっていますが、これまでは親子で補正のかかり方が異なり、同一条件下で親子の受信強度の表示が大きく異なる場合がありました。
これを解消するため、親機の送信失敗の検知基準を緩め、親子の受信強度レベルの振る舞いが近くなるように変更しました。
従来からWM_StartMP関数内部で行われていた各種の正当性判定(送受信サイズ設定値、送受信バッファサイズ、ならびに通信時間制限5600[us]の事前チェック)
を無視する特別なオプションを追加しました。
WM_StartMP関数を呼び出す前にWM_SetMPParameter関数でWMMPParam.ignoreSizePrecheckModeをTRUEに設定してください。
この機能とWM_SetMPParentSize関数、WM_SetMPChildSize関数を組み合わせることにより、
子機の接続台数などの条件によって柔軟に送信サイズを変更することが可能になります。
ただしその場合には、通信所要時間と送受信バッファサイズの制限を超えないようアプリケーション側で気をつけるようにしてください。
受信バッファサイズの足りない設定で親機がMP通信を開始しようとした場合には実行時のチェックでそれを検出してMP通信は行われず、
その状態が続くとMPライフタイムによるタイムアウトが発生するため、通信は切断されます。
無線ハードウェア内の特定のアドレス空間のバッファにアクセスするといくつかのイベントカウンタがクリアされるという想定外の動作をすることが報告されました。
この動作により、ソフトウェアで管理しているイベントカウンタに累積されるカウントが実際に発生したイベントカウントに満たない場合があります。
WM_GetWirelessCounter 関数により取得可能なイベントカウントの内いくつかは正確な値でない可能性がありますので、ご注意下さい。
また、影響を受ける可能性のあるイベントカウンタについてはリファレンスマニュアルに追記しました。
ありません。
(2005/11/07)
EEPROM デバイスをバックアップに使用している場合、工場出荷時に稀にハードウェア内部ステータスの初期値異常が生じることがあり、その対応処理を追加しました。
CARD_ReadRom 関数および CARD_ReadRomAsync 関数で読み込み処理が完了した際に、毎回その場でカード抜け検出を行うよう処理を追加しました。
これにより、抜け検出コールバック通知より先にアプリケーションが不正なデータを参照することは無くなりました。
CARD ライブラリが 4Mb FLASH バックアップデバイスに対応し、CARD_BACKUP_TYPE_FLASH_2MBITS を CARDBackupType 列挙型に追加しました。
関連して、リファレンスとサンプルデモも更新しました。
#pragma define_section のパラメータを
「 #pragma define_section DTCM ".dtcm",".dtcm",abs32,RWX 」
のようにコンマで区切って誤った記述をしてしまっていたため
「 #pragma define_section DTCM ".dtcm" abs32 RWX 」
のようにスペースで区切るように修正しました。
すでに上で挙げたような誤った記述方法をしている場合は、同じように修正してください。
XML 形式で書かれた ENV ライブラリ用リソースデータを C のソースファイル形式に変換するためのツール xml2env と
INIT 形式で書かれた ENV ライブラリ用リソースデータを C のソースファイル形式に変換するためのツール init2env を追加しました。
NITRO-SDK 3.0 PR 〜 3.0 PR4 パッケージでは、パッケージ作成時に使用するスクリプトに不備があり、 THUMB 版 ichneumon コンポーネントが正常に動作しないという問題がありました。
これを修正しました。
SDK パッケージのビルドに使用した CodeWarrior のバージョンを 1.2SP1 に変更しました。
また、$NitroSDK/include/nitro/version.h にビルドで使用した CodeWarrior コンパイラとリンカのビルド番号を記録するようにしました。
コンパイルターゲットについての説明を関数リファレンスの関連情報に追加しました。
ENV ライブラリのリファレンスを追加しました。
ENV_Init 関数の仕様を変更し、新たに ENV_AppendResourceSet 関数を追加しました。今までは ENV_Init 関数に ENVResource を引数として渡していましたが、今後は複数の ENVResource を登録できるようになりました。
G3BS_LoadMtx43 関数内で使用している ASSERT の条件パラメータが間違っているという不具合があり、これを修正しました。
$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D サンプルデモに以下の修正を行いました。
Note 29-02 で行った修正内容が完全でなく、同様の症状が再現する場合があったため、これを再び修正し、SwapBuffers コマンドやジオメトリエンジンに関する
説明をコメントとして追加しました。
MATH_QSort 関数に不具合があり、ソート後に昇順もしくは降順に正しく並んでいない値が発生する可能性がありました。
この不具合は修正されました。
ARM7 側で IRQ スタックサイズを 0又は負で指定していると WRAM 先頭位置を基準にして領域を決定しており、それを原因として ARM7 専用 WRAM アリーナの HI アドレス計算に誤りがありました。
正しくは WRAM の先頭部分を占めるプログラム領域の末尾を基準にすべきでした。
修正後は正しく計算されます。
但し、従来の mongoose 及び ichneumon ではスタック領域指定を正の値で定義していますので、修正前でも後でも全く動作の違いはありません。
通常のゲームアプリケーションでは SDK 付属の mongoose / ichneumon を使用しますので、この変更による影響はございません。
ヒープ中の使用メモリサイズを取得する OS_GetTotalOccupiedSize 関数を追加しました。
これまでもあった OS_GetTotalAllocSize 関数は、使用されているメモリブロックのデータ領域のサイズを合計していましたが、今回追加された OS_GetTotalOccupiedSize 関数はメモリブロックのヘッダ部分のサイズも加算しています。
FINALROM ビルド時、OS_PutString 関数は影響のないコードに置き換えられますが引数のデッドストリップが行なわれていませんでした。
これを修正して、この関数は何も行なわず、引数のデッドストリップがなされるようにしました。
コンパイル時に条件をチェックして、条件を満たされない場合はコンパイルエラーにするマクロ SDK_COMPILER_ASSERT を追加しました。
SVC_WaitVBlankIntr システムコールを用いて Vブランク割り込みを待つ場合に、この関数を呼び出したスレッドは休止状態にはならず、割り込み待ちの間は自身より低優先度のスレッドにリソースを開放しないという問題があります。
システムコールの内容修正は困難ですので、スレッドを休止状態にして Vブランク割り込みを待つ OS_WaitVBlankIntr 関数を代用関数として用意しました。
また、システムコールを呼び出す SVC_WaitVBlankIntr 関数を弱シンボルとし、別定義で上書きすることができるように修正しました。
DC および IC で始まるキャッシュ操作関数でメモリポインタを引数に取るものの中で、内部操作でその内容を変更しないものに関して const をつけるようにしました。
変更となったのは以下の関数です。
スタック溢れのチェック用の関数で、スタックの途中にチェックコードを設定する OS_SetThreadStackWarningOffset 関数およびOS_SetIrqStackWarningOffset 関数において、引数が0の時にスタックの最下位アドレスに設定していたオーバーフロー用のチェックコードを上書きしていました。
このためスタックチェックが正しく行なわれていませんでしたが、これを修正しました。
ROM イメージに、ツールコマンド buryarg で引数データを埋め込み、プログラムから OS_GetArgv 関数や OS_GetOpt 関数等で取得出来る仕組みがありますが、この引数データバッファをランタイムに切り替えることが出来るようになりました。
OS_SetArgumentBuffer 関数 / OS_GetArgumentBuffer 関数を参照してください。
また、引数データバッファのデータを作成するために文字列から変換する OS_ConvertToArguments 関数を用意しました。
OS_SecondsToTicks 関数や OS_TicksToSeconds 関数などの実時間とチック値の変換マクロを修正しました。
これまで、内部では符号付きの32ビット精度で演算をしていたため、少々大きめの引数を指定するとオーバーフローが発生し正しい値を返していませんでした。
修正内容は以下の通りです。
・これまでのマクロについて、内部演算は64ビットで行なうようにしました。
・明示的に内部演算を32ビットで行いたい場合のために、
OS_InitChina 関数で表示される中国版起動画面が更新されました。
あるスレッドが、スレッドキューに登録されたままで OS_DestroyThread 関数や OS_KillThread 関数等で終了したときスレッドキューからスレッドの情報を取り去るようにしました。
これは、OS_JoinThread 関数で別のスレッドの終了を待っているときに、あるスレッドが別のスレッドに終了させられた場合も含みます。
これまでは削除されたスレッドの情報がスレッドキューに残っていたため OS_WakeupThread 関数でスレッドキュー内のスレッドを一気に実行可能状態にしようとしたときにすでに削除されたスレッドまでも対象になっており、スレッドリストの状態に不具合が生じる場合がありました。
今回はこれが修正されました。
PRC のデモと一緒に使用するサンプルツールである pdic2c.pl が出力するソースファイルが古い形式でしたので、これを修正しました。
また、ヘッダファイルとソースファイルを別々のファイルに出力するオプションなども追加しました。
RTC から曜日情報を含んだデータを読む際には曜日は日付から計算して返すようにしました。
これまでは RTC 内部で保持している値をそのまま返していましたが、RTC で表現できるもっとも遅い時刻である2099年12月31日23時59分の境界を跨いだ後、RTC の値を設定しなおすまでは間違った曜日情報を返していました。
SND_CalcDecibel (及び SND_CalcDecibelSquare )関数で、引数に0を入れたとき、これまでは-723を返していましたが、-32768を返すように修正しました。
これまでは、ボリュームモジュレーションを使ったときに、プレイヤーのボリュームを0にしても、音が聞こえてしまうことがありました。
この問題は修正されました。
文字列操作に関連した API 群を扱うライブラリとして、STD ライブラリを新設しました。
STD ライブラリには以下の関数が含まれます。
本来は相手の WBT_GetBlock 関数完了時にのみ発生すべき WBT_CMD_REQ_GET_BLOCK_DONE システムコールバック通知が WBT_GetBlockInfo 関数でも同様に発生するという問題があり、これを発生させないよう修正しました。
この通知を使用していないアプリケーションでは問題ありません。
$NitroSDK/build/demos/wireless_shared/wfs に収録されている WFS サンプルモジュールに対して以下の修正を行いました。
WMTestTool.srl が Scan 時に、同一親機のチャンネル情報が更新されるようになりました。
WM_SetLifeTime 関数のリファレンスの記述に間違いがあり、これを修正しました。
フレームライフタイムのデフォルト値は「ライフタイム無し」と記述していましたが、正しくは「ビーコン間隔×5回分の時間」です。
ARM7 側のコンポーネントとして mongoose を使用した場合に、WM ライブラリの状態遷移を行う非同期処理中に ARM9 のメインメモリへのアクセスが著しく阻害されるという問題がありますが、mongoose コンポーネントを改良することでこの問題を改善しました。
問題は解決された訳ではなく改善されたに過ぎない、という点にご注意下さい。
WMPortRecvCallback に connectedAidBitmap フィールドを追加しました。現在接続中の AID のビットマップが格納されます。
WMStateCode に WM_STATECODE_PORT_INIT を追加し、WM_SetPortCallback 関数の呼び出し時に
このステートコードで port 受信コールバックを呼び出すように変更しました。
WMPortRecvCallback の myAid フィールドや connectedAidBitmap フィールドを使用した初期化処理を行うことを想定しています。
接続通知の一貫性を保つため、WM_STATECODE_PORT_INIT でのコールバック呼び出しも割り込み禁止状態で行われますので注意してください。
この変更により、Note 32-38 と同様に非互換が発生する可能性があります。
WM ライブラリに存在するテスト用 API が拡張されました。
これらのAPI はテスト目的の為に用いられますので、通常は使用する必要はありません。
また、この拡張によって通常使用時のWMライブラリの動作が変わることはありません。
但し、API の追加によって WMApiid 列挙型が拡張されておりますので、列挙の並び順に依存するプログラムには影響が出る可能性がありますのでご注意下さい。
親機が MP 通信を続けている最中に、子機が特定のタイミングで WM_EndMP 関数を呼び出すと、その後のワイヤレス通信機能が停止する不具合がありましたが、これを修正しました。
SDK の 3.0 以降で発生する不具合です。
ワイヤレス通信機能が停止すると、ワイヤレス通信関係の非同期関数の完了コールバックが呼び出されなくなります。
fake_child を使用して、複数台の子機を接続した場合に不具合が発生することが分かっています。
なお、親機から通信を終了するような処理になっている場合は、この不具合の影響を受けません。
これまでは、WM_DisconnectChildren 関数などの WM 関数を明示的に呼び出して接続を切断した場合は切断通知が発生しない仕様でしたが、
新規に WMStateCode に WM_STATECODE_DISCONNECTED_FROM_MYSELF を追加し、これで切断通知するように変更しました。
この変更によりソースコードの非互換が発生する可能性があります。
WMStartParentCallback, WMStartConnectCallback, WMPortRecvCallback の state フィールドに入る可能性のあるステートコードが増えていますので、
既知の WM_STATECODE_* 以外を受け取った場合はプログラムの実行を停止する、などの処理を行っている場合は注意が必要です。
また、この通知を利用して DataSharing は親機から明示的に子機を切断しても停止しなくなりました。
この対応にともなって、以下の関数を追加しました。
Note 31-24 および Note 30-07 で公開された修正項目が完全な対応ではありませんでしたので、これを再度修正しました。
(2005/09/08)
バックアップデバイスの非同期処理を中断するための関数として CARD_CancelBackupAsync 関数を追加しました。
また、この関数で中断された処理の結果値として CARDResult 列挙値に CARD_RESULT_CANCELED を追加しました。
FRAM デバイスをバックアップに使用している場合、本体起動時に稀にハードウェア内部ステータスの不整合が生じることがあり、その対応処理を追加しました。
バックアップ操作関数の結果値として、CARDResult 列挙型に CARD_RESULT_NO_RESPONSE を追加しました。
これは CARD_RESULT_TIMEOUT から細分化されたエラー値で、カードの接触不良とおぼしき場合に返されます。
オーバーレイグループをサポートしました。
リンカは同一グループに属するオーバーレイが、同じメモリ領域上に配置されていると仮定します。
互いに排他的なオーバーレイモジュールを同一のグループに指定しておくことで、そのオーバーレイ間の関数呼び出しをリンク時にエラーとして検出できます。
互換性保持のため、オーバーレイグループ省略時には現セクション名と同じ名のグループが設定されます。
lsf ファイルにおけるセクションの記述において main と main_bss というように"存在するセクション名" + "_bss" というセクションが存在すると問題が起きる場合がありました。
"_bss" の他にも "_DATA", "_BSS" など幾つかの文字列で同様の問題が起きました。
これは lcf.template ファイルの問題です。
$NitroSDK/include/nitro/specfiles 以下の *.lcf.template ファイルを修正しました。
これにより前のバージョンまで存在していたオーバーレイに関する幾つかのシンボル情報を直接参照することが出来なくなりました。
これにより、シンボルを直接参照しているアプリケーションに不都合が起こる可能性があるため、当面の間、古いバージョンの *.lcf.template を $NitroSDK/include/nitro/specfiles/2.x に収録します。
必要に応じて、これを $NitroSDK/include/nitro/specfiles へ上書きコピーしてください。
(make でビルドを行なう場合は変数 LCFILE_TEMPLATE で指定してください)
オーバーレイに関する情報を取得する場合、オーバーレイID をインデックス値としてオーバーレイテーブルを参照するのが公式な方法ですので、よろしくお願いします。
DTCM にオーバーレイを配置すると、メインメモリ領域のアリーナの設定に不具合が起こっていましたが、これを修正しました。
ITCM のオーバーレイを行なった際のITCMアリーナ設定も正しく修正しました。
またこれまで出来なかった拡張メインメモリ領域のオーバーレイにも対応しました。
loadrun はバイナリデータを IS-NITRO-EMULATOR にダウンロードし、実行するためのコマンドです。
動作時間や OS_Exit 関数の呼び出しなどで終了することが出来ます。
nitrorun は引数データをバイナリに埋め込む buryarg コマンドと loadrun コマンドを一度に呼び出すためのスクリプトです。
コマンドラインから引数を与える感覚でバイナリの実行が可能となります。
リソース名からそのリソースに対応する値を取得する ENV ライブラリを追加しました。
これは動作環境のパラメータをプログラムに与えるのに用いられ、再コンパイルは必要ですが、パラメータを容易に書き換えたり複数のプログラムで共通の環境を設定するのに便利なライブラリとなっています。
Note 28-03での動作変更にともない、オーバーレイのアンロード時にオーバーレイ上にあるグローバルなオブジェクト配列のデストラクタが正しく起動しないという不具合があり、これを修正しました。
以下のFSライブラリ解説ドキュメントにおいていくつかの誤記を修正しました。
fx64c 型から f32 型への変換を行なうマクロ FX_FX64C_TO_F32 に不具合があり、正確な値を返していませんでした。
これを修正しました。
FX_InvSqrt 関数に与える引数が一定値を超えると正しく計算されないという不具合がありましたが、これを修正しました。
Note 27-22で追加した機能に関連し、ダウンロード時のユーザ定義拡張パラメータを参照する MB_GetMultiBootDownloadParameter 関数を追加しました。
NVRAM からデータを読み出す際、読み出し先のバッファのアドレスが 0x02400000 を越えると読み出しに失敗するという不具合が発見されました。
この不具合を修正しました。
従来から存在した ARM7 側のデバッグ出力に使用する OS_InitPrintServer 関数および OS_PrintServer 関数のリファレンスを追加し、アプリケーションで特に使う必要がない旨も記述しました。
DTCM アリーナの上位アドレスを決定する個所に不具合がありました。
rsf ファイルでスタックサイズの指定に負の値を指定したときに生じていました。
これを修正しました。
Note 27-31の追加にあわせ、NitroStaticInit 関数の説明を関数リファレンスに追加しました。
OSThread 関連の関数で、引数に OSThread* 型のものを取るものについてその引数を const OSThread* として定義したほうがよいと判断したものについてそのように修正しました。
修正したのは以下の関数です。
ツールコマンド buryarg で埋め込んだ srl 等バイナリの引数データの中から、'-'で始まる文字列をプログラムに対する実行オプションとして取得するのに便利な OS_GetOpt 関数を追加しました。
実行時には、パラメータはオプションの後に来るようにしてください。
またサンプルデモの $NitroSDK/build/demos/os/argument-1 に OS_GetOpt 関数を使用するコードを追加しました。
サウンドライブラリ内から DC_InvalidateRange 関数を呼びだしている箇所で、指定している範囲が必要以上に広かったため、適切なサイズになるように修正しました。
この修正により、サウンド処理の負荷が軽減されます。
MP通信時に、通信相手の電源が切れるなどして存在しなくなった場合にはタイムアウトにより通信の切断が通知されますが、タイムアウト時の処理に不具合があり、切断通知が発生しない場合がありました。この不具合を修正しました。
WM_StartScanEx 関数で行う SSID の一致確認を特定の長さに限定したいという特殊な用途に対応するために、WMScanExParam.scanType に WM_SCANTYPE_ACTIVE_CUSTOM と WM_SCANTYPE_PASSIVE_CUSTOM を追加しました。
この scanType を使用すると WMScanExParam.ssidMatchLength で指定した長さまでしか SSID の一致確認を取らなくなります。
これに伴い、WMScanExParam 構造体が変更されています。
インフラストラクチャモード時に WM_StartScanEx 関数で SSID を指定してスキャンした場合、先頭の8バイトしか一致確認を取っていないという不具合がありました。
これを WMScanExParam.ssidLength で指定した長さで一致確認を取るように修正しました。
通信状態の非常に悪い環境で子機から繰り返し再接続を受ける状況において親機の内部状態が異常になるという不具合があり、これを修正しました。
WM_StartConnect[Ex] 関数を用いて接続を試みた結果失敗した場合に、失敗理由を類推する助けとなる通信相手の状態コードをコールバック関数にて通知する機能を追加しました。
具体的には WMStartConnectCallback 構造体に wlStatus メンバを追加しました。
なお、通常の使用時にはアプリケーションから特に参照して頂く必要はありません。
(2005/08/10)
CARD_CheckPulledOut 関数のリファレンスにて、この関数を呼び出す前に CARD_LockRom 関数を呼び出して CARD-ROM のバスをロックしておく必要がある旨を追記しました。
CARD_IdentifyBackup 関数に与えるデバイス種別で CARD_BACKUP_TYPE_NOT_USE を指定出来ないよう制限を追加しました。
この変更は 3.0PR で入っていましたが、changelog から漏れていました。
$NitroSDK/build/demos/mb/cloneboot サンプルに以下の修正を行いました。
スレッドデストラクタが実行される際のスタックを指定する OS_SetThreadDestructorStack 関数を追加しました。
特に指定がない場合は、スタックポインタは自らのスレッドを破棄する場合はそのままで、他のスレッドに破棄された場合はスタックの最上位に変更されます。
OS_Sleep 関数で休止状態になっているスレッドが他のスレッドから破棄された場合、OS_Sleep 関数で用いているアラームを破棄するように
しました。
これまではアラームが破棄されなかったため、すでに不要となったアラームハンドラが呼ばれたり、アラームリストが上書きされてしまうことがありました。
Note 29-08と関係して、内部処理の都合により子機側の過負荷時の処理を変更しました。
これまでは、子機側の ARM7 が過負荷になり、送信データの設定が間に合わなかった場合には Null 応答が出ていましたが、その代わりに応答をまったく返さないように変更しました。
この副作用として、子機側は過負荷時には受信処理が飛ばされるようになり、通信効率が若干落ちますが、負荷は低減されます。
Note 25-22により、切断時には切断通知を出せる電波状態になるまで待つように変更していましたが、これを一定の時間でタイムアウトするように変更しました。
これにより WMTestTool.srl を用いて Noise Rate を 100% にした場合に終了しなくなっていた件が改善されます。
ありません。
(2005/08/04)
$NitroSDK/build/buildtools/commondefs.emtype.ISD で定義される ISD_NITRO_DEBUGGER が指すパスの位置を修正しました。
$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D サンプルデモに以下の修正を行いました。
Note 27-15で行った修正内容が完全でなく、同様の症状が再現する場合があったため、これを再び修正しました。
以下の関数で引数では渡されたポインタの内容を書き換えていませんが、引数に const 修飾子が付いていませんでしたので、これを追加しました。
実行毎にシステム状態から異なるデータを生成して返すOS_GetLowEntropyData 関数を追加しました。
また、デモとして $NitroSDK/build/demos/os/entropy-1 を追加しました。
LCD オフの状態からスリープモードに移行して復帰すると、GX ライブラリの内部状態と実際の状態に不整合が生じるという不具合がありました。これを修正しました。
(参照:Note 22-23 (PM) LCDオフ状態からスリープモードに移行したあとの復帰処理の変更)
WM_SetIndCallback 関数のコールバックに通知されるものに WM_STATECODE_INFORMATION を追加しました。これは、内部で発生した事象の情報を通知するためのものです。
コールバック引数の WMIndCallback.reason で通知内容を表します。reason の値としては、WM_StartMPEx 関数の ignoreFatalError を TRUE にし、かつ fatal error が発生した場合に通知される WM_INFOCODE_FATAL_ERROR が定義されています。
インフラストラクチャ通信時に省電力モードを切り替える WM_SetPowerSaveMode 関数を追加しました。
WM_StartMPEx 関数の ignoreFatalError 引数を TRUE にしていた場合、子機側で fatal error が発生しても自動切断されなくなりますが、ここの処理に不具合があり、以降の通信ができなくなっていました。
これを修正しました。
これまで、子機は自分宛でない MP フレームを受信した場合、WM_StartMP 関数に state が WM_STATECODE_MP_IND で errcode が WM_ERRCODE_INVALID_POLLBITMAP の通知が来ていましたが、これを全く何の通知も出さないように変更しました。
また、MP ACK フレームでの WM_STATECODE_MPACK_IND の通知も同様に変更しました。
なお、port を利用した送受信はこの変更による影響を受けません。
thumb ビルド版の ichneumon コンポーネントを使用するとプログラムが動作しないという問題が確認されていましたが、これを修正しました。
ありません。
(2005/07/22)
ピクトキャッチ処理を行うサンプルデモを $NitroSDK/build/demos/cht/catch-min に追加しました。
このサンプルデモは、必要最小限の機能しか実装していないので、従来からあるピクトキャッチのサンプルデモよりもコードサイズが小さくなっています。
$NitroSDK/include/nitro.h に対するプリコンパイルヘッダに対応するようになりました。
ビルドシステムはビルドに先立ち $NitroSDK/include/nitro.h をプリコンパイルし、その結果をファイルのビルド時に読み込みます。
これによりビルドの高速化が期待できます。
もし、このコンパイルを一時的に抑制したい場合は、NITRO_NO_STD_PCHDR に値を設定してください。
アンロードされるオーバーレイ上に配置されたデストラクタを必要とするグローバルオブジェクトが存在している場合に、従来はこれらに対して自動的にデストラクタを呼び出していましたが、これを呼び出さないように動作を変更しました。
$NitroSDK/build/demos/gx/UnitTours/2D_Oam_256_16 サンプルデモ内部の十字キー操作において、FINALROM で十字キーの操作ができないバグがありました。
この問題を修正しました。
MD5 関数の実装を差し替えました。
コードサイズは約半分になり、以前の実装から2割程度の速度が向上しています。
インターフェイスの変更はありません。
この変更は 2.2PR で入っていましたが、changelog から漏れていました。
IRQ モードでのスタックに、スレッドのスタックと同様のスタック溢れチェック機構を追加しました。
これはスタックの最上位、最下位(と、必要ならばその間)にチェックコードを書き込んでおき、そこが書き換えられたかによって、スタックがその位置まで到達したかどうかを調べる、というものです。
このために追加された関数は以下の通りです。
ROMファイルに引数データを与え、プログラムから取得する機構を用意しました。
$(NitroSDK)/tools/bin/buryarg のツールで引数データを埋め込み、OS_GetArgc 関数と OS_GetArgv 関数でそのデータをプログラムから利用することが出来ます。
これを利用すれば、コンパイルすることなくプログラムの実行条件を変更することが可能です。
また、この機能を使用したサンプルデモを $NitroSDK/build/demos/os/argument-1 として追加しました。
この機能はデバッグ用途として用意されており、FINALROMビルド時には無効化されます。
他のスレッドを終了させる関数として OS_KillThread 関数と OS_KillThreadWithPriority 関数を追加しました。終了時にスレッド優先度を設定するかしないかでいずれかを使い分けることが出来ます。
OS_KillThread 関数と OS_DestroyThread 関数との違いは、終了するスレッドのスレッドデストラクタが呼ばれるかどうかという点です。
これら2つの関数を比較するサンプルデモを $NitroSDK/build/demos/os/thread-9 に追加しました。
スレッドが終了する際に予め設定した関数を呼ばせる、スレッドデストラクタの機能を実装しました。
設定は OS_SetThreadDestructor 関数となります。
スレッドデストラクタが呼ばれるのは以下の場合です。
スレッド構造体 OSThread にユーザパラメータメンバを追加しました。
この領域はシステムで参照することも変更することもありません。
アプリケーションごとに自由な用途に使用することが出来ます。
設定と取得は以下の関数で行ないます。
これまで OS で同時に扱えるスレッドの最大個数は16個(通常16個で、ヘッダ内定義の書き換えによって8〜32個が可能)
でしたが、この最大数制限を撤廃しました。
スレッドに関する API はこれまでと変わりません。
この変更に関して、スレッドを大量に作成する2つのサンプルデモを $NitroSDK/build/demos/os/thread-8 と $NitroSDK/build/demos/os/thread-10 に追加しました。
ありません。
(2005/07/15)
ARM7 が定期的に行うカード抜け検出処理の結果通知を待たず ARM9 から直接判定を行う関数として CARD_CheckPulledOut 関数を追加しました。
特にカードアクセスをしていない通常の場面では必要ありませんが、カード抜けを遅延無く確実に判定する必要がある場面においては CARD_IsPulledOut 関数のかわりにこちらを使用することができます。
CARD ライブラリが 512kb EEPROM および 256kb FRAM バックアップデバイスに対応し、CARD_BACKUP_TYPE_EEPROM_512KBITS と CARD_BACKUP_TYPE_FRAM_256KBITS を CARDBackupType 列挙型に追加しました。
CTRDG_Init 関数実行時の、カートリッジ情報領域を読む際のキャッシュ操作を修正しました。
これまでメーカーコードやゲームコードといったカートリッジ情報を取得する際に誤った値を返すことがありましたが、修正されました。
バイナリファイルをオブジェクトファイルに変換するためのツール bin2obj を追加しました。
これは CodeWarrior for NINTENDO DS パッケージ内の BinToElf ツールと同じ働きをするものですので、どちらを使用しても問題ありません。
CYGWIN のコマンドラインからビルドを行なう場合において、cygdrive prefix がデフォルトの設定である /cygdrive でない場合にビルドが失敗していました。
これを修正し cygdrive prefix が変更されている場合にもビルドが出来るようにしました。
$NitroSDK/include/nitro/specfiles/ARM9-TS-cloneboot-C.lcf.template の LCF テンプレートを使用するプログラムでは .sinit セクションがリンクされず static initializer の機能が使用できませんでしたが、これを修正しました。
rsf(リンカスペックファイル)にて指定する StackSize で、第1パラメータに負数を指定すると指定可能な最大サイズからパラメータ値の絶対値を引いたものとなるという仕様が有効ではありませんでした。
これを修正しました。
PMIC のバージョンを示す SDK_TS_VERSION 定数のデフォルト値を 100 から 200 に変更しました。
SDK_TS_VERSION = 200 は、IS-NITRO-EMULATOR ハードウェア Ver.E 以上、ニンテンドーDS 製品 に搭載されております PMIC のバージョンに相当します。
この変更により NITRO-SDK にて提供しております機能の内部動作が変わることはありませんが、この定数をビルドスイッチとして動作を変更するアプリケーション(マイクを使用するサンプルデモなど) には影響が生じますのでご注意下さい。
なお、環境変数として NITRO_TS_VERSION を指定すると SDK_TS_VERSION はデフォルト値ではなく指定した値となります。
また、NITRO-SDK では TS_VERSION 毎に os 及び spi ライブラリが用意されています。
これは TS ブレッドボードなどを用いた開発環境においてオーナー情報のセーブフォーマットが古い場合に意味を持ちますが、セーブフォーマットが発売実機と同等の場合には全く同じライブラリとなります。
make システムを使用した場合には環境変数により自動的にリンクするライブラリが選択されますが、IDE を使用する開発環境では手動でリンクするライブラリを選択して頂く必要があります。
但し TS ブレッドボードなどを用いた開発環境を使用する場合を除いてはライブラリを選択する意味がありませんので、デフォルトでリンクされるライブラリを用いることに問題はありません。
Makefile を用いたビルドを行う際の #include のサーチパスに #include を呼び出したファイルのあるディレクトリも含めるように変更しました。
従来どおりのサーチパスである必要がある場合は、Makefile 中で
MACRO_FLAGS += -cwd proj
という指定を入れるようにしてください。
メモリ領域やCARDの特定の領域を一時的なファイルとみなして開く関数として、FS_CreateFileFromMemory 関数および FS_CreateFileFromRom 関数を追加しました。
また、これらの動作を示すサンプルとして $NitroSDK/build/demos/fs/file-3 サンプルデモを追加しました。
FS ライブラリを初期化前の状態に戻す関数として FS_End 関数を追加しました。
非同期コマンドがまだアーカイブに処理されていない状態のファイルハンドルに対して FS_WaitAsync 関数を呼び出した場合にアーカイブの処理が停止してしまうという不具合があり、この問題を修正しました。
FS_UnloadOverlay関数やFS_EndOverlay関数でオーバーレイをアンロードする際にデストラクタが正しく呼び出されないことがあるという不具合があり、
この問題を修正しました。
具体的には、次の条件を同時に満たすオブジェクトが対象になります。
(x, y)の傾きが限りなく1に近い場合において以下の逆正接関数が誤った値を返すという不具合があり、これを修正しました。
$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D サンプルデモに以下の修正を行いました。
2画面3Dと負荷の高い処理を併用したときに、まれに上画面のものが下画面に(もしくは、下画面のものが上画面に)一瞬回り込んでしまうという不具合があり、これを修正しました。
ディスプレイリストを操作する関数の内部から呼び出される G3C_UpdateGXDLInfo 関数および G3B_UpdateGXDLInfo 関数で、バッファのサイズとちょうど同じサイズのディスプレイリストを作成する場合に ASSERT の判定にかかってしまう不具合がありました。
この不具合は修正されました。
MATH_QSort 関数でのソートの際に、場合によって対象配列へのオーバーアクセスが発生する不具合が存在しました。
この不具合は修正されました。
SHA-1 関数の実装を差し替えました。
コードサイズはほぼ変わらず、以前の実装の倍程度の速度が出ています。
インターフェイスの変更はありません。
高速フーリエ変換を行う関数を追加しました。
また、その動作確認デモを $NitroSDK/build/demos/math/fft-1, fft-2 として追加しました。
DSダウンロードプレイで配信した子機がワイヤレス経由でファイルシステムを使用するサンプルを $NitroSDK/build/demos/mb/multiboot-wfs に追加しました。
MB プロトコルにてブートした子機は、メインメモリを強制的に 4M 設定として拡張メモリを使用できないように制限を設けていましたが、これを廃止し、IS-NITRO-EMULATOR 等の 8M メインメモリを持つハードウェアでは拡張領域を使用することも可能となるように修正しました。
MBGameRegistry 構造体に userParam メンバを追加しました。
このバッファに最大32バイトまでの自由なデータを設定して MB_RegisterFile 関数を使用すると、DSダウンロードプレイ子機はそのデータを起動後に参照することができます。
MI_CompressHuffman 関数及び ntrcomp.exe の不具合で、単一の値で埋められたデータが正常に圧縮されない場合がありました。
この不具合は修正されました。
OS_Sleep 関数を呼び出して待機しているスレッドに対して OS_WakeupThreadDirect 関数を呼び出した場合にその後のアラーム処理に異常が生じるという不具合があり、これを修正しました。
OS_TryLockMutex 関数で mutex のロックを行なった際の OS 内部で保持している mutex のリスト操作を誤っていました。
そのため、OS_UnlockMutex 関数で例外が発生することがあったり、mutex をロックしたままスレッドを終了させた際に不具合が発生したりしていました。これを修正しました。
なお、OS_TryLockMutex 関数ではなく、OS_LockMutex 関数は正常動作しており、これらの不具合はありません。
カレントスレッドと同優先度で実行可能状態になっているスレッドに対して実行機会を与えながらスレッドスケジューリングを行なう OS_YieldThread 関数を追加しました。
プログラム起動時の autoload および各セグメント初期化時にキャッシュのクリーン/無効化を確実に行うよう内部処理を修正しました。
中国語対応アプリケーションの起動画面表示処理自体を SDK_WEAK_SYMBOL で修飾し、OS_ShowAttentionChina 関数として公開し、外部定義によるこの実装の差し替えを可能にしました。
それらとあわせて、起動時にのみ使用する画像のデータを静的リンクせずにファイルシステムからロードする方法を示すサンプルとして $NitroSDK/build/demos/os/forChina-fsを追加しました。
Note 24-10、Note 25-16で扱われた不具合の原因判明にともない、DC_FlushRange 関数および DC_FlushAll 関数の内部実装を CPU の flush 命令で実現するように変更しました。
具体的には、「ライトバッファがフルの状態で flush 命令を実行するとクリーンなキャッシュラインが無効化されない」という症状を回避するために flush 命令の直前と割り込みハンドラからの復帰時にライトバッファエンプティ待ち命令を挿入しました。
関数仕様に変更はありません。
OSMutex 内部で保持している mutex のリスト処理に不具合がありました。
具体的には、1つのスレッドが、同時に複数の OSMutex に対して OS_LockMutex 関数や OS_TryLockMutex 関数でロックをかける際に不具合が発生します。
これを修正しました。
なお、1つのスレッドが同時に最大1つの OSMutex しかロックしない場合には不具合は発生しません。
NITRO-SDK のヘッダファイルのうち主要なものや特殊な機能を持つものについて、説明を関数リファレンスの OS カテゴリ内に追加しました。
以下のファイルに関して解説しています。
RTCDate, RTCTime 型の日付・時刻データと2000年1月1日からの総経過秒との相互変換関数を RTC カテゴリに追加しました。同様に、RTCDate 型と総経過日数との交互変換関数を追加しました。
動作確認用のデモは $NitroSDK/build/demos/rtc/convert-1 です。
デバッグ用途を目的として、RTC の日付・時刻を変更する API を用意しておりましたが、デバッグ用途以外での誤った使用を避けるために、NITRO_FINALROM を指定した場合には RTC への書き込み要求が必ず失敗するように制限を設けました。
動作が変更される API は以下の通りです。
$NitroSDK/build/demos/wbt/wbt-fs のサンプルデモに以下の修正を行いました。
・FS_LoadTable 関数に使用するテーブルメモリを接続と切断の繰り返しごとに解放せず確保し続けてメモリリークが発生していましたので、これを修正しました。
$NitroSDK/build/demos/wireless_shared/wc サンプルモジュールおよび $NitroSDK/build/demos/wbt/wbt-1 サンプルデモに以下の修正を行いました。
「連続 MP 通信中の無線親機において、新たに子機が接続されると無条件に送信バッファを上書きしてしまい、タイミングによっては送信バッファにデータを書き込んでいる最中に無線ハードウェアに送られ、WBT パケットの不整合が発生していた。」うという不具合があり、これを修正しました。
修正内容は、$NitroSDK/build/demos/wbt/wbt-1/src/main.c 内で WBT 親機に現在接続中の子機情報を持たせることにより、
1、1台目の子機なら連続 MP 通信をはじめる。
2、2台目以降の子機なら何もしない。(連続 MP 通信中なのでなにもしなくていい)
3、子機がいなくなると連続 MP 通信をやめる。
という処理を追加しました。
また、上記処理で子機が切断されたという情報が必要になったため、$NitroSDK/build/demos/wireless_shared/wc/wc.c 内で子機が切断されたときにサンプル側のコールバックを呼ぶように修正しました。
WM の使用メモリサイズを減らすために、ほとんど使われていない WM_StartKeySharing, WM_EndKeySharing, WM_GetKeySet の各関数の仕様を変更し、Key Sharing 用の固定バッファを WM 初期化時に確保しないようにしました。
また、Key Sharing 機能は今後廃止予定ですので、代わりに WM_StartDataSharing, WM_EndDataSharing, WM_StepDataSharing の各関数を使用していただきたいという旨をドキュメントに追記しました。
WM_StartScanEx 関数にて SSID をフィルター指定した場合でも、見つかった親機情報内の SSID が指定した SSID と異なる無効なデータとなる場合があることが分かりました。
この問題への対策として、WM ライブラリ内でフィルター指定した SSID をみつかった親機情報内の SSID に必要に応じて上書きする処理を追加しました。
なお、この現象はインフラストラクチャモードで通信する親機が SSID を隠蔽している場合にのみ発生します。
NitroSDK/bin/ARM9-TS/Rom/WMTestTool.srl にあるワイヤレス通信のテスト用ツールを更新しました。
これまでは Scan 時にアクセスポイントを発見すると "WLAN AP" と表示していましたが、代わりに SSID を表示するように変更しています。
この変更は、Scan Test モード、ScanEx Test モードの双方に施されています。
これまでは、ワイヤレス通信の親機が WM_StartMP 関数を呼び出すと、子機が1台も接続していない場合でも MP フレームを送信していましたが、これを送信しないように変更しました。
port の送受信コールバックの挙動は基本的には変わりません。
MP 通信で子機が NULL 応答のみを返し続けてタイムアウトした場合に親機の WMStartParentCallback コールバックへ複数回の WM_STATECODE_DISCONNECTED 通知が発生することがあり、これを修正しました。
この問題はおもに、IS-NITRO-DEBUGGER で起動させた子機を MP 通信中のまま長時間一時停止させた場合に発生します。
これまで、連続通信モードや通信の失敗が続いた後などでは、送れるだけ送りつづけるという動作をしていましたが、空データしか送受信しないような状況で、MP 回数が急に増大し子機側の受信処理が追いつかずに不具合を引き起こすことがありました。
その対策として、1ピクチャフレーム中に親機が送信する MP 通信の再送なども含めた回数に6回という上限を設定しました。
通常の通信をしていれば、この制限にかかることはありません。
ありません。
(2005/05/09)
Note 21-33にてMIライブラリ内でDMAチャンネルの正当性判定が追加されましたが、
CARDライブラリおよびFSライブラリではチャンネルが指定される箇所と実際に使用される箇所が離れていてこの制限に気付きにくかったため、
これらのライブラリでもDMAチャンネルを要求する関数の冒頭に正当性判定を追加しました。
また、この点についての注意も関数リファレンスに追記しました。
浮動小数点ライブラリを指定するビルドスイッチCW_LIBFPを用意し、Makefile 側で再定義可能なように変更しました。
また、デフォルトで指定されるライブラリを従来の FP_fullI_v5t_LE.a から FP_fastI_v5t_LE.a へ変更しました。
FINALROMバージョンのオーバーレイ関数が不必要なデバッグ用関数を呼び出してリンク時のコードサイズを増加させていましたので、これを修正しました。
DSダウンロードプレイ親機の省電力モード設定を切り替える MB_SetPowerSaveMode 関数を使用したサンプルデモとして multiboot-PowerSave を追加しました。
言語コードを新規に追加するための仕組みを導入し、拡張言語コードとして中国語を追加しました。
中国語対応アプリケーションを作成するためのガイドラインについては、現在準備中ですのでお待ちください。
SNDInstData構造体のreleaseフィールドにSND_BANK_DISABLE_RELEASE(=255)を指定した場合、 そのインストはノート長の指定を無視して波形データ終端まで再生するよう機能を追加しました。
$NitroSDK/build/demos/wireless_shared/wfs サンプルモジュールおよび
$NitroSDK/build/demos/wbt/wbt-fs サンプルデモに以下の修正を行いました。
WC サンプルモジュールの WcInit 関数を複数回呼び出しうるにもかかわらず WcFinish 関数を呼び出していないサンプルについて、
この2つの関数が正しく対応して呼び出されるよう修正しました。
以下のサンプルデモが修正されています。
ありません。
(2005/04/21)
CARD_Init関数のリファレンスにおいて、内部で生成される非同期処理用スレッドに関する記述がありませんでしたので、この説明を追加しました。
カートリッジデバイスの抜け検出に使用する、CTRDG_IsAgbCartridgePulledOut関数およびCTRDG_IsOptionCartridgePulledOut関数を追加しました。
NITRO-SDK2.0RCの更新(Note18-20)では、リファレンスの説明のみを追加しており、対応する関数の実装がありませんでした。
カートリッジバスをロックしたままの状態では ARM7 による自動抜け検出が行われないため CTRDG_IsExisting関数を定期的に呼び出す必要があることを、リファレンスの各関数に明記しました。
NITRO-SDK 2.0 正式版で公開されたNote 23-01のリファレンス記述追加に関して、 メーカーコードおよびゲームコードの取得が初期化時のみ行われるという内容が誤っていましたので、この記述を修正しました。
メモリマップの見直しを行い、デフォルトでARM9に割り当てるMainRAM領域の大きさを増やしました。
具体的には、これまで0x27C0000からの領域に配置していたDTCMを、0x27E0000 からとしました。
あわせて、ARM9に割り当てられるMainRAM領域は 0x2000000〜0x23BFFFF から 0x2000000〜0x23DFFFF となります。(128KByte 増加したことになります。)
また、ARM7に割り当てられるMainRAM 領域は 0x27E0000〜0x27FEFFF となります。
また、メインメモリのサイズを4Mとした場合にデフォルトのプロテクションリージョン設定では 0x23E0000〜0x23FFFFF までの
ARM7側プログラム配置領域がARM9からは読み書き可能であったので、プロテクションユニット2 の位置を変更して領域を保護するように修正しました。
メインメモリのサイズを8Mとした場合のメインメモリ上の拡張アリーナの開始アドレスを 0x2400000 から 0x23E0000 に変更し、サイズを128Kバイト拡張しました。
FSライブラリの関数のうち割り込みハンドラ内から呼び出すことのできないものについて、関数内に正当性判定コードを追加しました。
G3_FrustumW関数において、結果を格納する行列の要素 _23 の値が間違っているという不具合があり、これを修正しました。
再帰を使用しないクイックソート関数を MATH_QSort としてMATHカテゴリ以下に追加しました。
データの checksum や CRC を求める関数とそのリファレンス、デモを追加しました。
demos/spi/mic-2 サンプルについて以下の修正を行いました。
MB_Init関数へ引数として与えるTGIDについて、新規に定義された定数MB_TGID_AUTOを指定することによってこれを内部で自動生成させるオプションを追加しました。 これに伴い tgid 引数の型が u16 から u32 へ拡張されましたが、このオプション以外の仕様はすべて従来と同様です。
MBライブラリの内部で駆動しているWMライブラリへ各種パラメータを外部から明示的に指定するため、以下の関数を追加しました。
$NitroSDK/build/demos/wireless_shared/mbp 以下のサンプルソースコードに対し、以下の修正を行いました。
OS_InitThread関数で初期化されるランチャースレッドのスタックアンダーフロー検出用コードの挿入位置が、 本来のスタックメモリ下端より64バイト下方にあるという不具合があり、これを修正しました。
OS_Sleep関数の内部実装において、アラーム設定からスレッド待機までの期間がスレッドセーフでありませんでしたので、これを修正しました。
Note 24-10で行った内部実装の変更にともないDC_FlushAll関数の動作がスレッドセーフでなくなっていましたので、これを修正しました。
また、領域を指定する形式のキャッシュ操作関数が領域サイズに比例した処理時間を要する旨を関数リファレンスに明記しました。
OSライブラリのいくつかのサンプルデモにてチックシステムを使用しつつ割り込みを禁止していましたので、 これについてOS_EnableIrq関数を正しく呼び出すように修正しました。
以下の書式文字列関数のリファレンスにて、最終ROM版(FINALROM)ライブラリで出力動作を行なわないという誤った説明がありましたが、この記述を削除しました。
拡張言語コードへ暫定的に対応しました。 一部のツールに変更が加えられていますが、現状のアプリケーションには影響はありません。 次回リリースには正式対応となる予定です。
サウンドライブラリについて、従来 NITRO-SDK にはライブラリファイルのみを収録し、
NITRO-System にはライブラリファイルとドキュメントおよびサンプルを収録していましたが、
本バージョンからこれらの全てをNITRO-SDK に収録しました。
$NitroSDK/build/libraries/snd ディレクトリ以下にサウンドライブラリのソースファイルを公開し、
$NitroSDK/build/demos/snd ディレクトリ以下にサウンドライブラリのサンプルデモを追加しました。
あわせて、サウンドライブラリの関数リファレンスも追加しました。
SND_StartSeq関数呼び出し直後にシーケンスのパラメータを変更した場合、シーケンス開始とパラメータ反映が同一フレームで処理されない可能性があり、
この様な場合に対応する関数としてSND_PrepareSeq関数とSND_StartPreparedSeq関数を追加しました。
SND_PrepareSeq関数とSND_StartPreparedSeq関数の間で行ったパラメータ変更は、シーケンス開始と同時に処理されることが保証されます。
ワイヤレスライブラリ内にて、親機が子機の異常を検知した場合の切断処理を強化しました。 また、WM_Disconnect関数を用いて親機が子機を切断しようとして失敗した場合に規定回数切断処理をリトライするように内部動作を変更しました。
RTC の時刻設定をもとにして TGID を自動生成する WM_GetNextTgid 関数を追加しました。
(2005/04/07)
ROM 内登録データの情報を表す構造体として CARDRomHeader 構造体を CARD ライブラリに追加しました。
CARD_IdentifyBackup 関数の内部で1バイトのテスト読み出しを行う処理を追加しました。このテスト読み出しの結果値は CARD_GetResultCode 関数で取得することができます。
これに伴って返り値の型が BOOL へ変更され、呼び出しの際には CARD_LockBackup 関数によるアクセスバスのロックが必要になりました。
ワンタイムPROMビルドオプションのサポート(Note 24-04 で後述)に伴い、マスクROMおよびワンタイムPROMを指定するサンプルとしてcard/card-1tromデモ、card/card-mromデモを追加しました。
プログラムに採用するROMの種類として、従来のマスクROM以外にワンタイムPROMを指定するためのビルドオプションがサポートされました。
makerom.exeツールのセクションパラメータにRomSpeedTypeが追加され、MROM、1TROM、UNDEFINEDのいずれかを指定できるようになりました。
また、NITRO-SDKのmake環境用においては、NITRO_ROMSPEEDビルドスイッチが追加され、ビルド時にRomSpeedTypeを直接指定可能になりました。
(特に指定しなければUNDEFINEDが設定されます)
詳細については、Note 24-03 のサンプルデモを参照して下さい。
version.hヘッダーファイルで定義されているSDKのバージョン情報について、常に0であったSDK_VERSION_PATCH定数の定義が廃止されました。
これに関連して、プログラムの常駐コードに含まれる4バイトのバージョン情報値フォーマットも変更され、
SDK_VERSION_PATCHフィールドの4ビットが廃止されSDK_VERSION_MINORフィールドが8ビットに拡張されました。
下位ビット方向に拡張されています。
この修正に対応して showversion ツールが変更されています。
SDK のバージョン情報を読み出すツールなどを制作されている方は、ご注意ください。
G3_GetDLSize 関数の不具合で実際のディスプレイリストサイズよりも4バイト分大きな値を返す場合があり、この不具合を修正しました。
標準的なメッセージダイジェストのアルゴリズムである MD5 と SHA-1 を使用したメッセージダイジェスト値の計算関数を MATH カテゴリ以下に追加しました。 また、鍵付ハッシングのアルゴリズムである HMAC-MD5 と HMAC-SHA-1 の計算関数も同時に追加しています。
配信中のゲーム情報に対してエントリーしている子機群のAIDビットマップを取得するMB_GetGameEntryBitmap関数を追加しました。
あるスレッドがカードバスをロックした状態で動作している時に、それよりも優先度の低いスレッドがOS_ResetSystem関数を呼び出すと、 リセット内部処理がデッドロックする不具合がありましたので、これを修正しました。
キャッシュラインの管理状態が valid かつ dirty の際に CPU の flush 命令がごくまれに動作しない場合があることが確認されましたので、
SDK でこれらの機能を提供している DC_FlushRange 関数および DC_FlushAll 関数の内部実装を、
CPU の store 命令と invalidate 命令の組み合わせで実現するように変更しました。
関数仕様に変更はありません。
demos/os/favorite-color サンプルについて以下の修正を行いました。
日付のみを書き換えるRTC_SetDate関数およびRTC_SetDateAsync関数が正常に動作せず日付が書き換わらないという不具合があり、これを修正しました。
サウンドドライバの情報を取得するための関数が追加されました。追加された関数は以下の通りです。
SND_FlushCommand 関数の引数フラグに、SND_COMMAND_IMMEDIATE を追加で指定できるようになりました。
SND_COMMAND_IMMEDIATE を指定すると、発行したコマンドが、次のサウンドフレームを待たずに処理されるようになります。
SND_ReadInstData 関数などで使用する SNDInstData 構造体の type メンバが取りうる値に、SND_INST_NULL が追加されました。
なお、SND_INST_NULL が設定されているインストデータは、発音されません。
「ワイヤレス通信ライブラリ解説」(AboutWirelessManager.pdf) に内部状態の CLASS1 ステートに関する記述を加筆しました。
NITRO-SDK 2.0 RC5 での修正により、WM_StartMP 関数を呼び出す前に子機が接続・切断した場合に親機の ARM7 が不正な処理を行う、 という不具合を NITRO-SDK 2.0 で修正しましたが、不十分でしたので、これを正しく修正しました。
WM_StartScanEx関数で指定されたコールバック関数に渡される引数のAPIIDが、WM_StartScan関数の場合のAPIIDと同一だったため、
両者の判別ができないという問題がありました。(結果として2つのAPIを使い分ける事ができませんでした)
この不具合を修正しました。
NITRO-SDK 2.0 正式版から発生している不具合として、切断時に切断する相手が通信不能な状態になっていると、 切断に失敗して無線ライブラリの内部状態が不整合を起こすという問題があり、これに関係して、 通信中にデバッガでブレークした際に通信相手に正常にタイムアウトによる切断の通知が行われないという不具合がありましたが、 これらの不具合を修正しました。
DS ワイヤレスプレイにおいては、接続時の通信だけは WEP Key で暗号化することが可能となっています。
これを行うデモを wm/wep-1 として追加しました。
ありません。
(2005/03/11)
CTRDG_GetAgbMakerCode 関数および CTRDG_GetAgbGameCode 関数で返される値は
CTRDG_Init 関数の呼び出し時に取得されたものであるという点を各関数リファレンスに明記しました。
関連して、開発機材などでカートリッジを使用するにあたってはCTRDG_Init
関数の呼び出しより前にカートリッジ電源をONにしておく必要があるという点についても補足しました。
ライブラリおよびサンプルデモのソースコード全体で、インデントや改行に関する構文上の書式を統一しました。
$NitroSDK/bin 以下に収録されている各種DSプログラムのリファレンスを $NitroSDK/man/ja_JP/romfiles 以下に [ビルド済みDSプログラム] のカテゴリとして追加しました。
関数リファレンスにおいて、引数に与えることのできる値の範囲が不明瞭なものについて適宜記述を追加しました。
弱いシンボル(weak symbol)を宣言するための修飾子としてマクロ SDK_WEAK_SYMBOL を定義しました。CodeWarrior を使用する場合は
#define SDK_WEAK_SYMBOL __declspec(weak)
と定義されています。
RC5 での修正により、NITRO_COMPRESS を指定してビルドしたアプリケーションでオーバーレイをロードする関数を呼び出した際に 内部判定のミスで正しく処理が完了しないという不具合があり、これを修正しました。
ntrcompでデータを圧縮する際に、出力ファイルサイズが4の倍数になるよう末尾を 0 で調整するオプション '-A4' が追加されました。
PRC_GetRecognizedEntriesEx_Superfine 関数において一部の SDK_ASSERT の正当性判定条件が厳しすぎましたので、 これを適正な条件に修正しました。
以下の関数群の返り値の型を void から BOOL に変更し、成功・失敗を返すように変更しました。
RC5 での修正により、WM_StartMP 関数を呼び出す前に子機が接続・切断した場合に親機の ARM7 が不正な処理を行う、 という不具合が発生していましたが、これを修正しました。 なお、WM_StartParent 関数が成功してから直ちに WM_StartMP 関数を呼んでいるアプリケーションでは、この問題はまず発生しません。
RC5 での変更で、WM_StartMPEx 関数の minPollBmpMode を TRUE に設定した場合に 正常に送信が出来ないという不具合が発生していましたが、これを修正しました。
電波状態によって、ごく稀に通信内容が消えてしまう不具合がありましたが、これを修正しました。
従来は port 通信用の送信キューを 64 段用意していましたが、使用状況から考えて過剰な量と判断し、
ワイヤレス通信ライブラリの使用メモリを削減するために 32 段へと変更しました。
なお、Data Sharing 1 組につき、送信キューは高々 2 段しか使用しません。
WM_SetMPData* 関数のコールバックに渡される構造体を変更しました。
従来は destBitmap に指定されていたものの、接続が切れている AID に関しては restBitmap フィールドの対応するビットの値が不定でしたが、
これを必ず 0 になるように変更しました。
これに伴い、送信できた相手の AID のビットマップを格納する sentBitmap フィールドを新設しました。
未接続または切断されたために送信しなかった相手がいるかを確認するには、
destBitmap フィールドと sentBitmap フィールドを比較するようにしてください。
ARM7 のワイヤレス通信ドライバでの状態チェックを強化しました。
これにより、以下の関数のコールバックに WM_ERRCODE_ILLEGAL_STATE のエラーが返りうるようになりました。
WM_EndKeySharing 関数が返り値として常にエラーを返していましたが、これを修正しました。
$NitroSDK/build/demos/wireless_shared/wh 以下のサンプルソースコードに対し、以下の修正を行いました。
ありません。
(2005/02/25)
VRAM上に無線通信機能の実行コードを配置する特殊コンポーネントとして ichneumon が新規に追加されました。 詳細については同時に追加されましたドキュメント AboutComponents.pdf を参照して下さい。 また、NITRO-SDK 2.0 RC4 までに提供しておりました idle、ferret コンポーネントについては今後のサポートを廃止します。
ピクトチャットサーチ機能を用いる例として提供しておりますサンプルにて、このサンプルが用いる
"無線制御部共通モジュールであるWC内のピクトチャットサーチ機能を有効/無効にする関数"の名称の綴り間違いを修正しました。
ライブラリおよび各種サンプルデモにおいて、一部の厳格な警告オプションへも対応できるようにコードを修正しました。
サイズが等しく符号の有無が異なる整数型同士での変換を暗黙に行っていた個所などについて改善がなされています。
C/C++言語のソース内で static initializer を明示的に追加するサンプルとして、overlay-staticinit サンプルデモを追加しました。
アーカイブが一度アンロードされ再びロードされる際に内部状態が部分的にサスペンド状態へ変更されてしまい、
連続発行して保留された非同期コマンドが処理されないという不具合があり、この問題を修正しました。
FS_LoadOverlayImage 関数および FS_LoadOverlayImageAsync 関数の内部処理において、 指定したオーバーレイに対応するファイルが正しく開けた場合にはその後の FS_ReadFile 関数の結果を反映せず常にTRUE を返すという動作でしたが、これを反映するよう修正しました。
GX_GetOBJVRamModeBmp関数の返り値がGXOBJVRamModeChar型でしたが、これをGXOBJVRamModeBmp型に訂正しました。
GXBg23ControlAffine 構造体に無効なメンバ colorMode が含まれている不具合がありました。 アフィンBGでは256色固定でありこのメンバは無効なため、GXBg23ControlAffine 構造体 から colorMode の定義を削除しました。
G2_GetBG3Control* 関数, G2S_GetBG3Control* 関数を使用した際に不正なアドレスへのアクセスが発生する不具合があり、この不具合を修正しました。
新設されたWVRライブラリ(詳細はNote 22-40)及び ichneumon コンポーネント(詳細はNote 22-01)により、
VRAM上でARM7側無線ライブラリを駆動する機能が提供されましたが、
無線ライブラリが駆動している際にそのVRAMバンクを別用途に使用することはできません。
これまでに提供しております GX_SetBankFor* 関数群はWVRライブラリによってロックされているVRAMバンクの割り当て直しを行うと
OS_Panic 関数を呼び出して停止するように修正されました。また、別途VRAMバンク割り当てを試行する GX_TrySetBankFor* 関数群が新規追加されました。
なお、この追加に関連して、GX_Init 関数の呼び出しより前に OS_Init 関数が呼び出されていることが必要となりましたので、この点に注意してください。
MATH_CountLeadingZeros 関数は ARM コード出力時には ARM プロセッサのclz 命令を使った inline 関数に、また、
THUMB コード出力時には clz と同等の動作をする関数に置き換わりますが、
NITRO_CODEGEN=THUMB でデフォルトのコードを THUMB コードにした状態で #include <nitro/code32.h>
による出力コードの切り替えを行なっても、MATH_CountLeadingZeros 関数は inline 関数に切り替わりませんでした。
この不具合を修正しました。
DSダウンロードプレイ親機の配信するビーコン中にユーザアプリがデータを設定する為のインターフェイスとして、以下の関数を追加しました。
MB_FakeInit 関数を使用する擬似マルチブート子機は、このインタフェースを通して接続前の親機からユーザ固有の付随情報を受信することが出来ます。
このデータの有無は、IPLのDSダウンロード子機の動作には一切影響を与えません。
DS アプリケーション上でデータを実行時に圧縮するための、以下の関数を追加しました。
AGBカートリッジ用のROMアクセスサイクル設定関数 MI_SetAgbCartridgeFastestRomCycle 関数を追加しました。
これは DS での 8-4アクセスの設定を行なう関数で、AGB での 3-1 ウェイトに相当します。
「Note 21-33: (MI) 多重DMAの不具合への対処」に示したように DMA0 を使用した後はダミーの空 DMA 転送を行なっていますが、 DMA0 を使う初回のDMA転送に対処するために、OS_Init 関数の時点でもダミーの空DMA転送を行なうよう処理を追加しました。
マイクの自動サンプリングについて、ARM7内で行われる処理を最適化しました。
このことにより、mic-1サンプルデモでサンプリングレートを32kHzにした場合にフリーズするという不具合が修正されました。
リファレンスの、OSの概要ページに「割り込み概要」ページへのリンクを追加しました。
割り込み概要ページ自体は NITRO-SDK2.0 RC4 の時点で追加されていましたが、そのページへのリンクがありませんでした。
OS ライブラリに、スレッドのリスケジューリングを一時停止および再開を制御する関数 OS_DisableScheduler 関数と OS_EnableScheduler 関数を追加しました。
キャッシュが破棄されないようにロックする DC_LockdownRange 関数, IC_LockdownRange 関数に、 一部ロックされない領域が残る可能性があるという不具合があり、この不具合を修正しました。
キャッシュのロックダウンされたブロックを解放し、再びキャッシュの置き換えを発生可能にする為、以下の関数を追加しました。
OS_ResetSystem 関数内の、DC_FlushAll 関数を呼び出している個所の後で DC_WaitWriteBufferEmpty 関数を呼ぶように処理を追加しました。
これは、リセット以前に残っていたキャッシュが、OS_ResetSystem 関数で読み込んだプログラムデータを後から上書きしてしまうという可能性があったためです。
命令TCMのベースアドレスを取得するOS_GetITCMAddress 関数を追加しました。この関数の返り値は常に定数 0x01FF8000 を返します。
LCDオフ状態からスリープモードに移行し、その後スリープモードから抜けた時にグラフィックモードの状態復帰処理に不具合があり、
画面が表示されない場合がありました。これを、LCDオフの状態に戻るようにしました。
アクティブモードからスリープモードに遷移した場合の復帰には影響はありません。
NITRO-SDK で配布するサウンドライブラリが2005年02月22日版となりました。
MP 通信の 8 〜 15 番 port を使用して行う Sequential 通信において、特定の状況でパケットが複製されてしまう不具合があり、これを修正しました。
上記すべてを満たす場合に、次の再送で同一のパケットを新規パケットとして受信してしまいます。
DataSharing においては、停止や同期ずれなどの形で顕在化します。
なお、複数のパケットが1つのペイロードにパックされないとこの問題は発生しませんので、double mode を使用していない場合もしくは
WM_SetParentParam 関数で設定した最大送信サイズが DataSharing のパケットを同時に1つしか送れないサイズであった場合には、
この問題が発生することはありません。
WM_StartMPEx 関数のリファレンスに制限事項の記載を追加しました。
この関数で minPollBmpMode 引数を TRUE にした状態で Sequential 通信を行う場合は、使用中の全ての Sequential 通信の port において、
60 フレーム以上データを受け取らない子機が存在しないよう、定期的に全子機に対して keep alive データを送信するなどの対応を行ってください。
WM_SetMPDataToPort* 関数が送信に失敗した場合に発生する WM_ERRCODE_SEND_FAILED の通知コールバックにおいて、 引数に与えられる restBitmap メンバに正しい値が入っていない不具合があり、これを修正しました。
無線通信中の親機が子機と接続している状態でWM_Reset関数を呼び出すと、呼び出した状況によっては長い時間(通常 4 秒、 WM_SetLifeTime 関数によって改変可能)処理が完了しない場合があるという不具合があり、これを修正しました。
WM_IsBssidEqual 関数および WM_CopyBssid 関数の引数が暗黙的に16bit境界整合されたアドレスを要求し、
そのため奇数のアドレスに対して正しく動作しないという不具合があり、これを修正しました。
また、従来と同等の機能を持つ WM_IsBssidEqual16 関数および WM_CopyBssid16 関数を新たに追加しました。
WM_StartParent 関数および WM_StartConnect 関数について、 非同期処理が正常に完了したことを示すコールバックより先に接続完了後に起こるイベントの通知がコールバックされることがあり得る、 という点について注意書きをリファレンスマニュアルに追記しました。
特定のパターンでデータを送信しようとした場合に再送が発生すると、送信すべきデータが消失し、
送信完了コールバックも返ってこなくなる不具合があり、これを修正しました。
この問題は、ブロードキャスト通信と特定の子機相手の通信を同時に行っている場合に発生することがあります。
$NitroSDK/build/demos/wireless_shared/wh 以下のサンプルソースコードに対し、以下の修正を行いました。
$NitroSDK/build/demos/wireless_shared/wfs 以下のサンプルソースコードに対し、以下の修正を行いました。
より詳細な設定の元に処理を行う以下のAPIが追加されました。
WM_StartMP(Ex)関数によってMP通信を開始した際、この関数のコールバックが呼ばれる前にMP通信の途中通知がコールバックされる場合がありました。 これを修正し、WM_StartMP(Ex)関数のコールバックが発生する前にはMP関連の途中通知が一切行われないよう内部動作を変更しました。 この変更により、子機が接続・切断を繰り返した際に、まれにARM7の動作が停止するという不具合が修正されました。 また、WM_StartMP(Ex)関数を呼び出してコールバックが呼び出される前の状態の時に、子機が親機から切断されると、 その後ライブラリが正常に動作しなくなる可能性が発見されました。この問題を修正しました。
無線通信の親機になる際、正常に親機になったにも関わらずビーコンが送信されない現象がまれに発生するという不具合があり、この問題を修正しました。
従来は、通信終了時に送信キューに溜まっていた送信データに関しては対応する WM_SetMPData* 関数にコールバックを返していませんでしたが、 必ずコールバックが返るように変更しました。これにより、WM の全ての非同期 API はコールバックを最低一度は返すようになりました。
無線親機が接続許容台数に近い子機と接続している状態で新たに複数の子機に接続された際に許容台数を越える子機と接続してしまい、 その後のライブラリの動作に不具合が生じる可能性がある、という問題が確認されました。この問題を修正しました。
ワイヤレス通信ライブラリの解説ドキュメントが、正式版として docs/TechnicalNotes/AboutWirelessManager.pdf に公開されました。
ichneumon コンポーネント(詳細はNote 22-01)の追加に伴い、 このコンポーネント使用時にVRAM上への無線関連実行コードの配置及び起動・停止及び実行コードの退避を制御するライブラリとして、 WVRライブラリが新規に追加されました。
ありません。
(2005/01/14)
ピクトチャットに関連したAPI群を扱うライブラリとして、CHTライブラリを新設しました。CHTライブラリには以下の関数が含まれます。
なお、2004年1月13日現在、DSプログラムガイドラインには、ピクトチャット関連ライブラリの使用についての記述が含まれていません。本ライブラリの使用を検討される場合、まずは弊社業務技術部までご連絡下さい。
数学関数用のカテゴリとして MATH が新設されました。 min, max といったユーティリティ関数のほかに、ARM9 で高速に整数範囲での log2(x) を求める MATH_ILog2 などが含まれます。
線形合同法による乱数ライブラリとして、以下の関数が追加されました。
またデモとして、$NitroSDK/build/demos/math/rand_lc が追加されています。
擬似 DS ダウンロードプレイ子機ライブラリ MB_FakeChild において、リトライ可能な MP 通信エラーが発生した際に、FATAL なエラーとして通信を切断してしまう不具合がありました。 この不具合は修正されました。
MB_ReadSegment 関数の呼び出しで内部スレッドを使用するように設定された場合、 MB_End 関数によるライブラリ終了時に内部スレッドの状態管理が正しく行われず、 再初期化後の動作が異常になるという不具合があり、この問題を修正しました。
MB_End 関数またはMB_EndToIdle関数でMBライブラリを終了させる際、終了処理中に発生する MB 内部イベントとそのタイミングによっては MB ライブラリ終了後に不正な動作をしてしまう場合があり、 この問題を修正しました。
マルチブートデモで使用している以下のソースの中に MBP_USING_PREVIOUS_DOWNLOAD スイッチを追加しました。
このスイッチがONの場合には、エントリーした子機に対して随時先行してデータのダウンロードを開始します。 このスイッチがONの場合のシーケンスでは、子機の接続タイミングによっては、 ダウンロードの待ち時間を少なく抑えられる可能性があります。
無線通信における使用許可チャンネルの有無を確認する関数、WM_IsExistAllowedChannel を追加しました。 この関数は WM ライブラリの内部状態に依存せずに、許可チャンネルの有無のみを判定します。
WM非同期関数群は通常は非同期処理中に他の関数を呼び出すことは基本的に動作が保証されませんが、 WM_SetMPData( ToPort(Ex) ) 関数のみは連続した呼び出しによる送信データの予約が可能な仕様となっています。 この際、10回を越える連続呼び出しを行うと実際に送信されるデータが壊れる可能性がありました。 この為、より厳密な排他処理を行うように修正しました。 修正の結果、データが壊れるような送信要求を行った場合に WM_SetMPData( ToPort(Ex) ) 関数にはWM_ERRCODE_FIFO_ERROR が明示的に返されるように仕様が変更されました。
MP 通信において、ごく稀なタイミングで、子機のパワーセーブの時間が通常より長くなることがありましたが、 これを修正しました。
無線を使用してFSを実現するサンプルデモにおいて、 内部で設定した受信コールバック関数がWFS_Endを呼び出した際にクリアされず、 意図しないタイミングで内部コールバック関数が呼び出されてしまう問題がありました。 この問題点を修正しました。
無線デモ中で親機がチャンネルを決定する際に、使用チャンネルをより分散させるため、 電波使用率が同じチャンネルが複数あった場合に、乱数を使用してチャンネルを決定するように修正されました。 この処理は以下のデモに反映されています。
ファイルシステムライブラリについて解説したドキュメント AboutFileSystem.rtf の内容が全面的に更新され、 AboutFileSystem.pdf として追加されました。
描画用レジスタをリードするGet関数が追加されました。追加された関数は以下の通りです。
サブ2Dエンジンには存在しないビットマップOBJのVRAM拡張フラグが define 値として定義されているという不具合があり、 以下の定義が削除されました。
またGXS_SetOBJVRamModeBmp関数にて、このフラグを使用するような引数を ASSERT でチェックするよう修正されました。
GX でのデータ転送において、データサイズが小さい場合には DMA を使用せず CPU でコピーするよう修正されました。 32bit コピーでは48バイト以下、16bit コピーでは 28バイト以下の同期処理での転送は常に CPU で処理されます。
GX_SetBankForBGEx 関数を使用して VRAM のバンク設定を行なった場合、 DEBUG ビルド時不正なアドレスにデータをロードした際にも ASSERT による警告が出ないという不具合がありました。 この不具合は修正されました。
GX_SetCapture 関数で設定したキャプチャイネーブルフラグは通常キャプチャ完了後に自動的にリセットされますが、 それとは別に即リセットできる解除関数としてGX_ResetCapture関数が追加されました。 ただしキャプチャ途中に途中中断することはできませんので注意してください。
DS カード及びカートリッジの活線挿抜を検知した際に行われる強制停止処理において、無線通信中であった場合に電波送信が完全に停止しない場合がありました。 また、LED の点灯状態が不定となる場合がありました。これらの問題を修正しました。
ユーザアプリケーションから使用する用途が無いため、CARD_ReadRomID 関数は廃止されました。
ワイヤレスダウンロードで起動した子機プログラムなどが不用意に NITRO-CARD へアクセスすることを防止するため、 アクセス許可状態の取得・設定関数を追加しました。 NITRO-CARDから起動していないアプリケーションが NITRO-CARD へアクセスする場合には、プログラミングガイドラインでの規定に従って判定したのちに CARD_Enable 関数を呼び出す必要があります。
TP_GetLatestRawPointInAuto 関数において、 過去1フレームの間にサンプリングされたすべての値がタッチ ON かつ INVALID であった場合にタッチ OFF として扱われていましたが、 この場合にも validity の値を設定してタッチ ON として返されるよう 修正されました。
特定のタイミングでタッチパネルのサンプリングをおこなった場合に、ハードウェアによっては LCD からのノイズの影響を強く受け る組み合わせがあったため、サンプリング時のノイズ対策の強化をおこないました。
自動サンプリング実行中に、サンプリングを停止することなく動的にサンプリングレートを変更する以下の API を追加しました。
また、サンプルデモ mic-1 を一部修正し、このAPIも使用するサンプルとしました。
「Note 6-35: (OS) アプリケーション向けの割り込みチェックフラグの追加」 (NITRO-SDK Version 1.2 PR1) で追加した、割り込み用チェックフラグ OS_IE_USER_FLAG0, OS_IE_USER_FLAG1 が ARM7 でのみ有効になっていました。 これを ARM9 でも有効となるようにしました。
スレッドを指定して終了させる OS_DestroyThread() を追加しました。 (この関数は元々内部関数として用意されていました。)
他のスレッドを予告なく終了させるという少々危険な関数なので使用する際は十分注意してください。
以前(NitroSDK2.0PR4 のリリース時)、「Note 13-18: (PAD) PAD_SetIrq(), PAD_ClearIrq() の廃止」にあるように キー割り込みの使用が禁止されました。 そこで、OSデモの中の interrupt-key-1 (キー割り込みデモ) を廃止しました。 さらに、キー割り込みを使用していた WaitIrq-2 をタイマ割り込みを使うように変更しました。
これまで拡張メインメモリアリーナを使用するためには、OS ライブラリを NITRO_MEMSIZE=8M の指定で make する必要が ありましたが、OS_Init() (OS_Init() を使用していない場合は OS_InitArena()) の前に OS_EnableMainExArena() や OS_DisableMainExArena() を指定することで拡張メインメモリアリーナを使用する/しないの宣言をすることが出来るようになりました。 ただしメインメモリを 4MB しか搭載していない環境(実機を含む)で動作させた場合は常に拡張メインメモリアリーナは使用できません。
OS_DisableWriteBufferForProtectionRegion() 関数に間違いがあり、 OS_EnableWriteBufferForProtectionRegion() 関数と同様に機能する関数となっていました。これを修正しました。
ヒープに関する以下の関数を追加しました。
また、OS_CheckHeap() の型を long から s32 にしました。
圧縮データのストリーミング展開がサポートされました。この機能を使用すると、カードから圧縮データを読みながらより少ないバッファで LZ 圧縮、ランレングス圧縮、ハフマン圧縮されたデータの展開を行なうことが可能となります。 実際にデータのストリーミング展開をおこなうサンプルとして以下のデモが追加されました。
MI_SendGXCommandAsyncFast() と MI_SendGXCommandAsync() で、すでに指定のDMAを使用していたときに終了待ちを行なう個所で、 volatile 指定が適切でなく終了をうまく待てていませんでした。これを修正しました。
多重DMA時のハードウェアの不具合対処として、DMA0 を使用したときのソースアドレスに制限を設けました。 具体的には、DMA0 のソースアドレスに 0xmmnnnnnn (mm=0x04,08〜ff nnnnnnは任意) は指定できないようにしました。転送終了時のソースアドレスもこの制限が適用されます。
また、DMA0 を使用した後はダミーの空 DMA 転送を行なうようにしました。
なお、DMA1 〜 DMA3 には制限はありません。
PXIのコントロールレジスタのクリアと PXI 割り込み設定の順序を、 「割り込み設定→レジスタクリア」 から、「レジスタクリア→割り込み設定」 となるように変更しました。
これは、以前の順序だと、割り込みを設定したときに PXIの FIFOレジスタにデータた残ったままだとその時点で割り込みが発生して しまうためです。
クローンブート機能を使用するアプリケーションにおいて、 attachsign ツールによって認証コードを追加するための領域がROM イメージ上に確保できるかどうかを、ROM イメージ生成時点で判定する機能を makerom に追加しました。
この機能は makerom の起動オプションとして -A を追加することで有効になります。 Makefile を使用している場合は以下のように MAKEROM_FLAGS にオプション -A を設定すると良いでしょう。
MAKEROM_FLAGS = -A
これまで $NitroSDK/docs/TecnicalNotes 以下のドキュメントは doc や rtf など 様々な形式で置かれていましたが、これを pdf 変換した pdf形式ドキュメントに統一しました。
make -s 時のコンパイルおよびリンクメッセージを変更するデモを $NitroSDK/build/demos/tips/MyBuildMessages に用意しました。
クローンブート使用時にバイナリへの署名の前準備を行なう emuchild.exe は常にフルサイズのファイルを出力していましたが、 出力ファイルサイズを小さくする為、ARM9,7のstatic領域以降のデータを除外するように変更されました。 これまで通りのフルサイズのバイナリを出力するためには追加された -f オプションを使用してください。
NITRO-SDK で配布するサウンドライブラリが2004年12月27日版となりました。
ありません。
(2004/11/29)
DSカードから起動したアプリケーションがDSダウンロードプレイの 親機に対して、擬似的にDSダウンロードプレイ子機としてエントリーを行なう為の機能が追加されました。 この機能を利用すると、ワイヤレス対戦において DS ダウンロード子機とマルチカード子機を共存させることが 可能になります。
また、デモプログラムとして、 multiboo-Model の親機サンプルに対してエントリーをおこなう fake_child デモが以下のフォルダに追加されました。
$NitroSDK/build/demos/mb/fake_child
NITRO-SDK2.0RC2にて、MB_GetParentSystemBufSize( ) 関数が返す バッファサイズが実際の値よりも WM_SYSTEM_BUF_SIZE バイトだけ小さい値になってしまうという不具合があり、修正しました。 なお、同義のバッファサイズとして nitro/mb.h で定義されている MB_SYSTEM_BUF_SIZE はこの不具合の影響を受けません。
MB_ReadSegment( ) 関数に引数として与えるバッファ長について、 MB_GetSegmentLength( ) 関数の返り値を下回るサイズでも 指定可能なように機能を拡張しました。 この最低サイズは MB_SEGMENT_BUFFER_MIN として定義されます。 この拡張機能を使用した場合の詳細については、 MB_ReadSegment( ) 関数のリファレンスを参照下さい。
他カテゴリとの統一のため、現行の MB_StartParentEx( ) 関数および MB_EndEx( ) 関数の名称をそれぞれ MB_StartParentFromIdle( ), MB_EndToIdle( ) へと変更し、古い名称は廃止されました。
DSダウンロードプレイデータの配信時に、WM_Disconnect( ) を使用して親機側から子機を切断した場合に、MBライブラリの内部状態に不整合が発生する不具合がありました。 MB通信中にも安全に子機を切断することのできる, MB_DisconnectChild( ) 関数を追加しました。
DSダウンロードプレイの親機で、受信バッファサイズの設定を変更した 場合に以下の不具合が発見されました。
このため仕様を変更し、MB 親機での受信バッファサイズは変更不可としました。 これにともない、以下の関数における受信バッファサイズを設定する引数を廃止しました。
クローンブートのプログラム作成手順を例示するサンプル cloneboot が追加されました。
multiboot-Modelデモで子機がブートした後に親機に再接続する際、一度でも親機への接続に失敗するとリトライができないという不具合がありました。
この不具合は以下のように修正されました。
本デモを参考にアプリケーションを作成されておられる場合は、上記の修正点をご確認ください。
$NitroSDK/docs/TecnicalNotes/AboutMultiBoot.doc に DS ダウンロードプレイの手順や DS ダウンロード親機との再接続、 クローンブート等に関するドキュメントが追加されました。
Release 版、Debug 版の mongoose コンポーネントにおいてドライバを動作させる のに必要とされる量のワークエリアを確保できない場合がありました。また、全てのバージョンで mongoose のワークエリアを再利用する際の処理に問題があり、特定の順番で API を呼び出して接続・切断を繰り返した場合にワークエリアが 足りなくなり、接続処理が正常に動作しなくなる可能性がありました。これらの問題を修正しました。
通信中の子機の ARM7 が halt 状態に遷移するなどしてフリーズした場合、 子機の無線ハードウェアが自動的に Null 応答を返しつづけるため、親機アプリケーションからは、異常の発生を検出できませんでした。これに対処するため、子機が Null 応答を一定時間返しつづけた場合には、その接続を切断するように内部処理を変更しました。
また、通信中の親機の ARM7 が halt 状態に遷移するなどしてフリーズした場合も同様に、親機の無線ハードウェアが自動的にビーコンを送信し続けるため、子機アプリケーションからは異常を検出することができませんでした。そこで、親機からMPフレームを一定時間受信できない場合に自動的に切断 するように変更しました。親子共に切断までのデフォルト値は 4 秒となっています。
また、これに伴い WM_SetLifeTime( ) に mpLifeTime 引数が追加になりました。
なお、通常は Null 応答や MPフレーム送信のスキップ は一時的に ARM7 の負荷が高くなった場合に発生するものであり、連続して発生するものではありません。
WMライブラリを使用した無線通信プログラムサンプル dataShare-Model を例に取った、無線通信プログラムを作成する為のチュートリアルとなるドキュメント、「ワイヤレス通信チュートリアル」を追加公開しました。
オーバーレイを非同期にロードする関数として FS_LoadOverlayImageAsync( ) 関数を追加しました。
非同期にロードしたオーバーレイをデバッガへ登録するための関数FS_RegisterOverlayToDebugger( ) の機能は FS_StartOverlay( ) に統合されました。 このため、ユーザプログラムからの FS_RegisterOverlayToDebugger( ) の明示的な呼び出しは不要となりました。 互換性のため、この API は何もしない空の関数として残っています。
VCOUNT 一致割り込みの現在の設定を取得するための API GX_GetVCountEqVal( ) を 用意しました。また、関連する API の GX_SetVCounterEqVal( ), GX_IsVCounterEq( ) は、それぞれ GX_SetVCountEqVal( ), GX_IsVCountEq( ) に名称を変更しました。ただし、以前の API 名称もマクロによる別名定義により使用可能となっています。
BG用のVRAMバンク設定でVRAM-AとVRAM-Eなど連続したアドレスを確保できない組み合わせを使用するための関数として、 GX_SetBankForBGEx() を追加しました。 この関数を使用することによって、0x6000000-0x6017FFFには VRAM-EFG が割り当てられ 0x6020000-0x607FFFF には VRAM-ABCD のうち最大3つのバンクが割り当てられます。
また、この関数を使用したデモとして、 demo/gx/UnitTours/2D_CharBg_BankEx が追加されました。
カード抜けを検出した後にデフォルトで呼ばれる CARD_TerminateForPulledOut( ) を 必ず OS_Terminate( ) で停止するという処理から、蓋が開いていればこれまで通りの停止で、 蓋が閉まっていれば強制的に電源をオフにするようにしました。
ntrcompを使用して差分フィルタをかけられたデータをランタイムで復元する以下の関数が追加されました。
また、MI_GetCompressionType( ) 関数で得られるデータタイプに MI_COMPRESSION_DIFFが追加されました。
CPUによるメモリクリア関数は crt0.c で定義し、他のライブラリ(OS, MI) はそれを利用していましたが、マルチブート子機となったDSがデータ受信キャンセルした場合、この領域が破壊されることがありました。 そこで、crt0 で使用するメモリクリア関数と他ライブラリのメモリ クリア関数を互いに独立させるようにしました。
VAlarmに複数のアラームを設定すると、設定したVカウントや遅延許可ライン数、割り込みの発生するタイミングなどによってアラームが発動する順番が正しく制御されない場合があるという不具合がありました。この不具合に起因して、無線通信中にタッチパネルの自動サンプリングが正常に行われない可能性があるという問題がありました。 この不具合を修正しました。
以下の デバッグに関係した OS 関数を weak シンボルとしました。 ユーザが同名の関数を定義した場合、そちらが優先されます。
また、OS_Panic( ), OS_Warning( ), OS_TPanic( ), OS_TWarning( ) の実体である OSi_Panic(), OSi_Warning(), OSi_TPanic( ), OSi_TWarning( ) も weak シンボルとしました。
SND_InvalidateWaveData( ) 関数で、関係のない発音も止められてしまうことがある不具合がありました。この不具合により、サラウンドモード中にメモリ上のサウンドデータを破棄すると、以後サラウンドモードを停止させるまで 発音が行われなくなることがありました。 この不具合は修正されました。
MIC_GetLastSamplingAddress( ) に以下の不具合がありました。
これらの不具合は修正され、MIC_GetLastSamplingAddress( ) 関数は「最後にサンプリングしたデータを格納したメモリ位置を返すが、一度もサンプリングしていない場合はNULLを返す」という仕様に変更されました。
図形認識 API のうち、regularize という綴りを持った識別子は 全て normalize と変更されました。
PRCInputPatternParam
PRCPrototypeDBParam
PRCPrototypeList
の各構造体のメンバ変数に変更があります。 また、$NitroSDK/tools/bin/pdic2c.pl の出力する C プログラムの定数値も PDIC_NORMALIZE_SIZE に変更されました。
WM_StartMP*( ) の引数 sendBuf と WM_SetMPDataToPort*( ) の引数 sendData とに 誤って同一のバッファを割り当ててしまわないよう、 この二つのバッファが同一だった場合はエラーとなるように変更しました。
「Note 20-15: (GX) GX_SetBankForBGEx( ) 関数の追加」の、 GX_SetBankForBGEx( ) 関数を使用すると、現状では DEBUG ビルド時のリージョンチェックが行なわれず、 不正なアドレスに書き込んだ場合にもASSERTに引っかかりません。この不具合は次以降のリリースで修正されます。
(2004/11/04)
WM_GetAllowedChannel() においてエラーが発生したとき(WM_Init() が先に呼ばれていない)の返値を 0 から 0x8000 に変更しました。
これは許可されているチャネルがなかった場合(返値が 0x0000)とエラー発生とを区別するためです。
WM_End( ) 関数において、ユーザーコールバックが呼び出された後にメモリの解放などライブラリの強制終了処理を行う仕様でしたが、コールバックが呼び出された時点で全ての終了処理が完了している状態になるよう仕様を変更しました。
この変更は WM_End( ) 関数に対するコールバック内で、次の WM_Initialize( ) 関数を呼び出したいとのご要望に対応したものです。
WM_Disconnect( ) 関数、及び WM_DisconnectChildren( ) 関数に対するコールバックに渡される構造体を新規に追加しました。WMCallback 構造体に切断を要求した機器の AID ビットマップ及び結果として切断された機器の AID ビットマップを示すメンバを追加した構造体です。
新設された WMDisconnectCallback 構造体の先頭のメンバー変数は、これまでの WMCallback 構造体と互換性を保っているので、WMCallback 構造体として取り扱っても問題はありません。
WM_Reset( ) 関数を、MP 通信接続確立後に呼び出すと MP 通信用の自動処理がリセットされずに残るという不具合がありました。
この不具合を修正し、自動処理部分も確実にリセットされるようにしました。これにより処理の負荷が下がる可能性があります。
WM_EndDataSharing( ) 関数とWM_EndMP( ) 関数の間に MP 通信が発生した場合に不正な処理が起こる可能性がありましたが、これを修正しました。
なお、WM_EndDataSharing( ) 関数とWM_StartDataSharing( ) 関数をこの順に連続して呼び出すと不具合が起こることがありますので、ご注意ください。
RC1 以前のライブラリのデータシェアリングにおいて、共有サイズ×共有台数の上限は 252 バイトでしたが、これを 508 バイトに拡張しました。それにともない WMDataSharingInfo の構造体サイズが 1K バイト増えています。以前の状態に戻したい場合は wm.h の WM_DS_DATA_SIZE_252 を #define してください。
MB_Init() の引数の MBUserInfo を設定する際に、ユーザ名の終端がNUL文字で判定され長さを示す nameLength を変更しても子機画面に反映されないという不具合がありました。
この不具合は修正されました。
従来の MB_StartParent( ) 関数、MB_End( ) 関数と対応して、無線ライブラリが IDLE 状態であっても呼び出すことの可能な MB_StartParentEx( ) 関数、および無線ライブラリを IDLE 状態にして終了する MB_EndEx( ) 関数を追加しました。開始前・終了後の無線ライブラリの状態以外の点では、どちらも同じように使用することが出来ます。
マルチブート親機側が MB ライブラリを起動中に MB_RegisterFile( ) 関数と MB_UnregisterFile( ) 関数を交互に呼び出して登録プログラムを動的に変更すると、変更前後の登録プログラムの GGID が一致している場合にIPL 側でその変更を検出できないという制約がありました。
その問題を回避するための注意事項を MB_UnregisterFile( ) 関数のリファレンスに追加しました。
マルチブート使用時にMBの前処理として電波使用率を調査するデモが $NitroSDK/build/demos/mb/mbm として追加されました。デモ中のMBM_MeasureChannel( ) は、最適なチャンネルを取得した後無線のパワーを OFF にするため、コールバック取得後に通常通り MB_Init( ) からマルチブート処理を開始してください。
multiboot サンプルデモの親機動作において、無線の接続セッションの管理を行なうための tgid の設定値を電源 ON 毎になるべく異なった値になるように修正しました。tgid の値として RTC から取得できる現在時刻の分と秒の値を利用しています。
MB_End( ) 関数において、ユーザーコールバックが呼び出された後にメモリの解放などのライブラリの終了処理を行っていましたが、コールバックが呼び出された時点で全ての終了処理が完了している状態になるよう修正しました。
これは Note 19-05 と同様の修正で、MB_End( ) のユーザコールバック内で MB の再初期化を行なう場合に対応したもので、ドキュメントとの実動作とが一致していないという不具合の修正となります。
wbt-fs サンプルデモで子機側のファイルアクセス中に親機との通信が切断された場合、その時点以降に呼ばれたファイル操作が完了しない場合があるという不具合があり、これを修正しました。
wbt-fs サンプルデモ内部の受信データのキャッシュ操作において、Flush すべき部分に対して Invalidate していた個所がありました。
この問題を修正しました。
WBTライブラリについて、以下の問題が修正されました。
オーバーレイモジュールを FS_LoadOverlay( ) などの上位関数を使用せずに、ファイルリードなどの下位関数の組み合わせでオーバーレイモジュールをロードする際に、デバッガへオーバーレイのロードを通知するための関数 FS_RegisterOverlayToDebugger( ) をFSライブラリへ追加しました。
FS_GetOverlayFileID( ), FS_ReadFile( ) および FS_StartOverlay( ) の組み合わせでオーバーレイをロードする場合、この関数を FS_StartOverlay( ) の前に呼び出すことによってデバッガ上で追跡することが出来ます。
この使用方法を示すコードを、$NitroSDK/build/demos/fs/overlay に追加しました。
Vカウントによるアラーム(VAlarm)の処理ルーチンを変更しました。これまでは割り込みによるループ最初の VAlarm は指定のVカウントちょうどでなければハンドラの呼び出しは起こらず、これを用いている無線などのライブラリで処理の遅延が発生していました。
ここで「割り込みによるループ最初のVAlarm」とは、文字通りVカウント割り込みによって呼び出されるVAlarmハンドラであり、内部ではこれが呼ばれた後に(割り込みによらず)登録されている他のアラームの呼び出しカウントを調べ、必要ならばハンドラを呼び出す、という処理を行なっています。
今回の変更では、割り込みによって呼び出されるVAlarmハンドラが、指定のVカウントをある程度過ぎていても呼び出されるように、呼び出し遅れ許容Vカウント範囲(delay)を指定できるようになりました。(間に合わなかったものは次のフレームにまわされます。)
そのために Vアラームの設定関数 OS_SetVAlarm() では delay の引数が増えました。
従来、
OS_SetVAlarm( alarm, vcount, handler, arg );
と呼び出していたものは、
OS_SetVAlarm( alarm, vcount, delay, handler, arg );
となります。詳細は OS_SetVAlarm() のリファレンスマニュアルを参照してください。
また、周期Vアラームでは、これまでも delay 指定がありましたが、やはり割り込みで掛かるVAlarm では delay が利いていませんでしたので正確に delay の遅れまではアラームが発生するようにしました。
OS_SetVAlarm() の引数が一つ増えましたが、delay を指定しない従来の呼び出しを行ないたい場合は、引数は同じで OS_SetVAlarm() の代わりに OS_SetOneTimeVAlarm() を呼び出して下さい。これは delay に 10を指定したのと同様の関数となります。(従来も内部では、delay=10として扱っていました。)
delay の最大値は OS_VALARM_DELAY_MAX となります。これを指定する場合、どんなに遅れても指定のVアラームハンドラが呼び出されます。
以下の色情報定義と関数を追加し、リファレンスを追加しました。
関数コスト計測プロファイラの OS_CalcThreadStatistics( ) で行うコスト計算で、カレントスレッド以外のスレッドを対象にした場合に不具合がありました。コスト計算の結果を統計バッファに反映させた後、コストバッファをクリアするのですが、対象スレッドではなくカレントスレッドのバッファをクリアしていました。これを修正しました。
チック値の設定関数(OS_SetTick( ) )に不具合があり、他の割り込み要求フラグを落としてしまうことがありました。これを修正しました。
なお、アラームシステムを使用している場合はその動作に影響を及ぼす場合があるため、アプリケーションで OS_SetTick( ) することに対しては十分な注意を払う必要があります。
リセット関数 OS_ResetSystem( ) はハードウェアの初期化を伴わないため、これを呼び出す前にハードウェアの機能を明示的に停止させる、または停止していることを確認する必要がありますが、安全性を高めるため、幾つかのハードウェア機能についての停止処理を関数内部に追加しました。
また、リセット処理の一部がメインメモリ上で行なわれていたため、この部分を破壊される場合にリセット処理が正常に行なわれない不具合があったことも修正しました。
DTCM へデータセクションを設置し autoload でロードしていた場合に正常な処理が行なわれませんでした。これを修正しました。
ワイヤレスダウンロードによって起動されたプログラムが実際に挿入されているNITRO-CARDのROM内登録情報を取得することの出来る関数 CARD_GetRomHeader を追加しました。
CARDライブラリおよびその上位ライブラリ関数においてCARD-ROMへのアクセス時に他の自動起動DMAとの重複実行を判定する処理が抜けていたため、この判定処理を追加しました。
ARM7 のコンポーネントとして ferret を使用した場合、カードとカートリッジの抜き検出を行なうことが出来ませんでしたが、この機能を追加し ferret 使用時で検出が出来るようになりました。
この検出機能は TS 版のライブラリでのみ有効です。
NITRO-SDK 2.0 RC1 の修正「Note 18-16: (PM) スリープ時の残像を避ける修正」を行なうことで次のような不具合が発生していました。残像を避けるために行なった修正により、PM_GoSleepMode( ) でスリープに入り復帰するとGXライブラリの内部状態がスリープ前と異なってしまい、LCD が正しく復帰しない場合がある、というものです。これを修正し、スリープ後に正常に LCD が復帰するようにしました。
DEBUG 用 MI ライブラリにおいて DMA の際の転送アドレスが ITCM や DTCM に含まれているかどうかを ASSERT チェックしています。この ITCM の開始アドレスが 0x00000000 となっていました。これを正規の値の 0x01FF8000 に変更しました。
DMAを用いてメモリを同じ値でフィルする、MI_DmaFill*( ) が関数実行途中で割り込みが発生すると、そのタイミングによっては正常に値の転送が行なえなくなっていました。これを修正し、MI_DmaFill*( ) を割り込みセーフ関数としました。
レンダリングエンジンのラインバッファのアンダーフロー(ラインズオーバー) フラグ関連の関数
G3X_IsLineBufferOverflow()、G3X_ResetLineBufferOverflow()
を
G3X_IsLineBufferUnderflow()、G3X_ResetLineBufferUnderflow()
に改名しました。
$NitroSDK/include/nitro/hw/ARM9内で定義されている以下の定数宣言に誤りがありました。
これらの不具合は修正されました。
G3X_initTable関数内のテーブルを0クリアする際に、トゥーンテーブルの終わり16バイトがクリアされない不具合がありました。
この不具合は修正されました。
NITRO-SDK で配布するサウンドライブラリが NITRO-SYSTEM 2004年10月12日版のものとなりました。この変更は 2.0RC1plus3 以降のパッチにも追加されいます。
カートリッジへ指定の周辺機器が搭載されているかを調べるための関数、CTRDG_IsNumberID()、CTRDG_IsBitID( ) のリファレンスマニュアルが追加されました。
製品版 IPL を模した mb_child プログラムを $NitroSDK/bin/ARM9-TS/Rom 以下へ収録しました。以前のものは mb_child_simple.srl と名称変更されています。
また同ディレクトリに無線テスト用のツールである WMTestTool.srl を収録しました。以下のテストモードが使用できます。詳細なマニュアルは現在準備中です。
ありません。
(2004/10/07)
※2.0RC1における WM ライブラリの変更により、2.0FC までのプログラムはそのままではコンパイルに通らなくなっています。 主に修正するべき点についてはこちらをご参照ください。
1) TESTモード操作関数 WM_StartTestMode( ), WM_StopTestMode( ) を削除しました。
2) WM_GetAllowedChannel( ) は同期関数であるにも関わらず WM_PowerOn( ) を行った後の IDLE ステートでないと有効な値を返さないという仕様でしたが、 ライブラリ使用者の混乱を招く恐れがありましたので、WM_Init( )関数によって初期化した後であればいつでも有効な値を返すように修正しました。
3) 無線で通信を行いながらサウンドライブラリを使用してある程度高音程の音を鳴らすと、ノイズが乗るという不具合がありましたが、この不具合は大きく改善されました。
4) NintendoDS 以外の無線通信機器などの影響等により無線通信プロトコルに復旧不能な致命的なエラーが発生した場合、電波が届かなくなった場合などと同様に接続が自動的に切断される仕様となりました。アプリケーションは、通常の切断とまったく同じ通知を受け取りますので、対応コードを新たに書く必要はありません。
5) NintendoDS 本体ごとに無線通信時に必要な固有の設定値が内部的に保存されていますが、この設定値が何らかの理由で破壊されると正常に通信ができなくなります。このため、無線用の設定値が壊れた状態で無線通信を試みた場合は自動的にプログラムが停止するようになりました。
6) ゲームグループ ID について、u16[2] 型の定義と u32 型の定義が混在しており混乱を招いていた為、これをu32 型に統一しました。APIとしてインターフェースの変更が行われたものは以下の通りです。
また、この変更に伴い無線通信を行うサンプルデモをそれぞれ修正しました。
7) WM_StartMPEx( ) に引数 ignoreFatalError が追加されました。通常使用の場合は FALSE を与えるようにしてください。
8) WMParentParam で指定できる親子それぞれの最大送信可能バイト数の最大値が 508 バイトから 512 バイトに増えました。 ただし、MP通信の所要時間の 5600 μ秒の制限は変わっていませんので、 この制限内で送信バイト数を設定してください。 なお、MBライブラリのMB_COMM_PARENT_SEND_MAXの値はそのままとなっています。
9) WM_StartMPEx の minPollBmpMode が TRUE の状態で親子の距離を離していった場合、 WM_GetLinkLevel の返り値が最高レベルの 3 のままで切断されてしまう不具合がありましたが、 これを修正しました。 同時に、WM_GetLinkLevel で取れる電波受信強度の振る舞いが変更されました。 値が変動する頻度が緩やかになっています。
10) MACアドレスについて、u16[3] 型の定義と u8[6] 型の定義が混在しており混乱を招いていた為、 これを u8[6] 型に統一しました。APIとしてインターフェースの変更が行われたものは以下の通りです。
また、この変更に伴い無線通信を行うサンプルデモをそれぞれ修正しました。
11) プログラミングガイドラインで規定されている MP 通信所要時間を上回る設定値を使用していた 全ての無線サンプルデモについて、正しく範囲内の値を使用するよう修正しました。
mb_child.srl において親機のユーザ名が 10 文字になっている場合正常に動かないという問題がありましたが、 修正されました。
IPL のダウンロード時の表示シーケンス確定に従い、 これまでデモでは親機はデータ転送後にブート準備が整うのを待っていましたが、 データ転送前に子機が揃うのを待ち一斉にデータ転送を開始するように変更しました。
マルチブートに使用する子機用プログラムの mb_child.srl は画面表示に日本語を使用していましたが、 これを英語表示へ改めました。
WBTにおいて、 WBT_GetBlock 関数で処理中のファイル受信操作をキャンセルするための WBT_CancelCurrentCommand 関数が追加されました。
ballデモで「Failed sound alarm OS_SendMessage」という警告が出ていましたが、対処して出ないようにしました。
この警告は、ARM7のサウンド処理が正常に行われていないことを示しています。 44kHzの音を3オクターブ以上高い音で16音同時に再生するような状況下でも、 CPU処理に高い負荷がかかるために、この警告が出る場合があります。 CPU処理に大きな負荷を与えるサウンド再生を行わないように注意してください。
mb/multiboot デモの処理で親機が使用するユーザ名を NintendoDS本体のオーナー情報から取得するよう変更しました。
ただし、 TS_VERSION < 200 かつ NVRAM_FORMAT < 100 の TS や TEG など OS_GetOwnerInfo() 関数が使用できない古い環境では従来どおり固定値を使用しています。
ROM ファイルに組み込まれている NITRO-SDK のバージョンを表示するツール showversion を収録しました。 NITRO-SDK 2.0FC 以降でのみ有効です。 詳しい制限事項は リファレンスマニュアルをご覧ください。
バナー表示ツールの最終版を収録しました。以前のものと比べ、使用可能フォントなどに違いがあります。
アプリケーション独自の lsf ファイルを使用している場合、 常駐モジュールのセグメント名と srl/nef ターゲット名が異なる設定であった場合に、 NITRO_COMPRESS 有効時のモジュール圧縮処理でエラーが発生していました。
lcf テンプレートファイルを修正し、 lsf ファイルの記述より中間ファイルcomponent.files を出力し、 compstatic でそのファイルを参照することで、 lsf ファイルの常駐領域名称の記述とモジュール圧縮処理がリンクされるように修正しました。
これまで、 起動時にメインメモリ用のプロテクションリージョンのサイズを常に4MBにしておき、 OS_InitArenaEx() を呼んだとき(OS_Init() 内で呼ばれます) SDK_8M が定義されていて8MBのメモリが搭載されていたときにのみ プロテクションリージョン設定を8MBとしていました。
しかし拡張メモリ領域に autoload でモジュールを転送しようとすると、 その転送は OS_InitArenaEx() より前に行われるため、 例外発生により出来ませんでした。
そこでメインメモリ用プロテクションリージョンのサイズについてのルールを次のように変更しました。
この変更によって拡張メモリ領域への転送も可能となります。
OS_ResetSystem() の呼び出し時に、ARM7でサウンドの再生を停止する処理を行うようにしました。
OS_CreateThread() で行っている、スレッド初期化について以下ものを追加しました。
プロファイル機能の一つ、 関数トレースの __PROFILE_EXIT で行っているバッファアンダーフローチェックに誤りがありました。 これを修正しました。 また、アンダーフローを検出した時のレジスタが正しく表示されていませんでしたがこちらも修正しました。
PM_SetLCDPower() で LCD 状態を切り替えたとき、 強制的に LED が点灯状態になっていましたが、 LED の状態を変化させないように修正しました。
スリープ時、スリープ前の画面が残像として残ることがありましたが、 スリープするときに画面出力を切ってから1フレーム待つようにして残像が出るのを避けるようにしました。
スリープ処理を行った後、ARM7 側の IRQ マスクの復帰処理に誤りがありました。 スリープからの復帰要因によっては必要な IRQ 要因を有効にした後、 スリープから復帰してもその要因が有効になったままになっていました。具体的にはスリープ後のカード抜きチェックをカード割り込みによって行なう際に検出できなくなっていました。この不具合の修正を行いました。
以下のようなスリープ時のコールバック呼び出し API を追加しました。 スリープモードに移行する前と、 スリープモードから復帰した後のそれぞれに対して登録することが出来ます。 またコールバックは複数のものを登録することが可能です。
CARD_Init( ) を2度読んだときに、Fifo Callback overridden 警告が出ていました。( FS_Init( ) は CARD_Init( ) を呼び出していますので CARD_Init( ) と FS_Init( ) を呼んだときも同様。) この警告を出ないように修正しました。
以下のカートリッジ関数を正式公開とし、リファレンスを追加しました。
これまで RTC アラームが発生した場合の割り込みと IS-NITRO-EMULATOR ハードウェアの競合問題により正常に RTC アラーム割り込みが発生しないという問題がありました。 この問題への対策として ARM7 にて RTC アラームの状態を定期的に監視するポーリングを行う暫定対策を施していましたが、IS-NITRO-DEBUGGER ソフトウェア Ver. 1.11 にてハードウェアの競合問題への対策が施されたことを受けて、ポーリング方式を廃止し割り込みをハンドリングする方式へ変更しました。
RTC_GetDate( ) 等の関数により取得できる日付構造体において、年月日に対する曜日の整合性が取れていない状態になる可能性がありました。この問題を修正しました。
クリアカラーイメージスロットにVRAMを割り当てることなく、クリアデプスイメージのみを使用するために以下の設定を追加しました。
この時、クリアイメージはすべて 0x0000 でクリアされ α 値も 0 に設定されます。また、この設定の時にはテクスチャイメージスロット 2 は使用不能となりますので、このスロットに VRAM が割り振られないようにしてください。
また、これを使用したデモが demos/gx/ClearDepthOnly に追加されています。
ありません。
(2004/09/30)
テスト公開されていた無線ブロック転送ライブラリ(WBT)が正式公開となりました。
リファレンス及びサンプル wbt-1, wbt-fs が用意されています。
タッチパネルのオートサンプリング処理が、無線処理起動時に停止してしまうという不具合がありました。 これを修正しました。
1) データシェアリング関数の排他制御が行われていない不具合を修正しました。
2) タッチパネルのオートサンプリングを有効にした状態で無線通信を開始すると オートサンプリングが止まってしまう不具合がありました。これを修正しました。
3) 異なるスレッドで同時に無線の非同期 API を呼び出した場合に、 処理結果が不正になる不具合がありましたが、修正しました。
4) データシェアリングの送受信関係の排他制御に問題があり、 ごくまれにデータシェアリングが停止する不具合がありました。 これを修正しました。
5) データシェアリング中に送受信の回復不能なエラーが発生した場合、WM_StepDataSharing が WM_ERRCODE_FAILED を返しつづけるように仕様を変更しました。
6) WM_StartScan を行った際に子機が親機を誤認識する可能性が発見されたので対処しました。
具体的には、「GameInfo 情報の付加されていないビーコンを取得した際に、 直前の WM_StartScan によって取得した GameInfo がそのまま残っており、gameInfoLength を評価せずに直接 GameInfo を参照すると間違った親機情報が得られてしまうという」という現象となります。
この問題への対処として、WM_StartScan にて親機が発見された際に GameInfo の付加されていないビーコンであった場合は GameInfo を 0 クリアする対策を施しました。また、サンプルデモにおいて GameInfo が直前のスキャンの残留ではなく実際に評価に価することを確認するよう修正しました。
multiboot-Model デモの修正 multiboot-Model のデモにおいて、子機が親機に再接続する場合に親機のチャンネルが不意に変わるために接続できない事がありました。
IS-NITRO-EMULATOR ハードウェアの有線接続ではチャンネルに関係なくすべてのチャンネルに接続ができてしまうため、 実際に無線を使った時のみこの問題が発生します。
この不具合を修正しました。
makebanner ツールの修正 2.0PR6 から追加されたバナーファイル生成を行なう makebannerツールに、バナースペックファイルの 1 行目の記述が無視されてしまうという問題がありました。バナースペックファイルの
1 行目がコメント行でない場合、問題が発生します。これを修正しました。
またバナースペックファイルの文字コードが正しくない場合、 エラーを出さずに空ファイルを出力してしまう点を修正し、 リファレンスの文字コードについての記述を "BOM 付きの UTF-16LE" に変更しました。
LIBSYSCALL 処理の修正、および libsyscall.a の格納位置の変更 最終 ROM への組み込み用の libsyscall.a を make 変数 LIBSYSCALL で指定しているにもかかわらず、リンカのリンクオーダーの仕様によりデフォルトの
libsyscall.a がリンクされたままになっていました。
LIBSYSCALL の指定において、リンクオーダー仕様への依存を回避するため、デフォルトの
libsyscall.a の格納位置を他の SDK ライブラリのものと分離しました。これにより LIBSYSCALL で指定した libsyscall.a がリンクオーダー仕様に依らずに優先的にリンクされるようになります。
デフォルトの libsyscall.a は本バージョンから以下に格納されています。libsyscall.a は Debug/Release/Rom 版共通です。
$NitroSDK/lib/ARM9-TS/etc/libsyscall.a
CodeWarrior IDE をお使いの方は、プロジェクトファイルでの libsyscall.a の格納位置の指定を適時修正する必要があります。
NITRO_COMPRESS におけるオーバーレイの圧縮処理修正 compstatic ツールにおいてオーバーレイの圧縮処理を行なう場合に問題が発生し、 正常な圧縮データを生成しない場合がありました。この不具合を修正しました。
バナーファイルのフォントセットを最新のものに差し替えました。 いくつかの文字が削減されていますので、ご注意ください。
またバナーファイルについての詳細は IPL バナーに関するガイドライン文書をご参照ください。
ROM 内に格納されるバナーファイルの先頭が 512 バイトアラインメントされていない場合、
正常な動作が行なわれないことが分かりました。 スペックファイルで AlignAll コマンドにより 512 バイト未満の値を設定していた場合、 これによる問題が発生する場合があります。
これを回避するために Segment All の動作を AlignAll での設定値によらず バナーファイルが 512 バイトアラインメントされるように変更しました。
AlignAll コマンドを使用されていない場合は BannerFile コマンドの前に Align 512 などを挿入していただく必要がありますのでご注意ください。
以下のハードウェアレジスタマップに関する定義値に誤りがありました。SDK中ではこれらの値は使用されていませんので、 これによりSDKの動作に直接の影響はありません。
REG_GX_VRAMCNT_C_MST_SIZE
REG_GX_VRAMCNT_C_MST_MASK
REG_GX_VRAMCNT_D_MST_SIZE
REG_GX_VRAMCNT_D_MST_MASK
REG_GX_VRAMCNT_E_MST_SIZE
REG_GX_VRAMCNT_E_MST_MASK
この不具合は修正されました。
MI_SendGXCommandAsyncFast の修正 MI_SendGXCommandAsyncFast() で起動したDMAのコールバックの中から別の MI_SendGXCommandAsyncFast() を起動できるようにしました。
MI_SendGXCommand() の修正 MI_SendGXCommand() が自動起動 DMA を使用していたため、他の自動起動DMAと衝突する可能性がありました。
そこで MI_SendGXCommand() は即時 DMA のループにして自動起動を排除しました。これまでのMI_SendGXCommand() は MI_SendGXCommandFast() と改名して残してありますが、 自動起動 DMA を含むので使用には十分注意して下さい。
FS_GetPathName() 呼び出し時の不具合修正 FS_GetPathName() 関数を呼び出した場合に、内部処理のミスで SDK_ASSERT により停止する可能性があるという不具合が確認されました
この問題を修正しました。
OS_Init() で呼ばれる初期化関数の追加 ARM9側では、OS_Init() から CARD_Init() を呼ぶようにしました。
カード抜き検出処理を修正しました。 またこれまではスリープ中のカード抜きなど正確に動作しない個所がありました。
カード抜き検出方法について、これまでは ARM9で CARD_IREQ 割り込みをチェックしていましたが、新しい方式では ARM7 でポーリングするようになりました。通常は
CARD_IREQ 割り込みの発生を調べていますが、ROM ヘッダ情報を参照してそのカードが CARD_IREQ 割り込みを使用する場合には カード ID の読み込みによって行います。 そして抜きを検出したら、ARM7
から ARM9 に通達します。
ペンリリース時の座標飛びの対策として、INVALID となる条件が変更され、以前よりも厳しく判定されるようになりました。 INVALID フラグが立つケースが多少増える可能性があります。
make 時に NITRO_COMPRESS を指定している場合、.nef ファイルと常駐モジュールのバイナリである.sbin ファイルのベース名 (ファイル名から拡張子を除いた部分) が異なっている場合にエラーが発生します。
mb_child.srl において親機のユーザ名が 10文字になっている場合、正常に動きません。
カートリッジの IREQ 割り込みでスリープから復帰する場合、カートリッジが抜けた時だけでなく、 IREQ割り込みを何かの用途に使用しているカートリッジデバイスからの割り込みで復帰する可能性があります。
従って、スリープ状態からカートリッジが抜けたことで復帰したい場合は、カートリッジスロットにささっているカートリッジがアプリケーション側で想定しているものであることが
確認できている場合のみ行ってください。 そうでなければ、スリープ復帰のトリガに
PM_TRIGGER_CARTRIDGE を指定しないで下さい。
(2004/09/21)
1) マルチブート親機で 複数親機が同時に存在する場合に特定の親機が他の親機より見つかりにくくなる場合があるという現象がありましたが、
修正しました。
2) 無線ライブラリとサウンドライブラリの競合問題で、 無線ライブラリの通信中にサウンドライブラリを使用して負荷の高い処理を行うと通信に異常を来たすという不具合がありました。
無線ライブラリの処理をサウンドより優先させることで対処しました。
3) WMライブラリにおいて WM_Initialize 関数に渡すバッファへのライトがキャッシュ上でライトバックされずにダーティ状態で残っている場合に
WMライブラリの動作に支障を来たすという不具合がありましたが、修正しました。
4) PR6 までには WM_StartMPEx の minPollBmpMode が TRUE の設定で親機が一定の時間、
特定の子機にしか通信しなかった場合に残りの子機がタイムアウトによる切断を起こしてしまう不具合がありました。
特に 8 番以上の port による Sequential 通信を利用していた場合、 一部の子機を強制切断すると、再送によって上記状態が容易に発生します。
この不具合への対処として、minPollBmpMode が TRUE の場合にのみ、 60 フレームに
1 回の間隔で、 MP 通信時に親子共に送信可能バイト数を 0 バイトに設定した
Keep Alive フレームを送信するように変更しました。
5) WM_GetMPReceiveBufferSize および WM_MP_SIZE_PARENT_RECEIVE_BUFFER の計算式の誤りで、
必要なサイズより少ない値を返すことがあった不具合を修正しました。
6) リファレンスに「無線通信時間計算シート」を追加しました。 親子の最大送信サイズから、MP通信の所要時間を計算することができます
7) port受信コールバックに対するWM_STATECODE_CONNECTED, DISCONNECTEDの通知において、
aidには常に接続相手のAIDが入るようになりました。自分のAIDはmyAidに代入されます。
8) 無線に関する簡易ドキュメントを docs/TechnicalNotes/WirelessManager.doc
に追加しました。ドラフト版の公開となります。
NITRO_COMPRESS を指定してビルドしたプログラムでオーバーレイをロードする際に、 BSS 領域全体がクリアされず初期値 0 の変数が正しく初期化されないことがあるという不具合が確認され、この問題を修正しました。
ゲーム中にカートリッジを抜いたことを検出してコールバックが呼び出される仕組みを作成しました。 OS_Init() から呼び出される CTRDG_Init() で カートリッジライブラリの初期化を行えば有効になります。 デフォルトでは何もしません。
ゲーム中にカードを抜いたことを検出してコールバックが呼び出される仕組みを作成しました。 CARD_Init() でカードライブラリの初期化を行えば有効になり、 デフォルトでは両プロセッサをhalt状態にして停止します。
G3Cでパックされたディスプレイリストを生成する際に、 ジオメトリFIFOのハードウェア不具合への対策処理で不定なデータが書き込まれてしまう場合がありました。 この不具合は修正されました。
これまで IS-NITRO-DEBUGGER との競合問題により ARM7 でのポーリング処理によってエミュレートしていた
RTC 割り込みの処理を FinalRom 版ライブラリにおいてのみ変更し、 NITRO ハードウェアの
RTC 割り込みを使用するようになりました。
Debug 版、Release 版では従来と同じようにポーリングによって RTC 割り込みをエミュレートしています。
MIC_StartAutoSampling、MIC_StartAutoSamplingAsync関数において、パラメータに構造体を直接指定するI/Fでしたが、スタックの無 駄を省くため構造体へのポインタを指定するI/Fに変更しました。
NITRO-SDK で配布するサウンドラインブラリが2004年9月16日版となりました。
バナーファイルのテストビューア生成ツール addbanner を収録しました。 このツールは、バナー情報を NITRO の画面上で表示するための ROM ファイルを生成します。
最終 ROM 作成を行なうデモを追加しました。 このデモは最終 ROM 内へ収録する必要のあるファイルを組みこむ処理の例を示しています。
このデモで示している情報は SDK リリース時点でのものです。 リリース以降に最終
ROM 提出に関するルールが変更になっている可能性もあるため、 最新の情報については弊社サポート
WEB ページなどでご確認ください。
attachsign ツールのリファレンスが揃っていません。
(2004/09/13)
ニンテンドー DS 本体内に保存されているオーナー情報などを取得する関数を追加しました。エンドユーザーが本体の IPL プログラムによって編集したオーナー情報を取得することができます。
また、本体の無線ハードウェアの MAC アドレスを取得する関数も追加されています。MAC アドレスはハードウェア毎に異なる値が設定されており、無線機能を使用しないアプリケーションであっても利用することが可能です。
新規に追加された関数は以下の 3 つです。
OS_GetOwnerInfo()
OS_GetOwnerRtcOffset()
OS_GetMacAddress()
ソフトリセットを実装し、エントリポイントからプログラムを再実行することが出来るようになりました。リセット時に任意の u32 値を与えて、再実行のモジュールにそれを渡すことも可能です。本関数はハードウェアの初期化を行ないません。このため自動起動 DMA のような処理は本関数を呼び出す前に終了させておく必要があります。
ただし起動時に読み込まれたROMデータのうち、先頭 16KB はリセット時に再ロードしませんので、その部分が破壊されている場合は再実行することができません。その判定はライブラリでは行いませんのでアプリケーション側で破壊しないように注意する必要があります。
マルチブートで子機として起動した場合、OS_ResetSystem() による再起動はできません。SDK では安全のために OS_ResetSystem() 内部で OS_Panic() を呼び出し、停止(メッセージ出力[FINALROM 版以外]後、永久ループ)します。この振る舞いに問題がある場合は、MB_IsMultiBootChild() でマルチブート子機かどうかを判定し、場合分けをしてください。
OS_ClearAlloc() の追加 OS_InitAlloc() でアリーナ上にメモリ割り当てシステムを構築した後、それを破棄するための関数
OS_ClearAlloc() を追加しました。OS_ClearAlloc() を呼んだ後は同じアリーナ上に新たにメモリ割り当てシステムを構築することができます。
アラーム、Vカウントアラームで使用されているアラーム構造体を用いて新たなアラームをセットしようとしたときに、ビルド方法に関係なく
OS_Panic() で停止するようにしました。これまではDEBUG ビルドのみ停止して、その他の場合は永久ループに入っていました。
DMAレジスタのビット定義などを $NitroSDK/include/nitro/mi/dma.h に追加しました。これまでこれらの定義はライブラリ構築用のツリー内のヘッダファイルで定義されていましたが、アプリケーション側からも使用できるようにとのご要望により収録位置の変更となりました。
終了時
WM_Init- ライブラリが必要とするワークバッファを初期化する同期関数。
WM_Enable- 無線ハードウェアを使用許可状態にする。同時にLEDの点滅が開始される。
WM_PowerOn- 無線ハードウェアを起動し、必要な初期化を行う。
WM_PowerOff- 無線ハードウェアをシャットダウンする。
WM_Disable- 無線ハードウェアを使用禁止状態にする。同時にLEDの点滅は停止される。
WM_Finish- ライブラリを終了し、ワークバッファを解放する同期関数。
バッテリの消耗を抑えるため、実際の無線通信が始まる直前まで無線ハードウェアの起動(WM_PowerOn)を行なわないように、また無線通信の必要がないときはなるべく無線ハードウェアをシャットダウン(WM_PowerOff)するように心がけてください。
無線ライブラリとサウンドライブラリが使用する DMA が ARM7 において競合することにより、サウンドを動作させながらでは無線で通信できないという不具合がありました。サウンドに若干の制限が残るものの、無線通信できないという問題点は解消されました。これは Note 15-16: (WM/SND) 無線とサウンド同時使用時の不具合対処 においても説明されています。
電波状態が悪い場合に、送信できていないにもかかわらず WM_SetMPDataToPort() のコールバックに成功値が返ることがあるというバグを修正しました。これにより、まれにデータシェアリングが停止するという問題が解決しています。
pollBitmap (Poll マップ) が自分宛でない場合の処理に問題があり、pollBitmap によって通信相手の子機を切り替えている場合に不具合が生じていました。この不具合は修正されました。
親機として通信を開始する際、一回の MP 通信で送信可能なデータ量の限界を超える値を指定すると WM_INVALID_PARAMETER エラーが返されるように制限を加えました。また、プログラミングガイドラインに記載されている転送データ量の推奨値を超える値を指定すると警告がデバッグ出力される機能を追加しました。
子機側アプリケーションにおいて、従来は WM_StartMP() へのコールバックの引数である state 値に WM_STATECODE_MP_IND が設定された場合に errcode として WM_ERRCODE_SUCCESS しか渡されることはありませんでしたが、NITRO-SDK 2.0PR6 からは MP の pollBitmap
に自分が含まれていなかった場合に WM_ERRCODE_INVALID_POLLBITMAP が渡されるようになりました。
この状況は MP 通信において子機を 2 台以上接続した場合にはしばしば発生しますので、回復不能なエラーとして扱ってはいけません。
子機側アプリケーションにおいて、従来は WM_StartMP() へのコールバックの引数である state 値に WM_STATECODE_MPACK_IND が設定された場合に errcode として WM_ERRCODE_SUCCESS, WM_ERRCODE_TIMEOUT, WM_ERRCODE_FAILED が渡されていました。これを以下のように変更しました。
WM_ERRCODE_INVALID_POLLBITMAP が返るように変更されました。これは MP 通信において子機を 2 台以上接続した場合にはしばしば発生しますので、回復不能なエラーとして扱ってはいけません。
WM_ERRCODE_FAILED を返していました。これは WM_ERRCODE_SEND_FAILED に変更されました。WM_SetMPData() および WM_SetMPDataToPort() のコールバックへ渡される errcode として WM_ERRCODE_SUCCESS, WM_ERRCODE_TIMEOUT, WM_ERRCODE_FAILED が設定されていましたが、WM_ERRCODE_TIMEOUT と WM_ERRCODE_FAILED は WM_ERRCODE_SEND_FAILED に統一されました。
また、その際の WMPortSendCallback.destBitmap には、送信が失敗しリトライを試みなければならない子機の aid の bitmap が収められるようになりました。(送信中に切断された子機は
destBitmap には含まれません)
親機側で毎MP通信の終了時に WM_StartMP() のコールバックの state 値として WM_STATECODE_MPEND_IND が設定されたときにおけるコールバック呼び出しの手順が変更になりました。従来は、
WM_SetMPDataToPort() の callback)
WM_STATECODE_MPEND_IND (WM_StartMP() の callback)
WM_SetPortCallback() で登録した各 callback)
WM_SetPortCallback() で登録した各 callback)
WM_SetMPDataToPort() の callback)
WM_STATECODE_MPEND_IND (WM_StartMP() の callback)
WM_SetMPDataToPort() のコールバックで次の WM_SetMPDataToPort() を行なうという標準的な設計でプログラムを書いていた場合に、最新の受信データを反映したデータを直ちに送信することを可能とするためです。WM_SetMPDataToPortEx() 関数を新設しました。送信完了コールバックの引数にユーザ定義のデータを追加できます。
WMParentParam 中の子機の最大送信サイズ (childMaxSize) の処理において 2 bytes 分指定値より少ないサイズが設定されていた不具合が修正されました。
parentMaxSize, childMaxSize はそれぞれ送信したいユーザデータの最大サイズを指定するパラメータであり、無線ライブラリ内部の制御データのサイズを考慮する必要はありません。
NITRO-SDK 2.0PR5 では、キーシェアリングを行う場合に、最大送信バイト数にキーシェアリングが使用分の値を明示的に加えておく必要がありましたが、WMParentParam.KS_Flag に TRUE を設定しておくことで自動的にキーシェアリングの使用分だけ最大送信バイト数が拡張されるようになりました。
WM_SIZE_MP_PARENT_SEND_BUFFER, WM_SIZE_MP_PARENT_RECEIVE_BUFFER, WM_SIZE_MP_CHILD_SEND_BUFFER,
WM_SIZE_MP_CHILD_RECEIVE_BUFFER の各関数マクロに ksFlag という引数が追加されました。
キーシェアリングを行う場合のバッファサイズを算出する場合は ksFlag に TRUE を、さもなくば FALSE を指定してください。
WM_Reset を呼び出した場合に正しく子機接続情報がリセットされない不具合を修正しました。
動的に MP 通信の頻度を変更する WM_SetMPFrequency を新設しました。
無線強度を表現するためのアイコンを以下に収録しました。これらの使用についての規定は、無線通信関連のガイドラインを ご覧ください。
$NitroSDK/data/wl_icons
無線ライブラリ(WM)の MP 通信を使用して親子間でブロック転送プロトコルを実現するライブラリ WBT をテスト公開しました。
現在、テスト公開のため以下の問題があります。
NITRO-SDK で配布するサウンドラインブラリが2004年9月2日版となりました。
IPL でロードされる常駐モジュールを圧縮するための機構を追加しました。これにより ROM 容量および起動時の初期ロードサイズを節約できるようになりました。
SDK の make システムでは、マクロ変数 NITRO_COMPRESS に何らかの値が設定されている場合この機能が自動的に有効になります。展開時間とのトレードオフをご考慮の上お使いください。
SDK で圧縮が有効になると、以下のような処理が行なわれます。
compstatic コマンドによって、常駐モジュール実行バイナリの先頭部を除いた領域の圧縮処理を行なう。
makerom コマンド で ROM 内部に格納する。
crt0.c 内部で展開される。
常駐モジュールと同様に Overlay モジュールの圧縮も行なうことが可能です。Overlay モジュールの展開処理については、関連 API 内部に統合されているため、こうした API 経由でアクセスを行なう場合は、特に気にする必要はありません。
この処理の実装のため、以下のツール関連ファイルが NITRO-SDK 2.0PR5 のものから変更されています。独自の rsf ファイルおよび lcf.template ファイルをお使いの場合はこれらのファイルへの修正が必要です。
$NitroSDK/include/nitro/specfiles/ROM-TS.rsf
$NitroSDK/include/nitro/specfiles/ARM9-TS.lcf.template
この圧縮展開処理はマルチブートの子機へ渡される ROM ファイル内の実行モジュールに対しても適用することができます。
make コマンドのターゲットに run を指定することで IS-NITRO-DEBUGGER パッケージに収録されているサンプルプログラムの nitload を起動し、srl ファイルのエミュレーションを開始するよう変更しました。
IS-NITRO-EMULATOR などの各 TS 版のハードウェアバージョンに対応した ferret (無線機能なしの ARM7 コンポーネント)を収録しました。ただし通常は mongoose (無線機能ありの ARM7 コンポーネント) を使用することで問題はないため、TEG 環境のソースを無変更でコンパイルするなどの場合などを除き、TS 環境でferret を使用する必要はありません。
OS_CheckHeap() 内でヒープのチェックを行ってチェックにひっかかった時に、割り込み禁止状態で関数を抜けていましたが、これを修正しました。
tools/bin/ntrcompでランレングス圧縮ルーチンに不具合があり、ファイルの終端で非圧縮データブロックサイズが129〜130バイトある場合に終端129〜130バイトが正常に展開できない事がありました。
この不具合は更新されました。
自動起動 DMA が複数立ち上がらないようにチェックする処理で起動しているものと起動していないものを逆に取り違えていました。これを修正しチェックを正しく行うようにしました。
NITRO-SDK 2.0PR5 において、無線とサウンドを同時に使用したときに無線が正常に動作しなくなる不具合がありました。これは修正されました。
ただし DMA ハードウェアの仕様からサンプリングレート 44kHz の波形データを 3 オクターブ高い音程で鳴らすといったようなデータ転送負荷が非常に大きな再生を行なうと音が途切れる可能性があります。ご注意ください。
MB_GetSegmentLength()関数の返り値が、実際に必要とされるサイズより小さな値になるという問題が確認されました。
この不具合は修正されました。
NITRO-SDK 2.0PR5 の MB デモ Multiboot サンプルの Debug 版において、起動時に GX のエラーで停止してしまうという不具合がありました。また、同じく Debug 版において、ダウンロード処理中の割り込みハンドラ内でスタック不足により異常動作してしまうという不具合がありました。 これらの不具合は修正されました。
CARD のバックアップアクセス関数を呼び出した時に、初回のみ関数が失敗することがあるという問題が確認されました。 この不具合は修正されました。
NITRO-SDK 2.0PR5 の CharacterRecognition-1 デモが、スタック溢れにより正常に動作していませんでした。 これを修正しました。
OS_VSNPrintf を使用することで、スタックの消費サイズを節約したコンソール出力関数の OS_TPrintf などを追加しました。この OS_TPrintf では使用できるフォーマット書式から浮動小数値などを除外することによって、コード使用量およびスタック使用量を節約しています。
使用できるフォーマット書式は OS_VSNPrintf に依存しています。詳しくは OS_VSNPrintf のマニュアルをご覧ください。
compstatic, attachsign ツールのリファレンスが揃っていません。
(2004/08/30)
システム予約領域からユーザー名、ゲーム名情報が削除され、デベロッパー領域が64バイトから最大112バイトに拡張されました。ユーザー名、ゲーム名については必要に応じてデベロッパー領域に格納して頂く仕様となりました。
24 バイトの子機情報の内容についてはデベロッパーに解放されていますので、アプリケーション独自の子機情報を親機に通知することができます。 これにともない、WM_StartConnect 関数、及び WMStartParentCallback 構造体についてインターフェースの変更が行われました。
SDK-PR4 までは 1フレーム(1ピクチャーフレームの意)に 1 回のMP通信を行うか、フレームを無視した連続転送を行うか、の 2 つのモードのみが選択できる状態でしたが、1 フレームに複数回の MP 通信を行う機能が追加されました。
これにともない、WM_StartMP 関数 にインターフェースの変更が行われました。また、より詳細な設定を行う WM_StartMPEx 関数 が新設されました。
通信中にエントリー受付、マルチブート受付などの親機属性を変更する機能が追加されました。
これにともない、WM_SetGameInfo 関数 にインターフェースの変更が行われました。
- WM_DisconnectChildren
- 親機が接続済みの複数の子機をまとめて切断します。
- WM_GetMPSendBufferSize
- MP通信において必要な送信バッファのサイズを計算します。
- WM_GetMPReceiveBufferSize
- MP通信において必要な受信バッファのサイズを計算します。
- WM_GetAllowedChannel
- 通信時に使用を許可されたチャンネルを取得します。
- WM_SetEntry
- 親機が子機の接続を受け付けるか拒否するかを切り替えます。
- WM_GetLinkLevel
- 通信相手とのリンク強度を取得します。
- WM_ConvGgid*
- ゲームグループIDを変換します。
WMライブラリの仕様変更に伴い、それぞれのサンプルデモに修正が行われました。SDK-PR4では動作を保証していませんでしたサンプル"ball"についても正常に動作するよう修正されました。
WM_Disconnect関数に子機から呼び出した場合に正しく親機から切断できないという不具合がありました。
この不具合は修正されました。
DMA のうち、自動起動する DMA (即時処理するDMA以外で、Vブランク起動 DMA、Hブランク起動 DMA、表示同期 DMA、ワーク RAM 表示 DMA、メモリカードデータ DMA、カートリッジ DMA、ジオメトリコマンド FIFO DMA があります) に関するハードウェアの制限に対処または警告するための処理を追加しました。
上記の自動起動 DMA は同時に複数のものを起動することを出来ませんので起動時にチェックして、複数起動しようとすると OS_Panic() で停止します。ただし、H ブランク起動 DMA と V ブランク起動 DMA の併用は許可されています。
また、ジオメトリコマンドFIFO DMA については以下の修正を行っています。
TS ハードウェアの各バージョンに対応した mongoose コンポーネントおよび libspi.a ライブラリを収録しました。SDK の make システムにおいて、これらのコンポーネント・ライブラリを切り替えるためには 環境変数 NITRO_TS_VERSION に TS ボードのバージョン番号を設定します。NITRO_TS_VERSION が設定されていない場合は NITRO_TS_VERSION=100(IS-NITRO-EMULATOR ハードウェア Ver.D) が選択されます。
IS-NITRO-EMULATOR ハードウェアの Ver.E に対応するアプリケーションを作成する場合には NITRO_TS_VERSION=200 と設定する必要があります。
対応するコンポネントおよびライブラリは以下にあります。
| TS のバージョン番号 | 対応する mongoose/libspi.a のファイル名 (ARM, Release 版の例) |
|---|---|
| 0 | $NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS0.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS0.a |
| 100 | $NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS100.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS100.a |
| 200 | $NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS200.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS200.a |
コードサイズの増加により、無線機能対応コンポーネント mongoose の TEG 環境対応版の作成が困難になりつつあるため、このサポートを停止いたします。
"."(ドット) で始まるファイルを追加 makerom を修正し、"."(ドット)で開始するファイル名およびディレクトリ名 (ワイルドカード表現で
".?*") を Reject の初期設定値に追加しました。これによりバージョン管理システム
Subversion の制御ディレクトリである ".svn" ディレクトリ内のファイルが ROM ファイルに含まれることが抑止されます。
以前の makerom のように "." で開始するファイルを ROM ファイルシステム内に追加したい場合は、以下のように
rsf ファイルの RomSpec セクションの先頭で Reject を再設定する必要があります。
Reject CVS vssver.scc
既に "." で開始するファイル名などを使用されている方は特にご注意ください。
本パッケージ内に収録されている SDK バイナリをビルドする CodeWarrior のバージョンを 0.6.1 に変更しました。
ARM9-TS.lcf.template ファイルにおける .itcm/.dtcm セクションの配置方法が makelcf における想定外のものだったため .itcm/.dtcm セクションに定義されているコードが ITCM/DTCM の autoload セクション内に配置されない場合がありました。
makelcf を修正し、セクションを限定していない Object/Library 記述があったときに、その記述によって配置されるセクションをコンパイラが利用する基本セクション(.text,.rodata,.data,.sdata,...等) に限定するように修正し、.itcm/.dtcm などの NITRO-SDK で新たに定義したセクションを含めないようにしました。
モザイクサイズを設定する際に、G2*_SetBGMosaicSize()でOBJのモザイクをクリア、G2*_SetOBJMosaicSize()でBGのモザイクをクリアしてしまう不具合がありました。
この不具合は修正されました。
$NitroSDK/include/nitro/gx.h 内で GX_InitEx(), GX_GetDefaultDMA() が inline 宣言されていない不具合がありました。
この不具合は修正されました。
CARDモジュールが、EEPROM デバイスに加えて FLASH デバイスへも対応しました。サブ基板とフラッシュカードにより、実機上およびデバッガ上で使用可能です。
割り込みが禁止されている状態でCARD_Init()を呼び出した場合に 関数から制御が戻らないという不具合がありました。
この不具合は修正されました。
CARD_IdentifyBackup()を呼び出してその処理が完了した時に、最後に実行したCARD非同期関数で指定されたコールバック関数が再度呼び出されてしまうという不具合がありました。
この不具合は修正されました。
メインメモリ表示起動 DMA および H ブランク DMA モードにおいて DMA 転送を行なう場合、メインメモリへのアクセス権を「ARM9 優先」にする必要があります。これは、ARM7 側からのメインメモリへのアクセスにより DMA の自動起動タイミングの遅延が発生し、画面が崩れる可能性があるためです。アクセス権の優先の指定は MI_SetMainMemoryPriority で行ないます。
これらの DMA を使用している gx/UnitTours/2D_BmpBg_MainRam および gx/UnitTours/Window_HDMA でアクセス権の切り替え処理を行なうように修正しました。また関連リファレンスマニュアルに上記情報を追記しました。
コンパイルの最適化レベルが一定以上の際にTick値を取得しようとすると Tick 値で使用しているタイマ割り込みがあるタイミングで掛かった場合に正確な値が取得出来ませんでした。
この不具合は修正されました。
NITRO-SDK 2.0PR4 において VBlank 割り込み時に割り込みチェックフラグ (IrqCheckFlag) を自動的に ON にするように修正した部分を ARM9 側ライブラリでは取りやめ、従来どおりに戻しました。
OS 内部で IrqCheckFlag をオンにするという操作について、IrqCheckFlag は複数回オンにしても問題ないため、アプリケーション側の VBlank コールバック毎に IrqCheckFlag のオン処理を行なっておられる場合には問題はありません。しかし、秒間 30 フレームのタイミングで状態の更新を行なうために VBlank 処理内で 2 フレームに一度だけ IrqCheckFlag をオンにするという操作を行なうアプリケーションにおいて誤動作の原因となっていました。
この修正は 2.0PR4 の IrqCheckFlag パッチと同等のものです。
Note:10-02 で変更アナウンスがあった通り、DTCMのアドレスが変更になっていますが一部変更していない個所がありました。
それを修正しました。今回の変更で DTCMはどのような環境であってもデフォルトで 0x27c0000 からとなります。
ARM9側の OS_Init() 内で PM_Init() を呼ぶようにしました。
IS-NITRO-DEBUGGER を使用している際に、カートリッジスロットの電源をオンにしていると OS_GetConsoleType() で得られる動作環境として、IS-NITRO-EMULATOR である、と誤った結果を返していました。
正確に IS-NITRO-DEBUGGERであることを判定できるように修正しました。
タッチパネルの接触判定において、接触状態から離した状態になる際に離れかけた中途半端な状態で測定した座標値が正常な計測値となる場合があるというハードウェアの問題が発見されました。
この問題に対して座標値計測後一定時間待ってから再度接触判定を行うというソフト対策を施しました。
スリープ状態からの復帰要因に RTC アラームが使えるようになりました。
これまで時間表記フォーマットは 12/24 時制を選択できる機能を提供していましたが、ブートメニューにおいて 24 時制を採用していることによるトラブルを避けるために 24 時制に固定する仕様へと変更されました。
時間表記を選択するAPIは使用できなくなり、午前・午後を示す情報はAPIから削除され、仕様変更にともないサンプルデモ rtc-1 も24時制表記固定の形へ変更されました。
NITRO のブートメニューにおける操作の都合上、ゲームアプリケーション起動時に A ボタンが押されたままになっている可能性が高くなっています。A ボタンを押すことで何らかのアクションが起こるアプリケーションではこの点に注意する必要があります。
いくつかのデモのボタントリガ (そのフレームにおいて新たに押下されたボタン) の判定においてボタン状態の初期値に 0 (=何も押されていない) を使用していたのを修正し、初期値を現在の押下状態から設定するようにしました。
ntrcomp ツールおよび ppmconv* ツール群(ppmconv/ppmconv8/ppmconvbg) のリファレンスマニュアルを追加しました。
以下のサンプルが正常に動作しないことが確認されています。
(2004/08/11)
1) ポート制御機能が追加されました。この機能により、MPプロトコル上で複数の上位プロトコルのデータ通信を 並列に行うことが可能となります。
2) データシェアリング機能が追加されました。複数の NITRO の間でデータシェアリングを行うサンプルを以下に用意しました。
$NitroSDK/build/demos/wm/dataShare-1
また、キーシェアリング機能は、このデータシェアリング機能を内部的に利用することで実現するように実装方式が変更されました。これまでデモとして提供していました "ball" サンプルの動作は未検証であり、正常に動作しない可能性があります。
3) 内部制御用構造体の構造が大きく更新されました。これに伴い、WM ライブラリが必要とするバッファのサイズが拡張されました。
4) マルチポール通信中はMPパケットの転送完了のつどコールバックが発生するように変更されました。
5) 以下の単機能APIが追加されました。
WM_SetLifeTime()
WM_MeasureChannel()
WM_InitWirelessCounter()
WM_GetWirelessCounter()
なお、プロック転送機能や、より機能拡張した上位レベルライブラリについては現在作成中です。
NITRO-SDK にマルチブートライブラリ(MB ライブラリ)が追加されました。これはカードの挿入されていない NITRO へゲームプログラムを送信するいわゆるマルチブート機能を提供するAPIです。このライブラリは内部でワイヤレスマネージャライブラリ(WM ライブラリ)を使用します。
マルチブートを実行するためのプログラム mb_child.srl (2.0PR5 において mb_child.bin より改称) を下記のディレクトリに収録しました。これはカードの挿入されていない製品版の子機と同じ動作をするプログラムです。IPL でマルチブート機能がサポートされるまでは、これを使って動作テストをしてください。
$NitroSDK/bin/ARM9-TS/Release/mb_child.srl
同時に追加されたマルチブート機能のデモサンプルは、下記のディレクトリに収録されています。
$NitroSDK/build/demos/mb/multiboot
NITRO-SDK に PM ライブラリが追加されました。
これはパワー制御 IC をコントロールするための API で、このライブラリを利用することで LCD や バックライト電源を制御したり、バッテリー残量を調べたりすることなどが出来るようになります。
マイクの自動サンプリング時に、タッチパネルの単発サンプリングを受け付けられるように修正しました。マイクの自動サンプリング時にタッチパネルのリクエストを受けると、次のマイクのサンプリングが終わるタイミングでタッチパネルのデータ読み取り処理が行なわれます。
もし次のマイクのサンプリング時刻までにタッチパネルのサンプリングが終了していなかった場合は、マイクのデータ落ちが発生したとみなして、直前のマイクのサンプリング値と同じ値でデータ落ち部分を補間します。
この機能に関するデモを下記のディレクトリに収録しました。
$NitroSDK/build/demos/spi/spiMonkey2
量産品の電源制御関連IC(PMIC) が実装されたハードウェアにおいて、マイクの出力値を正しく取得する為に PMIC 内のアンプを動作させるための前準備が必要となりました。このためにPMIC のアンプのゲイン値などのパラメータを操作する処理を mic-1, mic-2, spiMonkey デモに追加しました。
またこの前準備において PMIC のバージョンの違いを吸収するためにマクロ値 SDK_TS_VERSION を導入しました。またこの値を動的に切り替えるための環境変数 NITRO_TS_VERSION を用意しました。ビルド時に定義された NITRO_TS_VERSION の値が SDK_TS_VERSION に渡されます。
SDK_TS_VERSION および NITRO_TS_VERSION は以下のような値をとります。
| SDK_TS_VERSION | 機器の説明 |
|---|---|
| 0 | TS ブレッドボードから IS-NITRO-EMULATORハードウェア Ver.C |
| 100 | IS-NITRO-EMULATORハードウェア Ver.D (PR4 でのデフォルト) |
| 200 | 次のバージョンの PMIC が搭載された機器 |
IS-NITRO-EMULATORハードウェア Ver.D の PMIC では、LCD のバックライトが点灯しているとマイクデバイスに大きなノイズが載ってしまいます。このハードウェアの問題は修正される予定ですが、それまでは mic-1 デモマイクを使用するときは LCD を OFF にしてご利用ください。
mic2wav が出力ファイルをテキストファイルとしてオープンしておりデータを正しく変換できていませんでした。これを修正しました。
LCDのパワー制御用関数が PM_SetLCDPower へ変更されました。これに伴い、以下の関数・列挙型の定義を削除しました。
ジオメトリエンジンの実行時間短縮のため、G3*_MultMtx33 と G3*_Translate を一つの行列にパックして乗算する関数 G3*_MultTransMtx33 を追加しました。
GXが使用するDMA番号を設定・取得するための関数として、GX_InitEx(), GX_SetDefaultDMA(), GX_GetDefaultDMA()を追加しました。DMA番号にGX_DMA_NOT_USEを指定することで、DMAを使用しないように設定することもできます。
GX_PowerGeometry(), GX_Power3D()において、ジオメトリエンジンの電源がOFFにならない不具合がありました。この不具合は修正されました。
表示モードに限らず常にBGモード、BG0 2D/3D選択フラグをレジスタへ反映するように変更しました。この値はグラフィックス表示モード以外の場合にも、表示キャプチャを使用する際に参照されます。
NITRO-CARD上のデバイスにアクセスするための関数群を公開しました。サブ基板とフラッシュカードにより、実機上で使用可能です。
FS_ReadDir関数でディレクトリエントリを列挙する際に、ファイルエントリ同士の間にディレクトリエントリが存在すると得られるファイルIDが実際のものとずれるという不具合がありました。この不具合を修正しました。
makelcf/makerom において、-D オプションで指定できる変数に1000文字を超えるような長い文字列を設定し、テンプレートファイル内でこれを展開すると、エラーを出力して停止する場合がありました。これを修正しました。
またコマンドラインを使った変数の受け渡し処理は、各コマンドライン処理系で設定されたコマンドラインの最大長の制限を受けることになります。これを防ぐために変数定義を外部ファイル経由で指定できるようにしました。これにより [変数名=値] の記述からなるファイルを -M オプションにより makelcf/makerom に与えることで コマンドラインのコマンド長の制限を気にせずに変数の定義を行なうことが出来ます。
autoload されたコードをデバッガで追跡するための追加情報をオーバーレイネームファイルに出力するように修正しました。具体的には $NitroSDK/include/nitro/specfiles 以下の *.lcf.template ファイルのオーバーレイネームファイルの定義部分に変更が加えられています。
この追加情報を利用することで autoload モジュールのデバッグが可能となります。各デバッガシステムのこの機能の対応予定については各デバッガのリリースノートやサポートサイトなどでご確認ください。
mingw 環境において C++ ライブラリを CXX にリネームする処理が失敗するという問題がありました。これを修正しました。
V ブランクカウンタを設置し、値を取得する関数 OS_GetVBlankCount() を用意しました。
ハードウェアの制限によってキー割り込みが使用できなくなりましたので PAD_SetIrq() と PAD_ClearIrq() を廃止しました。 ただしスリープモードからの復帰においてはキー割り込みを使用しても構いません。その場合は PM_GoSleepMode() で条件を指定します。
同期DMAで、DMA の後に DMA ビジーの間待つという処理を入れました。
TCM 上にこれらの同期 DMA API が置かれている場合、DMA を起動しても ARM9 はその終了を待たずに API から返っていました。これを修正し転送位置に関係なく同期DMAでは確実に終了を待つという仕様に修正しました。DMA の明示的な終了待ち処理を行なう必要がない場合は、非同期 DMA API をお使いください。
変更された命令は以下のものです。
NITRO-SDK で配布するサウンドライブラリを 2004年8月10日版にしました。
GXデモ3D_BoxTestで、PolygonAttrのFARクリップフラグ、及び1ドットポリゴン表示フラグに1をセットせずにBoxTestを実行していたため、ハードの仕様上、正常な結果が得られない場合がありました。BoxTestの直前にこれらのフラグをセットするように修正しました。
デモ LinesOver で、ジオメトリエンジンがまだビジー中に G3X_GetPolygonListRamCount(), G3X_GetVtxListRamCount() がコールされ、描画途中の値を取得していましたので直前にジオメトリエンジンの処理終了待ち処理を追加しました。
また、レンダリングが終わる前に G3X_GetRenderedLineCount(), G3X_IsLineBufferOverflow()がコールされていましたので、VBlank の後に移動しました。
SPI デモ spiMonkey の出力画面をタッチパネル側画面になるように修正しました。
従来 NITROSDK_LANG の値で signed/unsigned を切り替えていた char 型ですが(jp の時 unsigned)、これを signed に統一しました。この変更は NITRO-SDK 2.0PR1 から導入されています。
(2004/07/29)
リファレンスマニュアルにおいて WM ライブラリに関する部分を加筆、修正しました。
(2004/07/27)
メモリマップの定義において、システム共有領域の定義マクロとシステム領域構造体の定義が一致していませんでした。これは NITRO-SDK 2.0PR2 における修正によって混入した不具合です。
この不具合を修正しました。
NITRO-SDK のライブラリヘッダファイル内で、構造体のパディング警告のスイッチを OFF に切り替えた後、元に戻していませんでした。このため、これまではパディング警告スイッチが OFF になったままになっていました。これは意図したものではありません。
これを修正しました。これによって NITRO-SDK を使用しておられる、プログラムのコンパイル時に今まで発生していなかったパディング警告が出現する可能性があります。これを抑制するためには、以下のような方法があります。
コンパイル時にパディング警告の抑制に関するコンパイラオプションを追加するという方法です。
IDE をお使いの方はパネルから設定できます。make システムをお使いの方は以下の make 変数 CCFLAGS_WARNING に警告関連オプションを設定してください。以下はパディング警告を抑制し、その他の警告を表示するための指定をコマンドラインから与える場合の例です。無論 CCFLAGS_WARNING の設定を Makefile 内に記述することでも同様の効果があります。
make CCFLAGS_WARNING='-w all,nopadding'
警告箇所の前後に pragma 指定を行なうことでパディング警告を抑制するという方法です。具体的には以下のようになります。
// パディング警告の抑制
#pragma warn_padding off
struct padded
{
u16 leng;
// ここに 2 bytes のパディングが挿入される
s32 data[4];
};
// パディング警告状態の復帰
#pragma warn_padding reset
ソースファイル全域に対して、パディングの警告を抑制したい場合は、#pragma warn_padding off をソースの先頭に記述することになります。
(2004/07/26)
無線デバイスをドライブするための下位レベルライブラリとして、WM (Wireless Manager)を公開しました。
$NitroSDK/build/demos/wm
以下に単機能サンプルを用意しました。 現状ではターゲットがTSの場合のみ動作します。 ターゲットがTEGの場合、及びensataでの動作は保証しません。
なお、ワイヤレスマルチブートやブロック転送等、今回未サポートの通信機能や、より機能拡張した上位レベルライブラリについては現在作成中です。
(この項はTS環境にのみ該当します。TEG環境の場合はメモリマップの変更はありません。)
メモリマップの見直しを行い、デフォルトでARM9に割り当てるMainRAM領域の大きさを増やしました。
具体的には、これまで0x2380000からの領域に配置していたDTCMを、0x27C0000 からとしました。あわせて、ARM9に割り当てられる MainRAM領域は 0x2000000〜0x237FFFF から 0x2000000〜0x23BFFFF となります。(256KByte 増加したことになります。) また、ARM7に割り当てられるMainRAM 領域は 0x37C0000〜0x37FEFFF となります。
No. 10-02 で TS 環境のみ、DTCMの配置アドレスが変更になっていることが書かれていますが、TEG と TS における DTCM の配置アドレスの違いを lsf ファイルに通知するために、makelcf の起動時パラメータ ADDRESS_DTCM を追加しました。これは、NITRO_PLATFORM が TEG である場合には 0x02380000 が、TS である場合には 0x027c0000 (8MB メインメモリ対応のため +0x400000 されています) が設定されます。TEG と TS で lsf ファイルを共用したい場合にはこの変数を利用してください。
(例)
Autoload DTCM
{
Address $(ADDRESS_DTCM)
Object * (.dtcm)
}
C++ の例外を使用したコードを作成したときに例外テーブルのラベルが定義されていなかったことによるリンクエラーが発生していました。これを修正しました。
システムコール SVCライブラリが更新され、以下の関数が追加されました。また、追加されたものについてリファレンスマニュアルを更新しました。
今回追加された関数
SVC_Div()
SVC_DivRem()
SVC_GetCrc16()
SVC_Halt()
SVC_IsMmemExpanded()
SVC_Sleep()
SVC_Sqrt()
SVC_UncompressHuffman.html()
SVC_UncompressLZ.html()
SVC_UncompressRL.html()
SVC_UnpackBits.html()
OSのロック関連の関数で用いるロックID(u16)が、関数の引数でu16 としてだけでなく、u32として宣言されている個所があったのでu16に統一しました。但しロックIDまたはエラーを返すという関数の返り値がs32であるのはこれまでの通りです。
引数のlockID の型がu32 から u16 に変わったもの
OS_LockByWord(), OS_LockCartridge(), OS_LockCard()
OS_UnlockByWord(), OS_UnlockCartridge(), OS_UnlockCard()
OS_TryLockByWord(), OS_TryLockCartridge(), OS_TryeUnLockCard()
返り値が s32 から u16 に変わったもの
OS_ReadOwnerOfLockWord()
返り値が s32 であることの注意をマニュアルに入れたもの
OS_GetLockID()
OS のロック関連の関数のうち、以下のアンロック関数について、関数名の 'UnLock'
部分を 'Unlock' と変更しました。
OS_UnLockByWord(), OS_UnLockCartridge(), OS_UnLockCard()
(この変更は Note 9-23 にある通り、2.0PR1に入る予定でしたが、手違いにより今回の変更となりました)
MI_GetCartridgeRomCycle* 関数の名称を整理して1stと2ndで統一しました。あわせて、列挙型名
MICartridgeRomCycle1, MICartridgeRomCycle2 を MICartridgeRomCycle1st,MICartridgeRomCycle2nd
に変更しました。
(2004/07/20)
(注意:このNote Note. 9-01 内の赤字部分については 2004/07/26 に追記されたものです。)
IS-NITRO-DEBUGGER 及び NintendoDS ソフトウェア開発用ボード NITRO-TS に対応し、デフォルトのターゲットを TEG から TS へ変更しました。(以降、特に断りがない限り、IS-NITRO-DEBUGGER と NITRO-TS は同一の物を指します)
環境変数または make コマンドのマクロ変数の NITRO_PLATFORM を定義しない、あるいはこの変数に "TS" という値を設定することで、TS 用のモジュールを作成します。以下は一例です。
% make NITRO_PLATFORM=TS
通常、make を実行したディレクトリ下の bin, lib, obj サブディレクトリ以下に ARM9-TS または ARM9-TS.thumb というディレクトリを作成し、その内部に TS 用の各モジュールが生成されます。
また、従来の TEG ターゲット版のコンパイルを行うには
% make NITRO_PLATFORM=TEG
と明示的に指定する必要があります。
なお、TEGターゲットのサポートは今後も(少なくとも2004年中は)継続して行う予定です。
ROM イメージの製造フォーマット仕様と一致するように makerom を修正しました。また製造検査工程との整合性を取る為 ROM バイナリファイルの拡張子を .bin から .srl と変更しました。
ただし Makefile の記述における ROM イメージのターゲット変数名は TARGET_BIN のままになっています。
オーバーレイ関連のリンク手法が変更になりました。
LCFファイルでファイル指定に "*" を使用しないように変更しました。
LCFファイル中ではすべてのライブラリを列挙していますが、ライブラリ名に "+"
記号が使用できない制限のため、メトロワークス社のc++ランタイムライブラリを
MSL_C++_NITRO_Ai_LE_strb.a → MSL_CXX_NITRO_Ai_LE_strb.a と 名前を変更してコピーし、そちらを参照するようにしています。
複数のサブディレクトリでソースファイルをそれぞれコンパイルし、親ディレクトリで、それらをリンクするという処理のサンプルデモを次のディレクトリ以下に用意しました。
$NitroSDK/build/demos/tips/MultiLink
nef, bin ファイルの依存ファイルを LDEPENDS_NEF, LDEPENDS_BIN への指定によって追加できるようになりました。
コンパイルスイッチ NITRO_CODEGEN_ALL を追加しました。これは ARM/THUMB 版の両方のライブラリを生成するためのもので
% make NITRO_CODEGEN=ARM
% make NITRO_CODEGEN=THUMB
という2回のコンパイルを行うことを意味します。(コンパイルは NITRO_CODEGEN で指定された方から順に行ないます)
NITRO-SDK で配布するサウンドラインブラリが2004年6月22日版となりました。
FS_RegisterArchiveName関数の内部処理の問題により登録したアーカイブを解放する際に状態不整合が起こるという不具合がありましたが、修正されました。
async デモにおいて、スレッド内でデバッグ出力を行っている最中に割り込みが発生してスレッドが切り替わることにより誤った文字列が出力される場合がありました。この不具合を修正しました。
FS の非同期関数を FS_WaitAsync 関数で待機しているスレッドに対してOS_WakeupThreadDirect() 関数を呼び出した場合に、実際は処理が完了していないのに関数から戻ってくるという不具合がありましたが、修正されました。
非連続VRAMバンクを扱う関数でデータ転送に不具合があり、正確に転送できていませんでしたが、修正されました。
GXデモのDEMOLib の中で、クリアカラーのα値のデフォルト値をこれまでの 0 から 31 に変更しました。
u16 型の範囲で逆正接を返す関数 FX_AtanIdx(), FX_Atan2Idx() を追加しました。これまではラジアン単位で逆正接を返す FX_Atan(), FX_Atan2() のみが存在していました。
データをジオメトリエンジンへ設定せず値の計算のみをするAPIとして以下の関数を追加しました。
MTX_FrustumW(), MTX_PerspectiveW(), MTX_OrthoW(), MTX_LookAt()
これらの関数からは、G3_FrustumW(), G3_PerspectiveW(), G3_OrthoW(), G3_LookAt()で設定されるものと同じ行列が得られます。
make 時に NITRO_MEMSIZE=8M の指定をつけてコンパイルしたものをメインメモリ8MB搭載の開発機材で実行した場合に、拡張メインメモリアリーナをきちんと設定するようにしました。これまではプロテクションリージョンの設定が適切ではなくアプリケーション側で設定する必要がありました。
OS_Alloc*(), OS_Free*() 等のメモリ操作関数でクリティカルセクションを割り込み禁止とし、スレッドセーフにしました。
スレッドを結合し指定のスレッドの終了を待つ OS_JoinThread()、スレッドの終了を調べる OS_IsThreadTerminated() を作成しました。
デバッグビルドでは DMA時に TCMアドレスに重なっているかどうかをASSERTでチェックしていますが、境界条件に誤りがありました。これを修正しました。
OS_SetProtectionRegion() で、プロテクションリージョンの設定を行うとともにリージョンの有効化を行うようにしました。これまでは有効化はしていませんでした。
プロファイラ内部で扱う時刻情報をu16からu32にしてより長い時間を要する関数の計測が可能になりました。また、集計の所要時間計算に誤りがありましたが修正されました。
メモリ上の圧縮データから、圧縮タイプと展開後のサイズを取得する関数を作成しました。圧縮タイプの取得はMI_GetCompressionType() 、展開後のサイズの取得は MI_GetUncompressedSize() となります。
MI_GetCartridgeRomCycle* 関数の名称を整理して1stと2ndで統一しました。あわせて、列挙型名 MICartridgeRomCycle1, MICartridgeRomCycle2 を MICartridgeRomCycle1st,MICartridgeRomCycle2nd に変更しました。
MI_CpuCopyFast() のデバッグビルド時のASSERTで転送サイズが32バイトの倍数であることが必要条件となっていました。これを4バイトの倍数に修正しました。
DMAのパラメータ設定処理 (内部関数 MIi_DmaParams*() )と停止処理 MI_StopDma()を割り込み禁止状態で行うようにしました。
除算器に 32bit の除数をセットする際、除算器の除数レジスタの上位 32bit に 0 を入れるようにしました。これは除数 32bit の除算モードであっても、除数レジスタ 64bit 全てが 0 のときのみコントロールレジスタの 0 割りエラーフラグが立つためです。
マイクによるサンプリングを行う関数において指定可能なサンプリング種別が拡張され、 符号付きデータ形式での出力を指定することが可能となりました。
タッチパネルによる描画データ等の図形認識を行う PRC ライブラリをテスト公開しました。
$NitroSDK/build/demos/prc
以下にデモを用意しました。
詳しくはドキュメント
$NitroSDK/docs/TechnicalNotes/PatternRecognition.doc
を参照してください。
タッチパネルデバイスからの取得値精度を12bitから9bit に変更しました。ARM7側で下位3bitをマスクしています。これは将来の互換のためです。
(2004/6/16)
IRQハンドラ内でスレッドが切り替わるときに、除算器、平方根演算器の コンテキストを保存していませんでした。これを修正してコンテキストが 適切に切り替わるようにしました。
FX_F32_TO_FX32()で負の数の場合の丸め処理が誤っていたのを修正し、FX32_CONST()をFX_F32_TO_FX32()の別名としました。 また、FX16_CONST(), FX64_CONST(), FX64C_CONST()をマクロとして追加しました。
$NitroSDK/build/libraries/os/common/src/os_thread.c の中で、idleスレッドの実行関数である OSi_IdleThreadProc() のループ部分にテストコードが混入していたのを修正しました。
spiMonkeyデモをDebug版でビルドすると、動作はするが画面更新速度が 非常に遅いという不具合がありました。これを修正しました。
makerom/makelcf で変数値の取り扱いにバグがあり、正常に動作しない場合がありました。これを修正しました。
(2004/6/10)
パワーコントロールレジスタの "LCD出力先切り換えフラグ" の設定フラグの GX_DISP_SELECT_*** を最終実機と一致するように定義値を入れ替え (0,1 の論理反転)ました。
同様の修正は、ensata でも行なわれています。1.2 または 1.2RC1 以降の SDK で作成したアプリケーションを ensata 上で実行される場合は、ensata がこの修正に対応したバージョンであるかどうかご確認ください。
マイクデバイスを操作する為のAPI、及びこれを使用したデモを追加しました。 また、MICライブラリとタッチパネルやサウンドのライブラリを同時に使用するサンプルとして、 "spiMonkey"デモを追加しました。
オートサンプリングで指定できる最大サンプリング回数を4回/フレームに変更しました。 これは将来的なハードウェアのコストダウンの際に、これ以上のサンプリング回数を保証 できないことが予測されているためです。
ARM7へタッチパネル制御コマンドを送信した直後に割り込みがかかった場合に、 ARM7からの応答待ちから復帰できないことがある不具合があり、これを修正しました。
TP_RequestAutoSamplingStart()において、 バッファのサイズを指定できるよう引数を追加しました。 これによって、サンプリング回数よりも大きなサイズのバッファを指定できるようになり、 新規データによる上書きの対策が可能となりました。
TP_SetCallback()の引数が関数ポインタの更にポインタとなっていたため、 関数ポインタを直接引数として渡せるように変更しました。
async デモにおいて、全スレッドでの読み込み完了サイズの合計を total **** byte と表示する部分において、 サイズ加算の処理に不具合があり正確に表示されていませんでした。 これを修正しました。
オーバーレイモジュールを操作する各関数において、 データキャッシュの更新処理が正しく行われないという不具合を修正しました。
NITRO-CARDを使用する環境での実行時にFS_SetDefaultDMA()でDMA設定を変更すると、 ファイル読み込みが異常動作することがあるという不具合がありました。これを修正しました。
IRQハンドラの先頭で IE と IF の論理積が 0 のときに何もせずに抜けるようにしました。 これはIEの設定中に割り込みが掛かった時に永久ループに陥ることがあった不具合の修正となります。
スレッドシステムで作成できる最大スレッド数を8から16に変更しました。
現在作成されているスレッド数を取得する関数 OS_GetNumberOfThread() を作成しました。
これまで、ARM7用のアリーナの範囲を設定する際に固定の値を用いていましたが、 共用WRAMとARM7専用WRAMにARM7プログラムを格納した後の空き領域を考慮し、 それに対してARM7用共用WRAM アリーナと ARM7専用WRAMアリーナを設定するように変更しました。
また、これに伴い、OS_InitArena() でアリーナ設定をする際に lcf ファイルから定義される値を受け取る都合上、 上の2つのアリーナはARM7で、 残りのアリーナをARM9で設定するようにしました。
以前のバージョンまでの OS_SetProtectionRegion() を OS_SetProtectionReginParam() に改名し、より直感的にアドレスやサイズを設定できる関数を用意してそちらを OS_SetProtectionRegion() にしました。
OS_GetProtectionRegion() はその機能別に、OS_GetProtectionRegionParam() と OS_GetProtectionRegionAddress() と OS_GetProtectionRegionSize() とに分割しました。
OSライブラリのうちProfile機能を分割して独立したライブラリとしました。 これによって、Profile機能を利用するときにOSライブラリを再コンパイルする必要がなくなりました。
関数コールトレースを有効にする場合は
NITRO_PROFILE_TYPE=CALLTRACE
を指定し、 関数コスト計測を有効にする場合は
NITRO_PROFILE_TYPE=FUNCTIONCOST
を指定することで必要なライブラリがリンクされます。
関数コールトレースで、4レベル以上のインデント表示に不具合があり、修正されました。
現在の動作環境を取得する関数 OS_GetConsoleType() を作成しました。 取得出来る値には、ROMデータの読み出しデバイスやメインメモリサイズについての情報も含みます。
FINALROM ビルドでの OS_Printf() 等の表示関数の扱いを変更しました。 これまでは OS_Printf() を呼び出して何もせず戻る関数となっていましたが、 呼び出し自体もしなくなりました。 また、OS_Panic() では表示なしで停止するようになりました。
他の関数名仕様とあわせるために以下のTCM関数名を変更しました。 左が変更前、右が変更後です。
OS_SetParamITCM() → OS_SetITCMParam() OS_SetParamDTCM() → OS_SetDTCMParam() OS_GetParamITCM() → OS_GetITCMParam() OS_GetParamDTCM() → OS_GetDTCMParam()
profile 関連の機能を別ライブラリに分離したことで、OSライブラリをコンパイル しなおさなくてよくなったことに伴い、これまでOSデモのMakefileに含めて いなかった callTrace-1 callTrace-2 exceptionDisplay-3 functionCost-1 functionCost-2 functionCost-3 のコンパイルを含めるようにしました。
デモAntiAlias で、ClearColorが設定されて いなかったために背景色とブレンドされずアンチエイリアスが かかっていませんでした。これを修正しました。
デモ2D_Oam_5 と Sub_Oam_5 で、データキャッシュの Flush をしてなかったためにFINALROMビルドで正常動作していませんでした。 これを修正しました。
Ensataのバージョンアップにより、Ensataでの動作時のみおこなっていた AntiAlias, PosVecTest, CurrentMtxの動作制限を解除しました。
GXVRamBGExtPltt, GXVRamOBJExtPltt, GXVRamSubBGExtPltt, GXVRamSubOBJExtPltt で定義されている拡張パレット用のVRAM設定名称をスロット番号を含む表記へ統一しました。 過去の名称はマニュアルには記載されませんが別名として残されます。
GX_Init() を複数回呼び出すと、内部でstaticに持っているVアラーム構造体を その都度初期化に行ってそこで停止していました。 これを、GX_Init() を複数回呼び出してもVアラーム構造体の初期化は一度しか行われないようにしました。
以下の関数をインライン関数として用意しました。
G2_GetOBJCharName() G2_GetOBJColorMode() G2_GetOBJEffect() G2_GetOBJColorParam() G2_GetOBJMode() G2_GetOBJPosition() G2_GetOBJPriority() G2_GetOBJShape()
fx32 形式の定数を定義する FX_CONST() マクロを作成しました。
ランレングス圧縮データを8bit単位で展開する関数 MI_UncompressRL8() に不具合があり、正確に展開出来ませんでした。これを修正しました。
リファレンスマニュアルに「ツール」の項目を追加し、makerom makelcf に 関する説明を追加しました。
ブートメニューによって設定される各種情報を書き換えるための簡易ツールを 収録しました。タッチパネルのキャリブレーション設定ツールとしてお使いください。
$NitroSDK/bin/ARM9-TEG/Release/BootMenu.srl
が実行ファイルです(2.0PR5 において BootMenu.bin より改称)。これを TEG で実行することで、簡易メニューが起動します。タッチパネル以外の設定項目については最終品と異なる可能性があるため、現状では参考資料であるとお考えください。
SDK で提供している CodeWarrior の make によるビルド環境において FINALROM バージョンのビルド時にも "-g" オプションをつけて コンパイル、リンクを行なうように変更しました。
CodeWarrior では -g オプションで NEF ファイルへデバッグ情報が 追加されるだけで、ROMイメージのバイナリに違いはありません。
また逆に -g オプションを外してコンパイル、リンクを行なうための スイッチとして NITRO_NO_OPT_G を用意しました。
make NITRO_NO_OPT_G=1
とすれば -g オプションを外したビルドが行なわれます。
makerom 実行時、環境によっては、実際にはエラーは発生していないにも 関わらず "Error: Wrong format list file" というエラーメッセージが出力され、makerom の実行が停止してしまうバグがありました。 これを修正しました。
(2004/5/24)
CodeWarrior NITRO V0.5 に対応しました。ライブラリファイル名の変更および LCF ファイルの変更に対応しています。
ROM バイナリ作成ツールを elftobin から makerom に変更しました。 これによりファイルシステムおよびオーバーレイがサポートされます。
オーバーレイにおけるキャッシュラインに関連する問題回避のためオーバーレイセグメントの先頭と最後尾で 32 バイトアラインメントを保つように lcf 関連ファイルを修正しました。
.nef と .bin の生成規則の依存ファイルに $(LDEPENDS_NEF) と $(LDEPENDS_BIN) を それぞれ追加しました。具体的には以下のようになります。
$NitroSDK/build/buildtools/modulerule.cctype.CW:
$(BINDIR)/%.nef: $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF)
$NitroSDK/build/buildtools/modulerule:
$(BINDIR)/%.bin: $(BINDIR)/%.nef $(MAKEROM_ARM7) $(ROM_SPEC) $(LDEPENDS_BIN)
Windows 上において NITRO 関連ツール等を作成する際に CodeWarrior以外のCコンパイラからNitroSDKのヘッダファイルをインクルードしたい場合があります。しかしながら Visual C++ などの処理系においては、可変引数のマクロがサポートされていないなどの理由で nitro.h のインクルードがエラーとなります。 これに対処したいというご要望から $NitroSDK/include/nitro_win32.h を用意しました。
nitro_win32.h の内部で、以下の2つのdefine値を定義することで、gx.h, memorymap.h, type.h などのヘッダファイルのインクルードが可能となっています。
#define SDK_FROM_TOOL
#define SDK_HAS_NO_LONG_LONG_INT_
ただし、SDK_HAS_NO_LONG_LONG_INT_ の #define については「64ビット整数をlong long intから、__int64に置き換える」という指定なので、gcc等 long long int という定義が有効な環境ではこの定義は必要ありません。
CodeWarrior を使用するための IDE デモサンプルプログラムの配布を打ち切ることにしました。 既に CodeWarrior for NITRO において NITRO 用ステーショナリファイルが用意されているため IDE サンプルはその役目を終えたと考えたからです。
様々なデバイスを処理する統合コンポーネントferret を追加しました。特に指定しない場合、このコンポーネントがデフォルトで結合されます。
コンポーネントのパスは $NitroSDK/components/ferret/ARM7-TEG/(ターゲット) 以下になります。( Thumb コンポーネントの場合は ARM7-TEG の部分が ARM7-TEG.thumb となります。)
makerom によって生成したアプリケーション内で ROM ファイルシステムを使用するためのライブラリを追加しました。ディレクトリの列挙/検索、ファイルの同期/非同期リード、オーバーレイなどが可能になります。
FS ライブラリでは、NITRO の標準のソフト供給媒体である NITRO-CARD へリードアクセスする処理がサポートされています。FS ライブラリは TEG ボードのデバイス接続状況に応じて、ファイルシステムとして、カートリッジのイメージを使用するか NITRO-CARD のイメージを使用するかどうかを内部で切り替えます。
これに伴い SVC_ReadCard() が廃止されています。
タッチパネル制御関連 API がサポートされました。
ARM7 側と ARM9 側との処理分担の変更にともない、今まで別パッケージで配布していた TP ライブラリと API が変更されていますので、ご注意ください。また、この変更により、タッチパネルのキャリブレーションパラメータが変更になっているため、もう一度タッチパネルのキャリブレーション処理を行なってください。
新しいタッチパッドのキャリブレーションバイナリは、$NitroSDK/bin/ARM9-TEG/Release/BootMenu.srl (2.0PR5 において BootMenu.bin より改称) となります。バイナリ起動後、画面のメニューから TOUCH PANEL を選び、キャリブレーション処理を行なってください。
除算器および平方根演算器を割り込み処理のコールバック内で安全に使用できるように、 除算器、平方根演算器の現在の状態を保存、復帰するための API (CP_SaveContext, CP_RestoreContext) を用意しました。
また除算器および平方根演算器がマルチスレッドに対応になりました。
2x2 行列の MtxFx22 型変数を操作するための API が用意されました。
MTX_Identity22()
MTX_Concat22()
MTX_Inverse22()
MTX_Transpose22()
MTX_Rot22()
MTX_Scale22()
TEG ボードにおけるコマンド FIFO 溢れ処理のハードの不具合により GX_LoadMtx44 などの処理が正常に行なわれないことがありました。これを、ライブラリ側で対策しました。このハードの不具合は製品版では修正されます。
GX_SetBankForARM7() がサポートする引数として GX_VRAM_ARM7_128_C が追加されました。
API GX_SetBankForBGExtPltt において引数に GX_VRAM_BGEXTPLTT_01_F を設定したときに 正しく設定されていない不具合を修正しました。
3D エンジンの演算が処理落ちしたかどうかを判定するためにポリゴンカウンタを使用する 手法のデモが以下に追加されました。
$NitroSDK/build/demos/tips/SwapCrossOver
3D 画面演算の処理落ちのために 2D 画面とずれが生じるような場合には、 このポリゴンカウンタを使用した同期取りの手法も検討してください。
scaleW の値を任意に設定できる以下のような透視変換関連 API を作成しました。
G3_FrustumW(), G3_PerspectiveW(), G3_OrthoW()
またジオメトリエンジンへ送らずに行列作成のみを行なう、 MTX_Frustum(), MTX_Perspective(), MTX_Ortho() も別途用意しました。
コマンド FIFO リセット処理の実装を変更しました。内部処理として NOP を 128 個送った後 G3_End() を発行しています。
G3X_SetFog において fogMode を 1 から 0 に戻せない不具合がありました。これを修正しました。
将来接続される様々なデバイスの制御を考慮し、スレッドシステムの初期化をデフォルトで行なうように変更しました。OS_Init() で OS_InitThread() を呼んでいます。
スレッドシステムを使用しないライブラリを作成する場合は、NITRO_NO_THREADを 定義してコンパイルしてください。
浮動小数点値など一部の出力対応を省くことにより、標準関数 sprintf() よりも コードサイズ面で軽量な書式文字列関数 OS_SPrintf() とその系列を追加しました。 これは、主に ARM7 プロセッサ側での文字列処理に使用されています。
TEG 版でのプログラム作成の利便性を考慮し、メモリバイトアクセス対策の MI_ReadByte()、MI_WriteByte() が用意されました。これらは、製品版ライブラリにおいては単純なバイトアクセス命令に変換されます。
指定の IRQ を待つ関数 OS_WaitIrq() と OS_WaitAnyIrq()、OS_WaitInterrupt() を作成しました。OS_WaitIrq()とOS_WaitAnyIrq() はIRQを待つ間、他のスレッドに処理を譲ります。
OS_WaitInterrupt() はOS_Halt() にて待機しますのでスレッドの移動はありません。 これはこれまでのSVC_WaitIntr() と同じ動作を行うという位置付けで用意されています。
変数定義の際に、配置のアラインメントを指定する ATTRIBUTE_ALIGN() マクロを作成しました。このマクロ名は NINTENDO GAMECUBE SDK の定義に合わせたものとなっています。
Thread システム起動時に作成される最低優先度のアイドルスレッドのスタックサイズを、 SVC用にARM9で128バイト、ARM7で64バイトとしました。
OS の SpinLock で使用されるロックIDを管理する機構として OS_GetLockID(), OS_ReleaseLockID() を作成しました。
スレッド切り替え時のコールバック機能を追加しました。コールバックの登録は OS_SetSwitchThreadCallback() で行います。
OS_ExitThread() でスレッドを終了するときに、そのスレッドがロックしている Mutexを開放するようにしました。
ARM7 コンポーネントのメインループ処理を OS_Halt() ループにしました。
OS_SetProtectionRegion7(), OS_SetProtectionRegion7 が、 リージョン 6 に対する操作になっていたのをリージョン 7 への操作に修正しました。
各プロセッサの CPU クロック値 HW_CPU_CLOCK_ARM7,HW_CPU_CLOCK_ARM9 および 現在のコンパイルターゲットプロセッサの CPU クロック値 HW_CPU_CLOCK を定義しました。
OS_Panic() の停止動作を OS_Halt ではなく、OS_Terminate() としました。
OSのデモ構成を変更しました。これにより waitIrq-1, waitIrq-2 が追加されました。
またMakefile に入れないデモとして callTrace-1 callTrace-2 exceptionDisplay-3 functionCost-1 functionCost-2 functionCost-3 を用意しました。Makefile に含めていないのは、OSライブラリを特定のオプションでコンパイルする必要があるためです。
ハードの仕様上、割り込みの許可や禁止と実際のIRQの発生のタイミングの問題で IRQが発生したときにIME=0である場合がありましたが、この時何もせずに抜けるようにしました。
CodeWarriorのprofile機能を利用した関数コールトレースと、関数コスト計測の機構を追加しました。
NITRO-SDK における profile 機能のサポートについての解説は
$NitroSDK/docs/TechnicalNotes/MechanismOfProfiler.doc
をご覧ください。
SDKの割り込み要因と同様にアプリケーションで自由に使用できるチェックフラグ OS_IE_USER_FLAG0, OS_IE_USER_FLAG1 を用意しました。
NITRO-SDK で配布するサウンドラインブラリが2004年4月12日版となりました。
(2004/4/5)
CodeWarrior NITRO V0.4 に対応しました。これにより CodeWarrior のバージョンに対応してコンパイラ起動時のオプション -avoid_strb ⇔ -avoid_byte が切り替わります。
コンパイラのバージョン情報は $NitroSDK/build/buildtools 以下の verinfo.cw.cc と verinfo.cw.ld に保存されます。これらのファイルは CodeWarrior を 0.3 → 0.4 にアップグレードしたときにも自動的に更新されますが、0.4 → 0.3 へダウングレードさせた場合には更新されず不具合が起こります。CodeWarrior のダウングレード時には $NitroSDK/build/buildtools/verinfo.cw.* ファイルを手動で消していただくか、もしくはコマンドラインから make clean-verinfo と入力していただく必要があります。
GX_HBlankOBJProc() および GXS_HBlankOBJProc() においてパラメータ proc の値と実際の動作が逆になっていました。
この不具合は修正されました。
G2_SetOBJAttr() および G2S_SetOBJAttr() において GX_OAM_MODE_BITMAPOBJ モードに対して GX_OAM_EFFECT_AFFINEを使った時に rsParam パラメータの指定が OAM に反映されませんでした。
この不具合は修正されました。
GX_DisableBankFor*() において内部動作に誤りがあり、正しく動作していませんでした。
この不具合は修正されました。
NitroPostLinker.bat ファイルが、環境変数 CWFOLDER_IRIS を参照していました。
環境変数 CWFOLDER_NITRO を参照するように修正されました。
fs/file-1 デモにおいてリンク手順に不具合があり、NitroStartUp() を追加しても NitroStartUp() がリンクされませんでした。
これは修正されました。
現在、ツール評価版として付属している makerom ツールにおいて ARM9 の常駐モジュールのサイズが小さい場合エラーが発生していました。
これは修正されました。
現在、ツール評価版として付属している makelcf ツールにおける lcf テンプレートファイルにおいてモジュールサイズの計算の一部に誤りがありました。
これは修正されました。
(2004/3/30)
$NitroSDK/build/libraty/gx/src/g3_util.c 内に不備があり、G3_Frustum() の行列が正しく設定出来ませんでした。
この不具合は修正されました。
VRAM_A に テクスチャイメージのスロット0を確保してGX_LoadTex()でイメージを転送するとエラーが出て止まってしまう不具合を修正しました。
OBJにVRAM_Bを割り当てた状態で Textureロードなどを実行した場合、ASSERTで停止していました。
この不具合は修正されました。
G3X_GetCommandFifoStatus() からの返り値が正確ではありませんでした。
この不具合は修正されました。
DTCMの位置を変更出来るようになりました。
$NitroSDK/include/nitro/hw/common/mmap_global.h のHW_DTCM の値を変更することで可能です。
ただし、変更後にライブラリを full make する必要があります。
$NitroSDK/include/nitro/codereset.h に不備があり、常に thumb に切り替わるようになっていました。
この不具合は修正されました。
デバッガが例外ベクタを使用している時に、NITRO-SDK での設定との共存のために例外ベクタをフックする処理が間違っており、正確な動作が出来ませんでした。
この不具合は修正されました。
これまでは周期アラームのハンドル内で、そのアラーム自身をキャンセルすることが出来ませんでしたが、可能になりました。
スレッドシステムが初期化され、使用可能な状態かどうかを調べる関数 OS_IsThreadAvailable() が追加されました。
定数やアドレスを代入するアセンブラ表記において、ldconst や lda を止め、ldr
を用いた表記へ統一しました。
(変更前) (変更後)
ldconst r0, #CONSTANT → ldr r0, =CONSTANT
lda r0, Address → ldr r0, =Address
$NitroSDK/include/nitro/gx/gx_bgcnt.h の assert 判定に誤りがありました。
この不具合は修正されました。
0.5を表す小数定義を $NitroSDK/include/nitro/fx/fx_const.h に追加しました。fx16型、fx32型、fx64型それぞれの固定小数が、FX16_HALF 、FX32_HALF 、 FX64_HALF として定義されます。
FX_MUL32x64C と FX_Mul32x64c の丸め処理を統一しました。
(2004/3/17)
ARM9-ARM7間の通信を行う PXIライブラリを追加しました。
以下のグラフィックスサンプルが追加されました。
| 2D_CharBg_256_16 | アフィン拡張・256色×16拡張パレットキャラクタBGを表示 |
| 2D_CharBg_256BMP | アフィン拡張・256色ビットマップBGを表示 |
| 2D_CharBg_Direct | アフィン拡張・ダイレクトカラービットマップBGを表示 |
| 2D_Oam_256_16 | アフィン拡張・256色×16拡張パレットOBJを表示 |
| 2D_Oam_Bmp1D | 1次元マッピング・ビットマップOBJの表示 |
| 2D_Oam_Char1D | 1次元マッピング・キャラクタOBJの表示 |
| 2D_Oam_Direct | 2次元マッピング・ビットマップOBJの表示 |
| 2D_Oam_OBJWindow | OBJウィンドウの表示 |
| 2D_Oam_Translucent | 半透明OBJの表示 |
| 3D_BoxTest | ボックステストを行う |
| 3D_PolAttr_1Dot | G3_PolygonAttr() の GX_POLYGON_ATTR_MISC_DISP_1DOT 設定 |
| 3D_PolAttr_DpthTest | G3_PolygonAttr() の GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL 設定 |
| 3D_PolAttr_DpthUpdate | G3_PolygonAttr() の GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE 設定 |
| 3D_PolAttr_FARClip | G3_PolygonAttr() の GX_POLYGON_ATTR_MISC_FAR_CLIPPING 設定 |
| 3D_Pol_Vertex_Source | G3_TexImageParam() の GX_TEXGEN_VERTEX 設定 |
| 3D_Shadow_Pol | シャドウポリゴンを使用して影を表示 |
| AntiAlias | アンチエイリアシングを見る |
| Capture | キャプチャーを利用したモーションブラー効果 |
| ClearColor | クリアカラーを設定 |
| ClearImage | クリアイメージを設定 |
| CurrentMtx | カレントのクリップ座標行列、方向ベクトル座標行列を出力 |
| FlipRepeat | テクスチャのフリップ・リピートを変更 |
| LinesOver | ポリゴンのラインオーバー表示 |
| Master_Bright | マスター輝度の調整 |
| PosVecTest | G3_VectorTest(), G3_PositionTest()の結果を出力 |
| RamOverFlow | ポリゴンリストRAM・頂点RAMをオーバーフロー |
| VCount | Vカウンタ取得および変更 |
| ViewPort | ビューポートの設定変更 |
| Window | Hブランク期間中の操作によるウィンドウ変形 |
| Window_HDMA | HブランクDMAを使ってのウィンドウ変形 |
| DEMOLib | 共通処理 |
データ圧縮ツール ntrcomp を追加しました。
場所は $NitroSDK/build/tools/ntrcomp/ です。
NITRO-SDK と AGBSDK の両方をインストールして共存させる方法についてのドキュメントを $NitroSDK/docs/HowToJoinAGBDevEnv.txt に追加しました。
VRAMのバンク組み合わせの設定に, 80_EF, 80_EGのエントリを追加しました。
VRAMをEF, EGの組み合わせでBGまたはOBJに配置できるようしました。
また、SDKにてサポートされていない組み合わせでVRAMを配置したいという要求に対応するため、SDKのソース改編によるエントリの追加方法をドキュメンとしてまとめ$NitroSDK\docs\SDKHowTo/HowToMakeMyVRamBankType.txtに追加しました。
行列スタックの初期化の際、元の PROJECTION 行列のスタックレベルが0の場合に、スタックアンダーフローを起こしていました。
この不具合は修正されました。
ジオメトリコマンドサイクルの一覧に、マニュアル左ウィンドウの3Dジオメトリ(G3*)から移れるようにリンクを張りました。
指定の時間だけスレッドを休止させる関数 OS_Sleep() を追加しました。
IRQハンドラ内でスレッドを切り替える際に、スレッドリストの参照個所を間違い、本来起動すべきでないスレッドを起動することがありました。
この不具合は修正されました。
メッセージキューの最初のメッセージを参照してコピーするだけの関数 OS_ReadMessage() を作成しました。OS_ReadMessage() は、OS_ReceiveMessage() と違い、メッセージを送ろうとしてブロックされているスレッドを復帰させることはありません。また、メッセージキューの内容を変えることもありません。
IRQ割り込みのチェックフラグのセットで、タイマー割り込みの場合に誤ったビットにアクセスしてセットしていました。
この不具合は修正されました。
Vカウントアラームに、起動時間の近い複数の周期関数を登録した場合に最初の関数しか起動されない不具合を修正しました。
またこの修正に伴い、Vカウントアラーム周期関数の起動時間に遅延許容カウントを指定できるようになりました。
チックシステムに不具合があり、ある桁以上にカウントアップしないように なっていました。
この不具合は修正され、64ビットフルに値を取れるようにしました。
秒、ミリ秒、マイクロ秒で指定された時間と、OS_Sleep() や OS_SetAlarm() で使用されるシステムクロックを元にしたチックカウント値との変換マクロを追加しました。
以下がそのマクロです。
OS_MicroSecondsToTicks( usec )
OS_MilliSecondsToTicks( msec )
OS_SecondsToTicks( sec )
OS_TicksToMicroSeconds( tick )
OS_TicksToMilliSeconds( tick )
OS_TicksToSeconds( tick )
OS_SetIrqFunction() でタイマー割り込みコールバックを設定し、タイマー割り込みを開始し、コールバックが呼び出されると、そこでタイマー割り込みを再設定してもコールバックから戻るときにクリアしていました。
この不具合は修正されました。
OS_DisableInterrupts() で、IRQ、FIQの両方を停止していましたが、 デバッガとの兼ね合いのために
IRQ のみを停止するように変更しました。
但し ADバスのロック/アンロック、コンテキストスイッチ部分は IRQ と FIQ
の両方を停止させています。
ユーザの例外ハンドラを呼ぶ前に、あればデバッガの例外ハンドラを呼ぶように仕様を変更しました。
reg_DISP_DISPSTAT、reg_DISP_VCOUNT レジスタは所属カテゴリをGX に移し、reg_GX_DISPSTAT、reg_GX_VCOUNTに改名しました。
reg_OS_POWCNT は所属カテゴリをSND に移し、reg_SND_POWCNT に改名しました。
ARM9、ARM7 のレジスタ表 $NitroSDK/build/buildsetup/ioreg/io_reg_list*、$NitroSDK/build/buildsetup/ioreg_sp/io_reg_list* が加筆修正され、ほぼ現仕様の全てを網羅したものになりました。これまでに無かった部分の追加分は主に EXI、PXI カテゴリです。
リファレンスマニュアルの誤記をいくつか修正しています。 その中の一つ、MI_SetWRAMBank() という表記は MI_SetWramBank() が正しいものです。 修正に伴い、MI_SetWramBank() のマニュアルの html ファイルを MI_SetWRAMBank.html から MI_SetWramBank.html に変更していますのでご注意下さい。
OS内部のことになりますが、IRQハンドラのテーブルに誤りがありました。IEレジスタの各ビットに割り当てられている割り込み要因は、すべてのビットが順番にならんでいるわけでなく未使用の個所もあります。それを考慮せずテーブルを作成していたので、未使用の個所以降の割り込みがテーブルを参照する際にずれた個所をアクセスしていました。これを修正しました。
なお、未使用の個所もテーブルの一要因に割り当てたため、ARM9で2つ、ARM7で3つの配列要素が増えて使用メモリが微増しました。
(2004/2/27)
irisSDK を NITRO ハードウェアに対応させました。同時に SDK 名称を NITRO-SDK
と改めました。
この改称により NITRO-SDK には irisSDK から以下のような変更が行なわれております。ご注意ください。
iris.h の nitro.h への変更。
include/iris の include/nitro への変更。
IrisMain が NitroMain に変更。
IRISSDK_ROOT の NITROSDK_ROOT への変更。
IRIS_DEBUG のように IRIS_で始まるスイッチの NITRO_DEBUG などへの変更。
ライブラリのソースファイル、ヘッダファイルの一部をプロセッサ別に分類し、それそれ ARM9/ARM7/common というサブディレクトリに格納しました。
このため今まで OS などのヘッダファイルのインクルード時に iris.h や os.h を通さず直接 #include <iris/os/alloc.h> と指定されていた方は #include <nitro/os/common/alloc.h> という修正が必要となります。
サブ LCD 対応の API (GXS 関数群) を用意しました。 またその API を使用したデモプログラムも追加されています。 $NitroSDK/build/demos/gx/UnitTours 以下の Sub_ で始まるディレクトリをご参照 ください。
ELF ファイルの拡張子を .nef に変更しました。 NITRO 開発関連ツールも .nef への対応が予定されています。
サンプルコードが収録されているディレクトリを $NitroSDK/build/tests から $NitroSDK/build/demos に変更しました。
また SDK ライブラリのテスト処理のため、いくつかのファイルで自動テスト制御用のコードが埋め込まれました。具体的には#ifdef SDK_AUTOTEST 〜 #endif で囲まれた部分です。これは弊社内部で使用する部分ですので、サンプルコードをコピーしてご使用される場合は、削除していただいて結構です。
Thumb コード版のライブラリが生成ができるようになりました。 make コマンド起動時の変数または環境変数の NITRO_CODEGEN で切り替えます。
コマンド例
| THUMB 版コードの生成 | make NITRO_CODEGEN=THUMB |
|
| ARM 版コードの生成 | make NITRO_CODEGEN=ARM |
NITRO_CODEGEN を省略すると現在 ARM コード版のライブラリを生成します。
関数毎に ARM コード/ Thumb コードの生成を切り替え、また初期設定に戻すためのインクルードファイルを用意しました。
| ARM コード生成を指示 | $NitroSDK/include/nitro/code32.h |
|
| Thumb コード生成を指示 | $NitroSDK/include/nitro/code16.h |
|
| 初期指定に戻す | $NitroSDK/include/nitro/codereset.h |
(例)
関数 void A(void) を Thumb コードで生成するように指定する場合
#include <nitro/code16.h>
void A(void)
{
....
}
#include <nitro/code32.h>
CodeWarrior においては pragma で出力コードを直接変更できますが、コンパイラ毎の違いなどを本ファイルでなるべく吸収する方針としておりますので、これらのご使用をお勧めいたします。
C++ でのコード作成をサポートするために以下を追加および修正しました。
PAD_Read() 関数において X, Y ボタンの読み取りをサポートしました。
ハードウェアの仕様上、X, Y ボタン入力による割り込み発生(PAD_SetIrq() 参照)がサポートされていないことにご注意ください。
make 関連ファイル($NitroSDK/build/buildtools の commondefs, modulerules など) を修正しました。
これにより以下が実装、修正されました。
マクロ定義で、複文 (中カッコで複数の文が囲まれているだけのもの) の記述をなくしました。
ARM/Thumb コード出力の切り替えにおいて不都合となるため ヘッダファイル内でのインラインアセンブラ関数 (static inline asm による) を C ソース内に移動させました。
ARM9/ARM7 用の出力コードの切り替えに使用する、Makefile 内のマクロ変数 CODEGEN_PROC を NITRO_PROC へ名称変更いたしました。
バイナリファイル作成時にデフォルトで ARM9 用実行ファイルと結合する ARM7 用実行ファイルを新規に作成しました。これには、X,Y ボタンの読み取り処理が含まれます。ファイル本体は $NitroSDK/build/components/idle/ARM7 以下に収録されています。
以前の SDK に含まれる ARM7 用実行ファイルと本リリースの SDK によって作成された ARM9 実行ファイルとを結合すると PAD_Read() 関数が正常に動作しません。ARM7 の実行ファイルを Makefile で明示的に指定しておられる方はこの点にご注意ください。
IRQスタックのサイズをLCFファイルに記述することで設定出来るようにしました。
例外発生時(IRQ例外、FIQ例外、SWI例外を除く)に、例外発生時点のコンテキストを表示する機能を追加しました。また、ユーザのコールバックルーチンも呼ばせることが出来ます。
コールバックとして NULL が指定された場合、コールバックをセットせず進むよう にしました。バスのアクセス競合によるストールが発生しない場合、DMA コマンドを 送信後、ウェイトせずに関数から戻ります。
ITCM 及び DTCMを含む領域を DMA の転送先及び転送元に指定したときに、 DEBUG ライブラリでは警告を出すようにしました。
crt0.c 内で、DTCM をクリアするようにしました。 これによって、スタック領域がクリアされるようになりました。 また、BG/OBJパレット、OAMもクリアするようにしました。
DC_StoreRange(), DC_FlushRange(), DC_TouchRange(), IC_InvalidateRange() で、 開始アドレスの下位方向への32バイト境界丸めが実装されていませんでした。 これを実装しました。
スレッド機構に関して以下の変更を加えました。
スレッドにおけるスタック溢れをチェックする関数 OS_CheckStack() を用意しま した。
16 bit タイマーを 2 つ使用することで、64 bit 値をもつ時刻カウンタと、 指定時刻にコールバック関数を呼び出すアラーム機構を実装しました。 これはタイマー割り込みを多重化させることで、ハードウェアのタイマーの数より も多いコールバック関数を登録できます。 これらの機能はオプションとなっており、使用する使用しないを選択することができ ます。
V カウント割り込みを多重化し複数のコールバック関数を登録できるようになり ました。詳しくは OS の V カウント関連関数のリファレンスマニュアルをご覧く ださい。
MI_DmaSend*, MI_CpuSend* API が追加されました。
DEBUG 版ライブラリにおいて OS_StartTimer32() の id に OS_TIMER32_23 また OS_StartTimer48() における id にOS_TIMER48_123 を設定するとアサートが発生して いたのを修正しました。
メモリインターフェイスに MI_CpuClear() 等の DMA ではなく CPU によるメモリ操作関数を用意し、 UTL ライブラリを廃止しました。
TEG ボードにおいて、VBLANK 期間の初期にメインプロセッサのバスへ特定パターンのデータが出力されたときにポリゴンの表示が乱れるというハードウェアバグがあります。 この対策をライブラリ内で行ないました。
実際の対処コードは GX_Init() に埋め込まれています。対策の詳細は、$NitroSDK/build/libraries/gx/src/gx.c の #ifdef SDK_TEG_WA_VBLANK 〜 #endif で囲まれた部分を参照してください。
またこの対処コードは V カウントアラームを使用していますので、この処理を有効にしておきたい場合は V カウントアラームを停止しないでください。
Light 処理を行なうデモにおいて、ライトカラーなどのパラメータの総和が かなり大きく、適切な値ではありませんでした。このため、ポリゴン面が少しでも ライトの方向を向いただけで、ライトの強さが MAX値になっていました。 これを調整しました。
また DEMOLib においてスペキュラライトに関するパラメータテーブルの定義を見直し、コサインの n 乗を近似するようにしました。gx/UnitTours/3D_Shininess デモでパラメータテーブルの違いによる変化を見ることができます。
動的 DL 作成関数 G3* に DL バッファオーバーフローチェックが追加されました。 これは DEBUG 版のライブラリをリンクした場合のみ有効になります。
G3_Ortho() の実装誤りが修正されました。
G3_EndMakeDL() が正しいサイズを返さないバグがありました。 これを修正しました。
G2_SetBG*Control256x16Pltt() にキャラクタベースブロックを指定するための引数を追加しました。
G3CS_LoadTexMtxEnv(), G3CS_LoadTexMtxTexCoord() で生成されるディスプレイリストに問題がありました。これを修正しました。
A3I5 テクスチャを API に対応させました。このテクスチャが実際に表示できるかどうかはエミュレータの仕様をご確認ください。
Fx16 を要素とする 3D のベクトル型 VecFx16 をサポートし、それを取扱う算術関数 VEC_Fx16* シリーズを用意しました。
$NitroSDK/build/demos/gx/UnitTours/DEMOLib のヘッダファイルに C のリンケージ指定である extern "C" { の記述を追加しました。
この DEMO ライブラリは UnitTours の実装を簡単にするということを主眼において作成されています。このため仕様の変更についてご要望に副えない場合があります。非常に申し訳ございませんが、この DEMOLib をアプリケーションでご使用になられる場合は、その点ご了承ください。
(2004/2/4)
メインループ内における
SVC_WaitVBlankIntr();
G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W);
上記の API の出現位置が逆になっており、必要のない V-BLANK 待ちが発生していました。入れ替えると問題は解消されます。
問題が発生する 3D グラフィクスの test コードは、修正されました。
VEC_Magに大きなベクトルを入れたときに内部計算でオーバーフローが発生し、結果がおかしくなります。
上記バグは、修正されました。
fx_mtx43.c において行列 b の平行移動要素が無視されてしまいます。
上記バグは、修正されました。
G2ライブラリの G2_SetBGxControl() 系の関数内での設定が正しくありません。
上記バグは、修正されました。
MTX_Inverse43() において、得られた逆行列の平行移動成分に誤りがありました。
上記バグは、修正されました。
GX_SetOBJVRamModeBmp() の定義誤りがありました。
修正されました。
IDE サンプルプロジェクトファイルでバイトアクセス対策版ライブラリへの対応ができていませんでした。これと同じくコマンドライン環境で使用していたライブラリもバイトアクセス版へ完全に移行させました。
IDE のサンプルプロジェクトファイルを修正版と差し替えました。
G2_SetBG3Priority の定義誤りがありました。
上記バグは、修正されました。
g3.h のマクロ GX_FX16PAIR で符号拡張の取り扱いに問題がありました。このマクロは SDK の他の個所では使用されていなかったのでSDK自体には影響がありません。
上記バグは、修正されました。
パッケージにはビルド済みのライブラリファイルが収録されていますが、そのライブラリの libos.a をそのまま使うと OS_Printf で IS-IRIS-EMULATOR への出力を行いませんでした。IS-IRIS-EMULATOR インストール済みの環境でライブラリを再ビルドされるとこの問題は解消します。
パッチに修正されたライブラリファイルを収録しました。
ARM7 側のプログラムをリンクする時、環境変数“IS_IRIS_DIR”が定義されていない場合は、libstubsisd.a をリンクしようとしますが、このファイルが無いためエラーとなります。
ARM7 版 libstubsisd.a ファイルとそのソースファイルを追加収録しました。
システム予約領域のサイズが、新しい BOOT ROM では変更(32bytes->64bytes)になっていることに対応していませんでした。
上記バグは、修正されました。 これに伴いシステムモードのスタック領域の大きさも 32bytes 小さくなっています。
G3_LightVector コマンドは発行直後に方向ベクトル行列による座標変換を行うので、G3_LightVector() は、カメラ行列の設定後に処理されなければなりません。
G3_LightVectorを使う全てのサンプルが修正されました。
MI_DmaCopy16ASync() は内部でDMA終了割り込みを発生させておらずコールバックが呼ばれませんでした。
上記バグは、修正されました。
NINTENDO Technical Support Center