English
PROGRAMMER'S GUIDESMPCインタフェースユーザーズマニュアル
戻る進む
SMPCインタフェースユーザーズマニュアル

詳  細


■機 能

 ●システムマネージメント系
 システムマネージメント系には以下の機能があります。

機    能
イントバック
非イントバック
マスタSH2 ON
×
スレーブSH2 ON
×
スレーブSH2 OFF
×
サウンドON
×
サウンドOFF
×
CD ON
×
CD OFF
×
システム全体リセット
×
NMIリクエスト
×
ホットリセットイネーブル
×
ホットリセットディセーブル
×
カートリッジコード取得
×
エリアコード取得
×
システムステータス取得
×
SMPCメモリ設定
×
SMPCメモリ取得
×
時刻設定
×
時刻取得
×
直接SMPCに対してクロックチェンジコマンドを発行するのは禁止です。
使用する場合は、システムライブラリのSYS_CHGSYSCK()関数を使用してください。

 ●ペリフェラルコントロール系
 ライブラリでは以下のペリフェラルをサポートしています。

ゲーム機
ペリフェラル名称
サターンペリフェラル
デジタルデバイス
アナログデバイス
ポインティングデバイス(マウス)
キーボード
マルチタップ(6P)
メガドライブペリフェラル
3ボタンPAD
6ボタンPAD
4Pアダプタ
マウス

 ●ライブラリ未対応ペリフェラル
以下のペリフェラルは、本ライブラリではサポートしません。
詳細はそれぞれに関するドキュメントを参照してください。

  1. バーチャガン→参照:Developer's Information STN-41
  2. 音声認識→専用ライブラリを追加(リリース時期は未定)

■処理

 ●非イントバックコマンド発行
 非イントバック系の処理です。

 ●イントバックコマンド発行

 ●推奨例
 次の3パターンについて推奨例を示します。

 ●図の説明
メイン処理
 イントバック初期化(1):システムデータ取得を指定
 イントバック初期化(2):ペリフェラルデータ取得を指定
 イントバック初期化(3):ペリフェラルデータ取得+時刻データ取得を指定

SMPC処理
 (1):システムデータ収集処理
 (2):ペリフェラルデータ収集処理
 (3):時刻データ収集処理

 (1)パターン1

※ゲームフレームが1フレームの場合

※ゲームフレームが2フレームの場合
 ペリフェラルデータ取得*はペリフェラルデータの取得は行いません。

 (2)パターン2

 (3)パターン3

 ●制限事項
 <<全コマンド共通>>

 <<非イントバックコマンド発行関数>>

 <<イントバックコマンド発行関数>>

 システムデータ取得(時刻を除く)

 ペリフェラルデータ取得、時刻データ取得

■ペリフェラルコントロール

 ペリフェラルコントロールは、ゲーム作成基準に沿うように作成する必要があります。
本ライブラリは、接続されたペリフェラルのデータ加工処理は行いません。
未対応ペリフェラル(バーチャガン)のチェックや、通常ペリフェラルの接続・未接続チェックといった作業は、全てアプリケーション側で行います。

 ●方針
 ペリフェラル取得処理はユーザへの柔軟な対応のため以下の方針で作成しています。

 ●方式
(1)取得するペリフェラル数 (2)取得するデータサイズ

 (例)

 <入力指定値>

 <接続状態>

 <出力1:ペリフェラルデータ出力>
ライブラリは、ペリフェラルID→ペリフェラルタイプ+データサイズ に分割して出力します。

No. 
ペリフェラルタイプ
データサイズ
ペリフェラルデータ(有効バイト数)
0
ポインティング
3
取得データ(3)
1
デジタル
2
取得データ(2)
2
未接続
未接続
不定値
3
アナログ
5
取得データ(3)
4
未接続
未接続
不定値
5
未接続
未接続
不定値
6
キーボード
3
取得データ(3)
7
不定値
不定値
不定値
8
不定値
不定値
不定値

<出力2:マルチタップ情報データ出力>
 
マルチタップID
マルチタップコネクタ数
本体端子1
直接接続
1
本体端子2
マルチタップ接続
6

■コーリングシーケンス

推奨例のパターン(3)のコーリングシーケンス

#difine GET_NUM   (9)    /* 取得したいペリフェラルデータの数 */
#difine GET_SIZE  (4)    /* 対応するペリフェラルの、データサイズの最大値 */
#define WORKSIZE  (GET_NUM * (GET_SIZE + 2) * 2) + GET_SIZE)  /* ワークサイズ */
Uint32 work[WORKSIZE / 4];    /* ペリフェラルデータ取得ワーク領域 */
                              /* 注意:必ずグローバル変数で定義する事 */
typedef struct {
                Uint8 type;
                Uint8 size;
                Uint16 data;
                Uint8  extend_data[(GET_SIZE - 2)];
}PeriData;
PerGetSys *sys_data;  /* システムデータ  */

PeriData *get_per;  /* ペリフェラル出力データポインタ */
PerMulInfo *mul_info;
Uint8 *get_tim;       /* 時刻出力データポインタ */

 ●イントバック初期化(1)(V-BLANK OUT処理直後)

PER_LInit(PER_KD_SYS, 0, 0, 0, NULL, 0);  /* システムデータ取得を指定  */
 ...

 ●イントバック初期化(3)(V-BLANK OUT処理直後)

sys_data = PER_GET_SYS();                /* システムデータ取得     */
PER_LInit(PER_KD_PERTIM, GET_NUM, GET_SIZE, work, 0);
/* ペリフェラルデータ + 時刻データ取得を指定. V-BLANKスキップ数は0 */
set_imask(0xF);  /* 割込み全禁止 */
INT_SetScuFunc(INT_MSK_VBLK_OUT, vblank_out );  /* V-BLANK_OUT割込み関数を登録 */
INT_ChgMsk(INT_MSK_VBLK_OUT, INT_MSK_NULL);     /* V-BLANK_OUT割込みイネーブル */
set_imask(0);    /* 割込み全有効 */
 ...

 ●通常時、MAIN-LOOP内処理(V-BLANK OUT処理直後)

     ...
get_tim = PER_GET_TIM();              /* 時刻取得 */
if((mul_info[0].con + mul_info[1]) >= 3 ){   /* 有効端子数のチェック */
    if( (get_per[2].id != PER_ID_NCON_UNKNOWN) &&     /* 未接続チェック */
        (get_per[2].id != PER_ID_PNT)             ){  /* 非マウス チェック */
        if(((get_per[2].data) & PER_DGT_U) == PER_DGT_U){
              /* コネクタ3の現在ペリフェラルデータがUPか? */
     ...

 ●通常2回目以降の、V-BLANK OUT割込み処理

void vblank_out(void){
    SCL_VblankEnd();   /* フレームバッファ切換を最優先に行う事 */
    PER_LGetPer((PerGetPer **)&get_per, &mul_info);  /* ペリフェラルデータ取得 */
}


戻る進む
PROGRAMMER'S GUIDESMPCインタフェースユーザーズマニュアル
Copyright SEGA ENTERPRISES, LTD., 1997