English
FAQSBLプログラミング関連
戻る進む
FAQ/SBLプログラミング関連

ペリフェラル



PER_LInitでペリフェラルIDを返さないのはどうして?

Q)
初期化(PER_LInit)でペリフェラルIDを渡さないのは何故?

A)
1つのゲーム内で異なるペリフェラルを使用できるようにするためです。

( 例 → 1P = アナログ、2P = マウス のゲーム )


マルチタップに関しての記述は?

Q)
マルチタップに関して。

何でしょうか。

A)
マルチタップIDとマルチタップコネクタ数は、本体接続端子がどの様な接続 状態になっているかの情報取得に用います。

ライブラリドキュメント風に書くと次のようになります。

◆マルチタップ情報(PER_LGetPer関数で取得)
typedef struct {
  PerMulId    id;     /* マルチタップID     */
  PerMulCon   con;    /* コネクタ数         */
} PerMulInfo;         /* マルチタップ情報   */

[取得例]
void  *per_data;
PerMulInfo *mul_info;
PER_LGetPer((PerGetPer **)&per_data, &mul_info);
    mul_info[0].id   本体端子1のマルチタップID
    mul_info[0].con  本体端子1のコネクタ数
    mul_info[1].id   本体端子2のマルチタップID
    mul_info[1].con  本体端子2のコネクタ数

[詳細]
接続状態により次の値が返る。

  • マルチタップID(ポートステータスの下位 8BIT をマスクした値)
    マルチタップを接続: (00〜E0) シンボル未定義
    未接続 or 直接接続: (F0) PER_MID_NCON_ONE
    UNKNOWNデバイス : (MD-PID) シンボル未定義
    (*)MD-PID : メガドライブペリフェラルID

  • マルチタップコネクタ数(ポートステータスの上位 8BITをマスクした値)
    未接続 or UNKNOWNデバイス : (00) PER_MCON_NCON_UNKNOWN
    直接接続 : (01) シンボル未定義
    接続マルチタップコネクタ数 : (02〜0F) シンボル未定義

[備考]
現在市販されているマルチタップは次の2種類です。

  1. セガタップ (メガドライブ用ペリフェラル×4)
    マルチタップID = 00, コネクタ数 = 04

  2. マルチターミナル6 (サターン用ペリフェラル×6 の接続に使用)
    マルチタップID = 10, コネクタ数 = 06


ペリフェラルのデータ出力について。

Q)
ペリフェラルデータに関して、

A)
マウス以外のペリフェラルは、デジタルデバイス型データフォーマットを 拡張した構造になっていますので、特に変換を行う必要はありません。

例えばハンドルコントローラの場合ですと、
「デジタルPADのデータ」+「アナログのデータ」
といったデータフォーマットになっています。

「ネジコン」のデータフォーマットについては詳しくないのですが、上記同様に デジタルPADの拡張といった形であれば問題ないと思われます。 新型ペリフェラルの発売自体は状況次第ですが、もしもデータフォーマットが 新規のものであればペリフェラルIDが追加されると思われますので、 現在開発中のソフトで対応することは不可能です。

デジタルデバイスのみ対応のソフトの場合にも、

が接続されてた場合には「デジタルデータ」を利用 してゲームの操作が可能なようにプログラムするようにお願いいたします。

マウス未対応のソフトでマウスが接続された場合には、無視するかデジタル的な 動作をするように変換する等の対応をしてください。

最後にキーボードについての詳細情報ですが、通常のゲーム操作で使用する限り 必要な情報はフォーマットに規定されていると考えております。

詳しいペリフェラルのデータフォーマットについては、

参照
『HARDWARE MANUAL VOL.1 SMPC ユーザーズマニュアル』
3.2サターンペリフェラル標準フォーマット
からをご参照ください。


タイプの違うペリフェラルが刺さっている場合はどうなるの?

Q)
マルチタップにタイプの違うデバイスがささっているとどうなりますか?

