English
PROGRAMMER'S GUIDECD通信I/F(CDパート)
戻る進む
CD通信インタフェースユーザーズマニュアル

CDブロックとの通信


3.1 通信用レジスタ

 CDブロックとの通信用レジスタの一覧と、対応するアクセス関数を表3.1に示します。

表3.1 通信用レジスタ一覧
レジスタ名
R/W
説 明
アクセス関数
DATATRNS
R/W
データ転送レジスタ
CDC_GetDataPtr
HIRQREQ
R/W
割り込み要因レジスタ
CDC_GetHirqReq
CDC_ClrHirqReq
HIRQMSK
R/W
割り込みマスクレジスタ
CDC_GetHirqMsk
CDC_SetHirqMsk
MPEGRGB
R
MPEGレジスタ(RGBデータ)
CDC_GetMpegPtr
アクセス幅はすべて16ビット(1ワード)

 通信用レジスタの詳細を以下に示します。

 図中、予約ビットは「−」で表します。予約ビットには必ず0を指定します。
 ビット構成は、最上位ビット(MSB)が15、最下位ビット(LSB)が0です。

 (1)データ転送レジスタ(DATATRNS)
 データ転送時に、ホストとCDブロックの間でデータを入出力するレジスタです。
 レジスタの内部はFIFOになっており、ホストがデータを取り出すとCDブロックが自動的にデータをセットします。(データを書き込む場合も同様)

表3.2 データ転送レジスタのビット構成
レジスタ名
R/W
15
14
13
12
11
10
9
8
DATATRNS
R/W
    
    
    
    
    
    
    
    
7
6
5
4
3
2
1
0
    
    
    
    
    
    
    
    

  1. ビットの初期値は不定です。

 (2)割り込み要因レジスタ(HIRQREQ)
 CDブロックからホストへの割り込み要因レジスタです。
 CDブロックからは各ビットのセットだけが可能で、ホストからは各ビットのクリアだけが可能です。ホストは目的のビットをクリアしておき、1になるのを待ちます。

表3.3 割り込み要因レジスタのビット構成
レジスタ名
R/W
15
14
13
12
11
10
9
8
HIRQREQ
R/W
MPST
MPCM
MPED
SCDQ
EFLS
ECPY
7
6
5
4
3
2
1
0
EHST
ESEL
DCHG
PEND
BFUL
CSCT
DRDY
CMOK

ビット
名 称
説 明
初期値
bit0
CMOK
1:コマンド発行可能(レスポンスセット完了)
1
bit1
DRDY
1:データ転送準備完了
0
bit2
CSCT
1:1セクタ読み込み完了

(CD-ROMからリードした1セクタを区画に格納または消去した)

0
bit3
BFUL
1:CDバッファフル(CDバッファが満杯になった)
0
bit4
PEND
1:CD再生の終了(現在のFADが再生範囲外になった)
0
bit5
DCHG
1:ディスク交換の発生(トレイが開いた)
0※
bit6
ESEL
1:ソフトリセット、セレクタ設定処理の終了
1
bit7
EHST
1:ホスト入出力処理の終了
1
bit8
ECPY
1:バッファ区画間の複写/移動処理の終了
1
bit9
EFLS
1:CDブロックファイルシステム処理の終了
1
bit10
SCDQ
1:サブコードQの更新完了(CDドライブの通信タイミング)
0
bit11
MPED
1:MPEG関連処理の終了
1
bit12
MPCM
1:MPEG動作不定区間の終了
0
bit13
MPST
1:MPEG割り込みステータスの通知(MPEG関連の割り込み発生)
0
bit14
予約ビット
0
bit15
予約ビット
0

ハードリセット時にはDCHG=1ですが、BOOT ROM内で0クリアされます。
ソフトリセット時にはDCHGは初期化されません。(CDC関数は0BE1Hを書き込む)
原則として、DCHGはディスクチェック時にBOOT ROMが0クリアするものとします。

  1. ビットの書き込みは0(クリア)だけが可能です。

  2. ホストへのIRQ出力は全要因のOR出力です。
    割り込み処理時は、該当要因ビットをクリアしてください。

  3. ESEL, EHST, ECPY, EFLS, MPEDの各ビットをコマンド終了フラグと総称します。
    各フラグに属するコマンドの実行終了を通知します。

  4. ビットの初期値は、CMOKとコマンド終了フラグが1で、その他が0です。
    (初期値のビットパターン:0BC1H)
    実際には、1以外のビットは不定なので、CDC関数が0クリアしています。

 (3)割り込みマスクレジスタ(HIRQMSK)
 CDブロックからホストへの割り込みをマスクするためのレジスタです。

