English
PROGRAMMER'S GUIDESMPCインタフェースユーザーズマニュアル
戻る|   ■
SMPCインタフェースユーザーズマニュアル/リファレンス

関数仕様


非イントバック




Title

関数仕様

Function

マスタSH2 ON

Function Name

PER_SMPC_MSH_ON

No

1

 書 式
void PER_SMPC_MSH_ON(void)
 入 力
なし
 出 力
なし
 関数値
なし
本関数は、ユーザによる使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/MSHON



Title

関数仕様

Function

スレーブSH2 ON

Function Name

PER_SMPC_SSH_ON

No

2

 書 式
void PER_SMPC_SSH_ON(void)
 入 力
なし
 出 力
なし
 関数値
なし
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/SSHON



Title

関数仕様

Function

スレーブSH2 OFF

Function Name

PER_SMPC_SSH_OFF

No

3

 書 式
void PER_SMPC_SSH_OFF(void)
 入 力
なし
 出 力
なし
 関数値
なし
 厳守事項
スレーブSH2 が CPUの外部バス(A-BUS,B-BUS,CPU-BUS)にアクセス中には、本関数を実行してはいけません。
外部バスアクセス中に実行した場合、システム全体がハングアップする可能性があります。
SH2 が外部バスにアクセスする条件は次の様になります。

 したがって、スレーブSH2 が外部バスに非アクセスである条件は、スレーブSH2 がCPU内部のキャッシュ上でのみ動作している事です。
以上の条件をユーザプログラムにて管理する事が不可能な場合は、代わりの方法としてクロックチェンジを用いてください。

厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/SSHOFF



Title

関数仕様

Function

サウンドON

Function Name

PER_SMPC_SND_ON

No

4

 書 式