A)
ライブラリはSMPCが収集したペリフェラルデータを、[SIZE + 2] のバウンダリ にそろえて出力します。その際余ったペリフェラルデータは読み飛ばされます。
ペリフェラルIDの加工とデータのバウンダリ処理以外にはデータの内容を加工 しませんので、タイプの違うデバイスがささっていても問題ありません。
ユーザープログラム側で、ペリフェラルID・ペリフェラルサイズからどの ペリフェラルが接続されているのかを判別するようにしてください。

(例)
IDが[PER_ID_DGT]、サイズが[PER_SIZE_DGT]以上ならば デジタルデバイスが接続中


ペリフェラルサイズって何に使うの?

Q)
SATURN¥SEGALIB¥MAN¥MANPER.TXT の
「必ずペリフェラルID,ペリフェラルサイズを参照してから....」
のペリフェラルサイズの値はどう使えばいいのですか?
IDだけで十分なのでは。

A)
IDだけでは不十分な場合があります。
ペリフェラルID が [PER_ID_NCON_UNKNOWN] の場合には、

  1. ペリフェラル未接続状態
  2. SMPC UNKNOWN ペリフェラルが接続されている状態

の2通りあり、バーチャガンが2番目にあたります。
SMPC UNKNOWN ペリフェラルがマルチタップに接続されている場合には、

ペリフェラルID =
PER_ID_NCON_UNKNOWN
ペリフェラルサイズ =
SMPC UNKNOWN ペリフェラルが持つメガドライブペリフェラルID(MDPID)

という値が返りますのでこの値から検出する必要があります。
(バーチャガンの[MDPID] は、16進のAです。)

注 意
バーチャガン自体はマルチタップに対応していません。
(接続しても正常に動作しません)

バーチャガンが本体端子に直接接続されている場合には、マルチタップ情報が次の値となります。

マルチタップID = A0
コネクタ数 = PER_MCON_NCON_UNKNOWN


PER_ID_MDの「メガドライブ」とは?

Q)
PER_ID_MDの「メガドライブ」とは何でしょうか?

A)
メガドライブ用PADを接続した場合のIDです。(3Bと6Bの両方共通)


マルチタップに接続したペリフェラルが突然操作不可能になる。

Q)
マルチタップに接続したペリフェラルが突然操作不可能になるんですが。

A)
この現象が発生した場合には、操作できなくなった際にペリフェラルID 等にどんな値が返ってきているかを調査してください。
また、次のような対策を行ってください。

もしも以上の変更を行っても現象が発生する場合には、「未接続」の ステータスが返ってきた際にPER_Linit関数を再度実行するようにしてください。
(数回繰り返しても「未接続」が返る場合には本当に未接続であるとみなす ようにしてください。)


アナログペリフェラルについて詳しく教えてください。

Q)
アナログミッションスティックとレーシングコントローラーの入出力関係 について教えてください。

A)
ライブラリの初期化には PER_LInit() を使用してください。
その際ペリフェラルサイズにはアプリケーションにて必要なサイズを指定して ください。(例:アナログデータを3軸分必要な場合 5)
ペリフェラルデータの取得には、PER_LGetPer()を使用してください。

レーシングコントローラー、ミッションスティックおよび マルチコントローラは、全てアナログデバイスのIDをもっており データフォーマットは共通ですが、データサイズが異なります。

アプリケーション側ではこれらの情報を元に、現在何のペリフェラルが接続 されているかを判断するようにしてください。
ペリフェラルに特有なボタンは、次のようなデータフォーマットの対応関係と なっています。


マルチタップにアナログデバイスを繋ぐと動作しないのですが。

Q)
アナログミッションスティックをマルチタップに接続した時、ペリフェラルID の取得にとても時間が掛かるのですが。

A)
ミッションスティックをマルチタップに接続した場合は、HARDWARE的に情報を 正しく取得できません.この様な接続に対しては、アプリケーション側で 対応する必要はありません。


戻る進む
FAQSBLプログラミング関連
Copyright SEGA ENTERPRISES, LTD,. 1997