表3.4 割り込みレジスタのビット構成
レジスタ名
R/W
15
14
13
12
11
10
9
8
HIRQMSK
R/W
MPST
MPCM
MPED
SCDQ
EFLS
ECPY
7
6
5
4
3
2
1
0
EHST
ESEL
DCHG
PEND
BFUL
CSCT
DRDY
CMOK

  1. ビットの意味は割り込み要因レジスタと同じです。
    (1:割り込み許可、0:マスク)

  2. 割り込みをマスクした場合、割り込み信号が入力されると次のようになります。
    ・IRQ出力に反映されない。
    ・割り込み要因レジスタには反映される。(ポーリング処理可能)

  3. ビットの初期値はすべて0です。(ソフトリセットでは初期化されません)

 (4)MPEGレジスタ(MPEGRGB)
 MPEGフレームバッファのイメージデータをRGB形式でホストへ転送するためのレジスタです。

表3.5 MPEGレジスタのビット構成
レジスタ名
R/W
15
14
13
12
11
10
9
8
MPEGRGB
R
    
    
    
    
    
    
    
    
7
6
5
4
3
2
1
0
    
    
    
    
    
    
    
    

 bit0〜bit15 :RGBデータ(詳細はMPEGパートを参照してください)

3.2 通信方法

 (1)通信時間
 コマンド/レスポンスの応答時間の間、全ての割り込みは禁止されます。コマンドが連続的に発行された場合、応答時間は遅れる可能性があります。

 (2)通信エラー
 コマンド発行後、CDブロックが規定時間内に応答しない(レスポンスを返さない)場合、通信タイムアウトエラーとなります。レスポンスの有無は、ソフトウェアループによる一定回数のポーリングで判定しています。

 (3)コマンド発行規定
 コマンドの発行は、以下の規定に従う必要があります。

  1. 任意の 6.7ms中に発行できるコマンドの回数は、最大30回までとします。

  2. 任意の16.7ms中に発行できるコマンドの回数は、最大60回までとします。

  3. サブコードの取得の場合は、任意の13.3ms中に最大34回までコマンドを発行できます。
    (サブコードR〜Wを16個+サブコードQを1個取得:計17×2=34回)

  4. 同じコマンド終了フラグに属するコマンドは、処理終了を待って発行します。

《プログラムの指針》
 コマンド連続発行によるポーリング処理は禁止します。
 状態の変化をポーリングするには定期レスポンスや割り込み要因レジスタを使用します。また、SCDQ, CSCTフラグやVSYNCなどによるタイミングを利用してコマンドを発行します。

 (4)コマンド終了フラグ
 コマンド/レスポンスだけでは処理が終了しない(処理に時間のかかる)コマンドに対して、処理終了を通知します。コマンド処理中に、同一の終了フラグに属するコマンドは実行できません。(MPEDフラグについてはMPEGパートを参照)

表3.6 コマンド終了フラグに属するコマンド(CDパート)
フラグ
コマンド
ESEL
・CDデバイスの接続先の設定(CDC_CdSetCon)
・絞りフレームアドレス範囲の設定(CDC_SetFiltRange)
・絞りサブヘッダ条件の設定(CDC_SetFiltSubh)
・絞りモードの設定(CDC_SetFiltMode)
・絞りの接続先の設定(CDC_SetFiltCon)
・セレクタのリセット(CDC_ResetSelector)
・実データサイズの計算(CDC_CalActSiz)
・フレームアドレス検索の実行(CDC_ExeFadSearch)
・セクタ長の設定(CDC_SetSctLen)
EHST
・セクタデータの取り出し(CDC_GetSctData)
・セクタデータの消去(CDC_DelSctData)
・セクタデータの取り出し消去(CDC_GetdelSctData)
・セクタデータの書き込み(CDC_PutSctData)
ECPY
・セクタデータの複写(CDC_CopySctData)
・セクタデータの移動(CDC_MoveSctData)
EFLS
・ディレクトリの移動(CDC_ChgDir)
・ファイル情報の保持(CDC_ReadDir)
・ファイルの読み込み(CDC_ReadFile)

  1. ESELフラグは、ソフトリセット(CDC_CdInit)の処理終了も通知します。

  2. EFLSフラグは、次のコマンドを実行した場合も1になります。
    ・トレイのオープン(CDC_CdOpen)
    ・ファイルアクセスの中止(CDC_AbortFile)

 (5)コマンド発行の排他処理(CD通信インタフェース関数内)
 CDC関数はコマンド終了後フラグをチェックして、以下の排他処理をします。

  1. コマンド終了フラグが0ならば、コマンドを発行せずにエラーを返す。

  2. 1ならば、コマンド終了フラグを0クリアしてコマンドを発行する。

 例外的に、コマンド終了フラグを0クリアだけ、またはチェックだけする場合があります。

