##

    --------------------------------------------------------

    セガライブラリに関する注意事項  1998/10/19
                   Copyright 1998 SEGA Enterprises, LTD.

    --------------------------------------------------------

## ★目次

- Ninjaデバッグ文字列表示関数の仕様について
- Ninjaビュー関数に関して
- Ninjaモデル関数に関して
- BootROM起動後のボーダーカラー設定
- バックアップライブラリのバグについて
- GDドアオープンについて
- GD-DAについて
- ドライブのスタンバイ状態とDAのポーズについて

## ★Ninjaデバッグ文字列表示関数の仕様について

このSDKに含まれているNinjaライブラリの文字列表示関数を使用する場合の注意事項についてご説明いたします。

このSDKのNinjaライブラリでは、デバッグ文字列表示関数(njPrint、njPrintB、njPrintC、njPrintD、njPrintF、njPrintH、njPrintColor、njPrintSize等)を使用する前に、初期化関数njInitPrintを使用するようになりました。
njInitPrint関数は必ず、njInitVertexBuffer関数の後に行わなければなりません。

これは、njPrint系がデバッグ文字フォント用に占有するテクスチャRAMを開放することが出来るような仕様へと変更したためです。
この事により、njPrintで使用していたテクスチャ領域は最終的にはアプリケーション側に開放され、その分アプリケーションはテクスチャを使用できることとなり、テクスチャRAMを有効に活用することができます。
なお、一旦niInitPrintで確保した文字フォント用テクスチャ領域を開放するには、njExitPrintを使用します。

## ★Ninja ビュー関数に関して

Ninjaライブラリのビュー関数は、一部を除きカメラ関数に置き換えられます。新規開発の場合はカメラ関数のご利用をお願いいたします。ビュー関数は今後のバージョンアップ対応は行われません。

## ★Ninja モデル関数に関して

Ninjaライブラリのモデル関数は、ベーシックモデル用関数とチャンクモデル用関数の２種類が存在しますが、今後の機能アップはチャンクモデル用関数のみとなります。

## ★BootRom起動後のボーダーカラー設定

BootROMが起動した時にでるライセンスロゴは、ボーダーエリア（画面非表示領域）に白のカラーを設定します。このままアプリケーションに処理が渡された場合、ボーダーエリアに白が残ったままの状態になるため、画面の外に白の枠が出来てしまいます。この場合、 ユーザー側でボーダーカラーを改めて設定してください。

    ＜例＞
        njSetBorderColor( 0x00000000 ) ;/* ボーダーに黒を設定 */
        sbInitSystem( NJD_RESOLUTION_640x480_NTSCI, NJD_FRAMEBUFFER_MODE_RGB565, 1 );

njSetBorderColor関数はレジスタに対し直接書き込むので、初期化前に設定しても 問題ありません。。

## ★バックアップライブラリのバグについて

buAnalyzeBackupFileImage関数にはアドレス計算を間違えるバグがあり、正常に動作しません。
本関数をお使いの方は、御面倒でも、VMのファイルフォーマット仕様をご覧の上、アプリケーション側で対応して頂く用にしてください。
このバグは次回のリリースにて修正されます。

## ★GDドアオープンチェック

1. エミュレータとドライブの違い
   開発ターゲットで使用するGDエミュレータ(GD Workshop、以降GD-Mと呼称)には、実際のドライブとの仕様的な違いが存在します。
   gdFsGetDrvStat関数にて取得するGDドライブのステータスは、実ドライブでは時間経過と共に随時変化しますが、GD-Mではドライブへの何らかのコマンド発行が発生しない限り、ドライブのステータスは変化しません。
   この事は、GD-Mにて定期的にドライブの状態を把握するには、定期的にドライブに何らかのコマンドを発行しなければいけないことを意味します。
   また、ドライブ側でのコマンド処理には最低2msの時間を要し、その間のドライブへのコマンド発行は不可能です(BUSYとなります)。
   この為、GD-Mでのドライブのステータスを取得する為に gdFsRegDrvStat関数を使用すると、前述の理由により最低2msの期間ドライブを占有するため、その他のディスクアクセス(MPEG再生等)に、動作上問題を生じさせる事があります。
   以上の問題を回避する為には、

   > ・GD-Rを作成し、実ドライブを用いたデバッグをする。
   > もしくは
   > ・ドアオープンの検知は、GDエミュレータでは行わない。

   ようにして下さい。