void PER_SMPC_SND_ON(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機能
サウンドCPU(MC68EC000)を起動します。
本コマンドは、サウンドドライバをサウンドRAMにロードする際にサウンドOFFコマンドと共に使用します。
(システムライブラリのクロックチェンジを実行した場合、サウンドRAMの内容が保証されませんので、サウンドドライバの再ロード後に本コマンドによるサウンドCPUの再起動が必要になります。)

 サウンドCPUの停止および起動に関する制限事項
サウンドCPUを停止させた状態でかつ、メインシステム(SH2側)からサウンドRAM へ 0.5秒間以上の非アクセス期間があってはいけません。
サウンドドライバのロード等の必要最低限の期間のみ停止させ、即座に再起動させてください。
サウンドCPU(MC68EC000)を使用する必要が無い場合でも、ダミープログラム(単なる無限ループ)を実行させる等の対処が必要です。
本制限事項が守られない場合は、サウンドRAMおよびサウンドブロックの動作保証が出来ません。

 参 照: < DD>『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/SNDON



Title

関数仕様

Function

サウンドOFF

Function Name

PER_SMPC_SND_OFF

No

5

 書 式
void PER_SMPC_SND_OFF(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機能
サウンドCPU(MC68EC000)を停止します。
本コマンドは、サウンドドライバをサウンドRAMにロードする際にサウンドONコマンドと共に使用します。
(システムライブラリのクロックチェンジを実行した場合、サウンドRAMの内容が保証されませんので、クロックチェンジの実行前に本コマンドによってサウンドCPUを停止させる必要になります。)

 厳守事項:
 [サウンドCPUの停止および起動に関する制限事項]
サウンドCPUを停止させた状態でかつ、メインシステム(SH2側)からサウンドRAM へ 0.5秒間以上の非アクセス期間があってはいけません。
サウンドドライバのロード等の必要最低限の期間のみ停止させ、即座に再起動させてください。
サウンドCPU(MC68EC000)を使用する必要が無い場合でも、ダミープログラム(単なる無限ループ)を実行させる等の対処が必要です。
本制限事項が守られない場合は、サウンドRAMおよびサウンドブロックの動作保証が出来ません。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/SNDOFF



Title

関数仕様

Function

CD ON

Function Name

PER_SMPC_CD_ON

No

6

 書 式
void PER_SMPC_CD_ON(void)
 入 力
なし
 出 力
なし
 関数値
なし
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/CDON



Title

関数仕様

Function

CD OFF

Function Name

PER_SMPC_CD_OFF

No

7

 書 式
void PER_SMPC_CD_OFF(void)
 入 力
なし
 出 力
なし
 関数値
なし
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/CDOFF



Title

関数仕様

Function

システム全体リセット

Function Name

PER_SMPC_SYS_RES

No

8

 書 式
void PER_SMPC_SYS_RES(void)
 入 力
なし
 出 力
なし
 関数値
なし
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/SYSRES



Title

関数仕様

Function

NMIリクエスト

Function Name

PER_SMPC_NMI_REQ

No

9

 書 式
void PER_SMPC_NMI_REQ(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機能
マスターSH2 に対して、NMI割込みを発生させます。
本コマンドを実行すると、リセットボタンが無効に設定されていても無条件にNMI割込みを発生させる事が可能です。
NMI割込みが発生すると、リセットボタン有効時に本体リセットボタンが押された時と同様のブートシーケンスが開始されます。通常リセットボタンは有効ですので、本コマンドを使用する必要はありません。
リセットボタンを常時無効に設定しているアプリケーション(モデム使用時)でのリセット処理(回線切断処理の終了後)に使用してください。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/NMIREQ



Title

関数仕様

Function

ホットリセットイネーブル

Function Name

PER_SMPC_RES_ENA

No

10

 書 式
void PER_SMPC_RES_ENA(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機能
ホットリセットボタンによる、SMPCからマスターSH2へのNMIの発行を有効に設定します。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/RESENAB



Title

関数仕様

Function

ホットリセットディセーブル

Function Name

PER_SMPC_RES_DIS

No

11

 書 式
void PER_SMPC_RES_DIS(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機能
本体リセットボタンによる、SMPCからマスターSH2へのNMIの発行を無効に設定します。
バックアップライブラリの使用時およびモデム使用時には必ず本コマンドを使用して、リセットボタンを無効に設定してください。
また、上記の目的以外にはリセットボタンを無効に設定しないでください。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』SMPCコマンド/RESDISA



Title

関数仕様

Function

SMPCメモリ設定

Function Name

PER_SMPC_SET_SM

No

12

 書 式
void PER_SMPC_SET_SM(Uint32 input_dt)
 入 力
input_dt:SMPCメモリ
各ビット値の意味はシステムデータ出力データ型を参照してください。
 出 力
なし
 関数値
なし
 機 能
SMPCメモリを設定します。SMPCメモリはアプリケーション、BOOT ROMが共通に使用する領域ですので、データフォーマットは必ず守ってください。
アプリケーション側で変更/参照する必要があるデータ、変更禁止のデータについては、こちらを参照してください。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』
■2.4 非リセット系システムマネージメントコマンド



Title

関数仕様

Function

時刻設定

Function Name

PER_SMPC_SET_TIM

No

13

 書 式
void PER_SMPC_SET_TIM(Uint8 *input_dt)
 入 力
input_dt:時刻

入力形式
 
bit7           bit4
bit3           bit0
input_dt[0]
秒十位
秒一位
input_dt[1]
分十位
分一位
input_dt[2]
時十位
時一位
input_dt[3]
日十位
日一位
input_dt[4]
曜日(0〜6)
月(1H〜CH)
input_dt[5]
西暦年号十位
西暦年号一位
input_dt[6]
西暦年号千位
西暦年号百位
 出 力
なし
 関数値
なし
 機 能
時刻を設定します。

 参 照:
『HARDWARE MANUAL/SMPCユーザーズマニュアル 』■2.5 RTCコマンド

イントバック




Title

関数仕様

Function

イントバック初期化

Function Name

PER_LInit

No

14

 書 式
Uint32 PER_LInit(PerKind kind, PerNum num, PerSize max_size, void *work, Uint8 v_blank)
 入 力

PerKind kind:
イントバック種別

PerNum num:
必要ペリフェラル数

PerSize max_size:
取得するペリフェラルサイズの最大値
偶数サイズで指定することを推奨します。
詳細:ワーク領域の計算方法

Uint32 work[worksize/4]:
ワーク領域.。
ペリフェラルデータ取得に使用します。必ずグローバル変数で宣言してください。

Uint8 v_blank:
V-BLANKスキップ数。
ゲーム全体の処理単位から1引いた値を指定します。
(2フレーム単位の場合は1を指定)スキップする必要が無い場合は、0を指定してください。
 使用例
err_code = PER_LInit( kind, num, max_size, (void *)work, v_blank);
 出 力
なし
 関数値
実行状態
定  数
説  明
PER_INT_ERR
イントバックコマンド発行ができませんでした。
PER_INT_OK
イントバックコマンド発行ができました。
 機 能
イントバックコマンドの初期化と発行、およびSMPC割込みの登録を行います。必ず厳守事項を守ってください。
必要のないパラメータには、NULLか0を設定してください。
PER_LGetPer(), PER_GetTim(), PER_GetSys()実行の前に1回以上実行してください。
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

厳守事項
この関数は割り込み処理内では実行禁止です。
必ずメイン処理内で実行してください。
一般的にVブランクOUT処理直後に実行してください。

 ●ワーク領域の計算方法
worksize = (num * (max_size + 2) * 2) + max_size
確保する必要があるmax_sizeの値は、使用するペリフェラルによって異なります。
各ペリフェラル毎のデータサイズは、次の通りです。

ペリフェラル
データサイズ
デジタルデバイス
2
アナログデバイス
3〜9
    ハンドル
3
    ミッションSTICK(3軸)
5
    ミッションSTICK(6軸)
9
    マルチコントローラー(アナログ)
6
ポインティングデバイス
3
キーボードデバイス
4
メガドライブ3ボタンパッド
1
メガドライブ6ボタンパッド
2

設定したsizeよりも大きいデータサイズを持つペリフェラルが接続された場合は、max_size以降のデータは参照できません。
size以前のデータは問題無く参照可能です。

例)
size = 2 の時にアナログデバイスが接続された場合

アナログデバイス中の「デジタル情報」→ 2バイト目までなので、参照可
アナログデバイス中の「アナログ情報」→ 3バイト目以降なので、参照不可

 ●max_size の偶数指定について
max_size は、偶数サイズで指定することを推奨します。
理由は、ライブラリの出力するペリフェラルデータを、偶数境界にメモリ配置する為です。
ペリフェラルデータに対してワードアクセスする場合には、必ず偶数サイズで指定してください。
同様にロングワードアクセスする場合には、4の倍数で指定してください。

 ●V-BLANKスキップ数の設定単位について
2フレーム以上(PER_LInit関数で設定するV-BLANKスキップ数で1以上を設定する)の場合、本ライブラリでは最後のフレームのみペリフェラルの取得を行います。
この仕様では、途中のフレームのペリフェラルデータを取得しないため、エッジ(前回未押下現在押下ボタン)の検出ができない場合があります。
シビアなエッジのチェックが必要な場合は、V-BLANKスキップ数を0にして、毎インタラプトでPER_LGetPer関数を実行してください。

 ●PER_LInit()の実行失敗
PER_LInit()は、実行時に必ず成功するとは限らず、失敗する場合もあります。
必ずPER_LInit()の関数値を確認し、リトライ処理を行うようにしてください。
失敗した場合には、再度PER_LInit()を実行する必要があります。
ただし、同一フレーム内での再実行は禁止ですので、次フレーム以降で
再実行してください。




Title

関数仕様

Function

ペリフェラルデータ取得

Function Name

PER_LGetPer

No

15

 書 式
Uint32 PER_LGetPer(PerGetPer **output_dt, PerMulInfo **mul_info)
 入 力
なし
 出 力
output_dt:ペリフェラルデータ取得アドレス(NULL=取得できなかった)
mul_info :マルチタップ情報取得アドレス(NULL=取得できなかった)
      mul_info[0]:本体端子1のマルチタップ情報
      mul_info[1]:本体端子2のマルチタップ情報
 関数値
実行結果
定  数
説  明
PER_INT_ERR
イントバックコマンド発行ができませんでした。
PER_INT_OK
イントバックコマンド発行ができました。
 機 能
イントバックコマンド発行とペリフェラルデータの取得を行います。
この関数の実行前に、PER_LInit()にペリフェラルデータ取得(PER_KD_PER or PER_KD_PERTIM)を指示し実行してください。
ペリフェラルデータ取得を指示しなかった場合、ペリフェラルデータアドレスへNULLを出力します。

 使用方法
PerGetPer *output_dt
PerMulInfo *mul_info
err_code = PER_LGetPer( &output_dt, &mul_info);
厳守事項
本関数は、スレーブSH2 からの使用は禁止です。

厳守事項
実行タイミングは、次の期間中に限定されます。
「Vブランク開始の300μ秒後 〜 Vブランク終了時まで」

 注意事項1:ライブラリ関数の実行タイミング
本関数を V-BLANK-OUT割込みに登録する場合は、次の点に注意してください。

SCL_VblankEnd関数の実行タイミングが遅いとスプライトのフレームチェンジが次のタイミングになってしまい、画面の動きが遅くなってしまいます。

 注意事項2:出力されるペリフェラルデータの保証範囲

よってペリフェラルデータを参照するときは必ずマルチタップコネクタ数から参照範囲を決めてください。

 [接続/未接続チェック手順]
1)マルチタップ情報から、本体端子1の接続状況を確認する。
     mul_info[0].id == 0xF0 かつ、mul_info[0].con == 0x00 の場合
       → 本体端子1は、未接続。
          ペリフェラルデータの最初の1つは、不定値となる。
          本体端子2のデータは次のデータから始まる。
     mul_info[0].id != 0xF0 かつ、mul_info[0].con == 0x00 の場合
       → 本体端子1は、SMPC未対応ペリフェラルが接続。
          ペリフェラルデータの最初の1つは、不定値となる。
          本体端子2のデータは次のデータから始まる。
     mul_info[0].id == 0xF0 かつ、mul_info[0].con == 0x01 の場合
       → 本体端子1は、SMPC対応ペリフェラルの直接接続。
          ペリフェラルデータの最初の1つは、有効となる。
          本体端子2のデータは次のデータから始まる。
     mul_info[0].id != 0xF0 かつ、mul_info[0].con > 0x01 の場合
       → 本体端子1は、マルチタップ接続(コネクタ数が mul_info[0].con)
          ペリフェラルデータの先頭からコネクタ数分だけ有効
          タップの各端子の接続状態は、それぞれの端子の
          ペリフェラルタイプ,ペリフェラルサイズから確認
          本体端子2のデータは本体端子1の分の次のデータから始まる。

2)上記と同様の方法で、マルチタップ情報から本体端子2の接続状況を確認する。

3)マルチタップ接続時には、各端子の接続を次の方法で確認する。
     ペリフェラルタイプ == PER_ID_NCON_UNKNOWN かつ、
     ペリフェラルサイズ == PER_SIZE_NCON_15
       → 未接続である。
     ペリフェラルタイプ == PER_ID_NCON_UNKNOWN かつ、
     ペリフェラルサイズ != PER_SIZE_NCON_15
       → SMPC未対応ペリフェラルが接続。
     上記以外
       → SMPC対応ペリフェラルが接続

 ペリフェラルデータ出力仕様
1.ペリフェラル1個当たりのデータの構造
  +-ペリフェラルタイプ
  |    +-ペリフェラルサイズ
  |    |    +-DATA1
  |    |    |    +-DATA2       DATAn-+
  |    |    |    |                   |
+----+----+----+----+              +----+
| TP | SZ | D1 | D2 |..............| Dn |
+----+----+----+----+              +----+
 <-->
  1 Byte
 <-------------------------------------->
      (n + 2)Byte     n はPER_LInit()にて指定したmax_sizeに等しい

・DATA1・・・DATAn( n Byte )
    ペリフェラルデータ
       各デバイスのデータフォーマットについては、
       デバイス情報データ型を参照してください.

2.ペリフェラルデータ全体のデータの構造
上記のデータが、本体端子のコネクタ数分出力されます。
本体端子のコネクタ数は、マルチタップ情報から参照してください。

出力データの具体例
・接続状態
本体端子1=未接続
本体端子2=デジタルデバイス
・出力結果
配列 0 = 不定
配列 1 = デジタルデバイス
マルチタップ情報
本体端子1マルチタップID = PER_MID_NCON_ONE(未接続の意味)
本体端子1コネクタ数 = PER_MCON_NCON_UNKNOWN(未接続の意味)
本体端子2マルチタップID = PER_MID_NCON_ONE(直接接続の意味)
本体端子2コネクタ数 = 01

 トラブルシューティング
1.ペリフェラルデータが取得できない。
V-BLANK OUTから次のV-BLANK INまでの間に..

割り込み優先度はハード固有値とシステムライブラリの設定値の2つがあります。
詳しくはシステムライブラリとSCUハードウェアマニュアルおよび、システムライブラリの項をご参照ください。

2.マルチタップに接続したペリフェラルが突然操作不可能になる。
本ライブラリにてペリフェラル情報を取得する際、マルチタップ経由ペリフェラルでの操作が突然不可能になる現象が確認されています。 この時、ライブラリからはペリフェラル未接続の情報が返り、ペリフェラルかマルチタップを一度抜いて挿し直すまで、正常な状態に戻りません。 この現象は、Vブランク中の処理が重い時に発生します。

(V-RAMへのデータ転送など)

Vブランク中の処理を軽減するように変更してください。

それでもこの現象が回避できなかった場合は、次のような対策を施してください。

もしも以上の変更を行っても現象が発生する場合は、「未接続」の ステータスが返ってきた際に PER_LInit関数を再度実行するように してください。

(数回繰り返しても「未接続」が返る場合に、本当に未接続であるとみなすようにしてください.)




Title

関数仕様

Function

時刻取得

Function Name

PER_GET_TIM

No

16

 書 式
Uint8 *PER_GET_TIM(void)
 入 力
なし
 出 力
なし
 関数値
時刻データアドレス
 機 能
時刻データの取得を行います。この関数実行の1フレーム以上前に、PER_LInit()にペリフェラルデータ取得+時刻取得(PER_KD_PERTIM)を指示して実行しておく必要があります。



Title

関数仕様

Function

システムデータ取得

Function Name

PER_GET_SYS

No

17

 書 式
PerGetSys *PER_GET_SYS(void)
 入 力
なし
 出 力
なし
 関数値
システムデータアドレス(NULL=取得できなかった)
 機 能
システムデータの取得を行います。この関数を実行する1フレーム以前に、PER_LInit()にシステムデータ取得(PER_KD_SYS)を指示して1回以上実行してください。(PER_LInitの実行に失敗した場合は、再度 PER_LInit()を実行してください。)
システムデータ内には、SMPCメモリが含まれます。SMPCメモリはアプリケーション、BOOT ROMが共通に使用する領域ですので、データフォーマットは必ず守ってください。
アプリケーション側で変更/参照する必要があるデータ、変更禁止のデータについては、こちらを参照してください。


その他




Title

関数仕様

Function

ホットリセット取得

Function Name

PER_GET_HOT_RES

No

18

 書 式
Uint8 PER_GET_HOT_RES(void)
 入 力
なし
 出 力
なし
 関数値
ホットリセット状態アドレス
定  数
説  明
PER_HOT_RES_ON
ホットリセットON
PER_HOT_RES_OFF
ホットリセットOFF
 機 能
ホットリセット状態を取得します。この関数はいつでも実行できます。
更新はPER_LGetPer()を実行しています。

戻る|   ■
PROGRAMMER'S GUIDEシステムプログラムユーザーズマニュアル
Copyright SEGA ENTERPRISES, LTD., 1997