☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ペリフェラルデータ取得関数群−ガンコントローラ−

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


【0. 概要】
	本関数群は、ガンコントローラ（仮称）を取り扱う機能を提供します。

《0.1 ガンコントローラ仕様》
	Dreamcastのガンは、TV画面の走査線を検出する従来のSaturnと同じ
	方式を採用しています。


【1. ガンモード】
	ガンを使用するには、コントローラライブラリを「ガンモード」と
	呼ばれる特殊な状態に設定する必要があります。これは、ガンが通常の
	コントローラやキーボード、ＶＭといったペリフェラルと大幅に異なる
	アクセス方式であるためです。ガンモード中は、さまざまな制限事項が
	あります。

《1.1拡張ペリフェラルに関する制限事項》
	ガンモード中では、拡張ペリフェラルのアクセスに、大幅な制限が加わります。

	・ＶＭ（ビジュアルメモリ）をはじめとするメモリーカード
		メモリーカードへのアクセスは一切できません。
		これにより、以下のライブラリは使用しないでください。
			液晶ライブラリ、バックアップライブラリ、
			ペリフェラルタイマライブラリ

			特に、バックアップライブラリは、buExit()関数を
			使用して、終了しておいてください。
			使用した場合でも、マウント処理に失敗し、メモリーカードを認識
			することができません。

	・ぷるぷるぱっく
		特に制限はありません。振動ライブラリを使用して、ガンに接続された
		ぷるぷるぱっくを振動させることができます。

	・SIP
		現在未確認ですが、使用しない方が無難と思われます。


	特にバックアップライブラリが使用できないため、アプリは次のような方法で
	ＶＭへのアクセスを行ってください。

		・通常はガンモードで動作し、セーブ、ロード画面のみ通常モードにする。
		  この場合、セーブ画面に入る段階等でバックアップライブラリの初期化を
		  行い、セーブ画面を抜けるときに終了する。



《1.2画面フラッシュ》
	ガンモード中にガンのトリガを引くと、ガン座標の検出のためにライブラリが
	内部で自動的に1INTの間画面をフラッシュさせます。フラッシュの色は
	デフォルト状態では白(0x00c0c0c0)となっています。
	フラッシュを行わないとガン座標が正しく検出できません。


《1.3ガンの優先順位》
	ガンはハードウェアの仕様上、1INTに1つのポートのデータしか取得できません。
	ライブラリではポートAから優先的にデータを取得しています。従って複数の
	ガンのトリガが同時に引かれた場合、若い番号のポートのトリガが優先されて
	判断されます。


【2. 関数仕様】

《2.1関数一覧》
+----------------------+----------------------------------------+
|関数                  |機能                                    |
+----------------------+----------------------------------------+
|pdGunEnter            |ガンモードに入る                        |
+----------------------+----------------------------------------+
|pdGunLeave            |ガンモードから抜ける                    |
+----------------------+----------------------------------------+
|pdGunGetLatchedPort   |座標を検出したコントロールポートを得る  |
+----------------------+----------------------------------------+
|pdGunGetPosition      |ガンの座標を取得する                    |
+----------------------+----------------------------------------+
|pdGunSetFlashColor    |画面フラッシュの色を設定する            |
+----------------------+----------------------------------------+
|pdGunSetCallback      |トリガ情報設定用コールバックを登録する  |
+----------------------+----------------------------------------+
|pdGunSetTrigger       |トリガ情報を設定する                    |
+----------------------+----------------------------------------+




《2.2 関数API》
［関数］void pdGunEnter(Uint32 portbit)
［入力］portbit  ガンモードに設定するポート
［出力］なし
［戻り値］なし
［機能］コントローラライブラリをガンモードに設定します。
［参照］pdGunLeave()
［使用例］

		pdGunEnter(PDD_GUNMODE_A | PDD_GUNMODE_B);


----------
［関数］void pdGunLeave(void)
［入力］なし
［出力］なし
［戻り値］なし
［機能］コントローラライブラリを通常モードに設定します。
［参照］pdGunEnter()
［使用例］

		pdGunLeave();


----------
［関数］Sint32 pdGunGetLatchedPort(void)
［入力］なし
［出力］なし
［戻り値］ガン座標を検出したポート番号(PDD_PORT_A0/B0/C0/D0)
          ガン座標を検出しなかった場合は-1
［機能］ガン座標を検出したポート番号を返します。
        座標検出は、トリガが引かれた時またはpdGunSetTrigger()関数により
        擬似的にトリガ情報が設定されたときに行われます。
［参照］
［使用例］

		Sint32 gunno, x, y;

		gunno = pdGunGetLatchedPort(void);
		if (gunno < 0) return 0;
		pdGunGetPosition(&x, &y);


----------
［関数］void pdGunGetPosition(Sint32* x, Sint32* y)
［入力］x, y   ガン座標を取得するポインタ
［出力］x, y   ガン座標
［戻り値］なし
［機能］ガン座標を取得します。
        座標検出は、トリガが引かれた時またはpdGunSetTrigger()関数により
        擬似的にトリガ情報が設定されたときに行われます。
［参照］
［使用例］pdGunGetLatchedPort()の例を参照してください。


----------
［関数］void pdGunSetFlashColor(Uint32 color)
［入力］color  画面フラッシュの色
［出力］なし
［戻り値］なし
［機能］トリガが引かれた際の画面フラッシュの色を設定します。
        ・0を指定すると、画面フラッシュを行いません。ゲーム画面が比較的
          明るくなるようにデザインされているならば、フラッシュさせなくても
          座標検出がある程度行われる場合があります。
        ・座標検出時に画面が暗い（輝度が低い）と、正確な座標検出が行われな
          かったり、全く検出できないことがあります。
        ・初期値は白(0x00c0c0c0)です。
        ・色の指定はグラフィックライブラリのボーダーカラーの設定に準じます。
        ・VGA画面モードでは輝度が低くなるため、若干明るめの値を設定して
          ください。
［参照］
［使用例］

		pdGunSetFlashColor(0x00c0c0c0);


----------
［関数］void pdGunSetCallback(Sint32 (*func)(void))
［入力］func   コールバック関数アドレス
［出力］なし
［戻り値］なし
［機能］トリガ設定用コールバック関数を登録します。
        ・コールバック関数がFALSEを返すと、実際にトリガを引いても座標検出が
          行われなくなります。必要に応じて後述のpdGunSetTrigger()関数で
          トリガを設定してください。コールバック関数がTRUEを返すと、通常通り
          トリガによる座標検出が行われます。

［参照］pdGunSetTrigger()
［使用例］

		static Sint32 callback(void)
		{
			static Uint32 count = 0;

			if ((count & 3) == 0) {
				pdGunSetTrigger(PDD_PORT_A0);
			}
			count++;

			return TRUE;
		}




----------
［関数］void pdGunSetTriger(Uint32 port)
［入力］port   ポート番号(PDD_PORT_A0/B0/C0/D0)
［出力］なし
［戻り値］なし
［機能］ソフトで擬似的にトリガを引き、座標を検出させます。
        ・トリガ設定用コールバック関数中以外で使用しても無効となります。
          必ずpdGunSetCallback()でコールバック関数を登録し、その関数中で
          呼び出してください。
        ・この関数は、実際にガンのトリガが引かれなくても撃ったことにする
          ソフトでの連射等に使用します。
［参照］pdGunSetCallback()
［使用例］pdGunSetCallback()の例を参照してください。






[EOF]