表3.7 例外的なコマンド終了フラグの処理
フラグ
コマンド
0クリアだけする(チェックはしない)
ESEL
・ソフトリセット(CDC_CdInitのパラメータで指定)
EFLS
・ファイルアクセスの中止(CDC_AbortFile)
チェックだけする(0クリアはしない)
ESEL
・実データサイズの取得     (CDC_GetActSiz)
・フレームアドレス検索結果の取得(CDC_GetFadSearch)

 (6)REJECT, WAIT時のコマンド終了フラグ
 コマンドに対するレスポンスでREJECT, WAITが返った場合、コマンド終了フラグは1になりません。そのため、REJECT, WAIT後にもコマンド発行できるよう、CDC内部でコマンド終了フラグの値を保持しています。CDC関数は、この値をチェックしてコマンド発行の排他処理をします。

 (7)CDCライブラリの注意事項
CDCが保持しているコマンド終了フラグの値は、別々にリンクされたCDCのプログラムコードを実行すると不整合が生じてしまいます。そのため、コマンド終了フラグが初期化されていないと、コマンド発行できなくなる可能性があります。
CDCライブラリの使用にあたっては、次の点に注意してください。
  1. 原則として、1つのプログラムコードだけをメモリに常駐させて使用する。
  2. 別のプログラムコードを実行する場合には、必ず最初にソフトリセットを実行して、コマンド終了フラグを初期化する。

3.3 レスポンス

 (1)レスポンスの内容
 レスポンスは1バイトのステータスと7バイトのレポートで構成されています。ステータスは共通ですが、レポートはコマンドに依存します。最も基本的なレポートはCDレポートです。

 (2)ステータス
 ステータスには、次の情報が返ります。

・REJECT(不正)
:コマンド形式が間違っているなど、コマンド自体が無効である。
・WAIT(実行保留)
:現在の状態では実行できないので、コマンドを受け付けられない。
・データ転送要求
:データ転送が必要であることを示す。
・定期レスポンス
:定期レスポンスか、コマンドに対するレスポンスかを示す。
・CDドライブ状態
:ホストから見たCDドライブの論理的な状態を示します。

  1. REJECT時のレスポンスは無効です。

  2. WAIT時のドライブ状態とCDレポートは有効ですが、他のレポートは無効です。

 (3)定期レスポンス
 定期レスポンスは、CDブロックがCDドライブとの通信タイミングで返すレスポンスで、ホストはコマンドを発行せずに情報(ステータスとCDレポート)を得られます。
 CDドライブとの通信周期で定期的に更新されます。(SCDQフラグの更新タイミングも同じ)

               ・標準速再生時:13.3ms
  定期レスポンスの更新周期 ・2倍速再生時: 6.7ms
               ・再生時以外 :16.7ms

 定期レスポンスは、コマンド/レスポンス中には更新されません。コマンドによるレスポンスを読み取った後、次のCDドライブ通信タイミングで更新され取得可能になります。

注意
ここに示した定期レスポンス(SCDQフラグ)の更新周期は通常の場合の値です。CDドライブとの通信状況によっては、更新周期が延びる可能性があります。
(ディスクの傷等によって、CDドライブとの通信が失敗した時など)

3.4 データ転送

 (1)データ転送の手順
 データ転送を伴うコマンドの場合、コマンド/レスポンス後、ホストはデータ転送処理をする必要があります。その手順を以下に示します。

  1. データ転送を伴うコマンド(データを取り出す/書き込む)を実行する。

  2. データ転送の準備待ち(CDC_DataReady)を実行する。(DRDYが1になるのを待つ)

  3. データ転送レジスタを通してデータを入出力する。
    レジスタのポインタを取得するには、CDC_GetDataPtr関数を実行する。

  4. 必要なデータを転送したら、データ転送の終了(CDC_DataEnd)を実行する。

 (2)データ転送の終了
 ステータスでデータ転送要求ありの場合、実際にデータを転送しなくても、エラーでも、必ずデータ転送の終了を実行する必要があります。REJECT, WAIT時には不要です。
 データ転送の準備待ちでエラーが発生した場合、アプリケーションはデータ転送の終了を実行する必要はありません。準備待ち関数内部で自動的に実行します。

 (3)データ転送エラー
 データ転送の準備待ちで発生するエラーを表3.8に示します。

表3.8 データ転送エラー
データ転送エラー
説 明
データ転送タイムアウト
CDブロックが規定時間内にデータ転送準備完了とならない。
(DRDYフラグが1にならない)
書き込み用セクタの確保不可
セクタデータの書き込みで、空きセクタを確保できなかった。
(DRDYフラグが0のままで、EHSTフラグが1になる)

 (4)禁止事項
データ転送を伴うコマンドを実行した場合、DRDYフラグが1になる前にデータ転送の終了を実行してはいけません。たとえ実際にはデータを転送しなくても、必ずDRDYフラグが1になるのを待ってから終了させてください。
(データ転送の準備待ちを実行してから終了させる)


戻る進む
PROGRAMMER'S GUIDECD通信I/F(CDパート)
Copyright SEGA ENTERPRISES, LTD., 1997