English
FAQSGLプログラミング関連
戻る進む
FAQ/SGLプログラミング関連

ペリフェラル/SMPC



マウスを使用したい。

Q)
SGLでマウスを使用したいのですが、デジタルデバイスデータ型のように、 ポインティングデバイスデータ型を見つけることができませんでした。
SGLでマウスを使用したい場合は、どうすれば良いのでしょうか?

A)
PerPointという構造体が用意されています。この構造体を使うとマウス等の ポインティングデバイスのペリフェラル情報を取得できます。


SATURNのペリフェラルポート2のデータを取得するには?

Q)
コントローラ1をコントローラ2に変更して動作しようと試みたのですが 動きませんでした。
どうすればコントローラ2でも動作するのでしょうか?

A)
SGLのSmpc_Peripheral構造体でのペリフェラルデータのアサインは、

0 :SATURNのポート1番又は、ポート1番に接続されているマルチタップの1番
|
5 :ポート1番のマルチタップの6番
|   (予約)
14:ポート1番のマルチタップの15番

15:SATURNのポート2番又は、ポート2番に接続されているマルチタップの1番
|
19:ポート2番のマルチタップの6番
|   (予約)
29:ポート2番のマルチタップの15番

になります。

接続ペリフェラルの種類を判別したいのですが?

Q)
接続ペリフェラルの種類を判別したいのですが?

A)
SGLのもっている変数Smpc_peripheralの構造体メンバー"id"を参照して 判別します。( 参照例 :Smpc_peripheral[0].id )
ここにどのような値が入っているかを調べることで、接続デバイスの 種類を特定できます。

ペリフェラルデータ自体は、デバイスの種類によらず同じ変数で参照します。 デジタルデバイス以外については、種類に応じてキャストして使用してください。

PerAnalog:
レーシングコントローラー、ミッションスティック 用
PerPoint:
マウス用
PerKeyBoard:
キーボード用

補足1
デバイスの判別には、sl_def.hにて次の値が定義済みですので参考にして ください。

PER_ID_StnPad           0x02  /* サターン標準パッド               */
PER_ID_StnLacing        0x13  /* サターンレーシングコントローラー */
PER_ID_StnAnalog        0x15  /* サターンアナログジョイスティック */
PER_ID_StnKeyBoard      0x34  /* サターンキーボード               */
PER_ID_MD3BtnPad        0xe1  /* メガドライブ3ボタンパッド       */
PER_ID_MD6BtnPad        0xe2  /* メガドライブ6ボタンパッド       */
PER_ID_ShuttleMouse     0xe3  /* シャトルマウス                   */
PER_ID_NotConnect       0xff  /* 未接続                           */

補足2
「マルチコントローラー」のペリフェラルIDは、0x16になります。
使用するには、次の構造体を用意してください。

typedef struct {            /* マルコン     */
  Uint8   id;         /* ペリフェラルID       */
  Uint8   ext;        /* 拡張データサイズ     */
  Uint16  data;       /* ボタン現在データ     */
  Uint16  push;       /* ボタン押下データ     */
  Uint16  pull;       /* ボタン引上データ     */
  Uint8   x;          /* X軸データ絶対値      */
  Uint8   y;          /* Y軸データ絶対値      */
  Uint8   r;          /* R軸データ絶対値      */
  Uint8   l;          /* L軸データ絶対値      */
  Uint32  dummy2[3];  /* ダミー2              */
} PerMultiControler;


セーブする際の時刻情報はどのように設定するのですか?

Q)
セーブする際の時刻情報はどのように設定するのですか?

A)
時刻情報は、SGLの持つ変数の Smpc_Status->rtc を参照することで 取得します。rtc は、SmpcDateTime構造体としてアクセスします。
通常この値は、slInitSystemが最後に実行された時の値が保持されています。
最新の時刻情報を取得したい場合は、slGetStatus()関数を実行してから 2フレームの後に再度参照してください。
取得した時刻データをセーブデータに反映させるには、BUP_SetDate()関数を 使用してください。


バックアップの日付が異なった値として返ってくる。

Q)
BUP_SetDate()で時間データを圧縮し,BUP_GetDate()で時間データを展開し てみると、データによって時間データが変化してしまいます。
原因を 教えてください。

A)
SGLのマニュアルにあるバックアップのサンプルプログラムには、 バグがあります。現在提供しているSGLに附属のサンプルはバグ修正された ものです。
具体的にバグの内容を説明すると、 dayメンバの指定をHexで設定しています。(本当は、BCDでなくてはいけません。)
そのため、実際より12日多く登録している可能性があります。


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