2. 瞬間的なドア開閉操作について
   GDのドアオープンステータスは、gdFsRegDrvStat関数にて検知する事になりますが、以下のような問題があります。
   (GD-Mを含め)GD ROMドライブは、ドアオープン後に即座にドアクローズされた場合に、GDドアのオープンステータスを返さない場合があります。
   この場合、ドアクローズ後の最初のGDアクセスにおいて、GDFS関数のエラー値、GDD_ERR_UNITATTENTが検出されます。
   本エラーはディスクの交換が発生したことを意味します。アプリケーションが本エラーを検知した時には、GDドアオープンが発生したとみなして、ゲーム中のドアオープン発生時と同様の処理(メモリーカードへのセーブの終了後に、本体BOOT-ROMの操作画面に戻る)を実行して下さい。（本来の目的のディスク交換が発生する場面はのぞきます)
   なお、GDD_ERR_UNITATTENTはドライブのステータスではなく、ファイルアクセス関数のエラーとして返るため、gdFsRegDrvStat関数による、ドライブのステータスで検知する事は出来ません。 　よって、長期間に渡ってディスクアクセスが発生しない場合にユーザがドアの瞬間的な開閉操作が発生した場合、ユーザの全く意図しないところで本体の操作画面に戻るといった事態が発生することがあります。
   このような事態を回避するには、次のようにして下さい。
   - 数秒に一回程度の頻度にて、gdFsReqDrvStat関数を実行する
   この関数の戻り値をチェックすることで、前述の現象をある程度回避できます。

3. ドアオープンの検知
   GDのドアオープンステータスについてはgdFsRegDrvStat関数を使用しますが、前述の通り、この関数を検知するだけでは、ドアオープンを完全に検知することは出来ず、突然ファイルアクセスに失敗する事態(GDD_ERR_UNITATTENTエラーの発生)が発生します。
   このような事態を避けるため、必ずGDFSライブラリのエラーコールバック関数を登録し、GDD_ERR_UNITATTENTエラーおよび GDD_ERR_TRAYOPENDエラーを絶えずチェックするようにして下さい。
   まとめますと、ドアオープン検知として
   - V-BLANK割り込み内での、gdFsGetDrvStat関数によるドアオープンステータスチェック
   - 数秒に一回程度、gdFsReqDrvStat関数によるドア開閉チェック
   - gdFsEntryErrFuncAll関数で登録するエラーコールバック関数内でのチェック
   以上の全ての方法を併用する事を推奨します。
   詳細につきましては、

   > KATANA\SHINOBI\SAMPLE\DOOROPEN

   サンプルを参照してください。

## ★DA再生時の音量設定について

GDDAの音量を設定する場合の注意事項についてご説明申し上げます。
Dreamcastハードウェアの初期ロットには、GDDAの音量について以下のような不具合が見つかっております。

> GDDAを使用していない時に、GD-DAの音量を上げておくと、オーディオ出力からノイズが入る事がある。

従って、GD-DAを使用していない際には、GD-DAの音量を0にしておく必要があります。
この症状を回避するには、アプリケーション起動時に、ダミーのGDDAを音量0で再生してください。
一旦、このような操作をすれば、あとで同様の症状が起こることはありません。

## ★DA再生とドライブのスタンバイ状態について

DA再生のポーズ状態が3分以上継続した場合、GDドライブは、スタンバイ状態となりドライブの回転が停止し、ピックはデフォルト状態となります。
この状態で、GDDAの再生を再開するとGDドライブはポーズ時のピックの状態を復元できず、ポーズ時からの再生復帰が出来なくなります。
この場合、アプリケーションでこの症状の回避が出来ます。
ポーズ開始時
gdFsGetDaInfo関数で、ポーズ時のフレームアドレスを取得
ポーズ再開時
gdFsGetDrvStat関数でドライブのステータスを取得し、ドライブがPAUSE状態であれば、gdFsDaRelease関数でそのまま再生を再開。
ドライブがSTANDBY状態であった場合、該当トラックの最終フレームアドレスを取得し、gdFsDaPlaySct関数でポーズ時のフレームアドレスから、トラックの最終フレームアドレスまでを再生する。
詳細につきましては、

> KATANA\SHINOBI\SAMPLE\SOUND\GDDA2

サンプルをご覧ください。

オーバービューに戻る
TOPに戻る