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

CDドライブ


4.1 CDドライブの状態遷移

 (1)CDドライブ状態
 CDドライブの状態を表4.1に示します。

表4.1 CDドライブ状態
状 態
説 明
〈BUSY〉
状態遷移中
〈PAUSE〉
ポーズ中(一時停止)
〈STANDBY〉
スタンバイ(ドライブ停止状態)
〈PLAY〉
CD再生中
〈SEEK〉
シーク中
〈SCAN〉
スキャン再生中
〈OPEN〉
トレイが開いている
〈NODISC〉
ディスクがない
〈RETRY〉
リードリトライ処理中
〈ERROR〉
リードデータエラーが発生した
〈FATAL〉
致命的エラーが発生した(ストップコマンドが必要)

 (2)ドライブコマンドの種類
 CDドライブの状態を変化させるコマンド(ドライブコマンド)を表4.2に示します。

表4.2 ドライブコマンド
ドライブコマンド
対応する関数
CDブロックの初期化
CDC_CdInit
トレイのオープン
CDC_CdOpen
プレイ
CDC_CdPlay
シーク
CDC_CdSeek
ポーズ
CDC_CdSeek
ストップ
CDC_CdSeek
スキャン
CDC_CdScan

  1. ソフトリセット時、CDブロックの初期化はドライブコマンドとして動作しません。〈OPEN〉, 〈NODISC〉状態でソフトリセットを実行しても状態は遷移しません。
    ただし〈OPEN〉,〈NODISC〉状態以外では、現在位置でCDドライブをポーズさせます。

  2. トレイオープン以外のドライブコマンドは、トレイのクローズコマンドを兼ねます。

 (3)ドライブコマンドの発行
  1. ドライブコマンドのレスポンスは、REJECTでない限り、必ず〈BUSY〉が返ります。

  2. 原則として、後から発行されたコマンドが優先して実行されます。連続的に発行すると、先に発行したコマンドが上書きされてしまう場合があります。
    確実に実行するには、〈BUSY〉以外の状態に遷移するまで発行しないでください。

4.1.1 CDドライブの状態遷移図

 (1)正常系の状態遷移図
 正常系におけるCDドライブの状態遷移図を図4.1に示します。

図4.1 CDドライブの状態遷移図(正常系)

  1. TOCリード後は2秒0フレーム目(FAD=150=96H)で〈PAUSE〉状態になります。

  2. 状態遷移中(矢印線上)では〈BUSY〉状態となります。

  3. トレイのクローズコマンドとは、トレイオープン以外のドライブコマンドを指します。
    トレイが閉まった後、各コマンドに対応する状態に遷移します。
    例:〈OPEN〉状態におけるプレイコマンドは、トレイが閉まった後で〈PLAY〉状態になります。

 (2)エラー系の状態遷移図
 エラー系におけるCDドライブの状態遷移図を図4.2に、状態の説明を表4.3に示します。

図4.2 CDドライブの状態遷移図(エラー系)

表4.3 エラー関係の状態説明
状 態
説 明
内部状態
〈RETRY>
リトライが成功すれば〈PLAY〉に、失敗すれば〈ERROR〉になる。
〈SEEK〉
〈ERROR〉
次にドライブコマンドが発行されるまで状態は変わらない。
〈PAUSE〉
〈FATAL〉
ストップコマンドを発行して復帰を試みてください。
復帰できれば〈STANDBY〉に遷移します。
〈STANDBY〉

 内部状態とは、CDブロックの内部的な動作として同等な状態を指します。

4.1.2 CDドライブの状態遷移表

 CDドライブの状態遷移表を表4.4に示します。例えば、〈PLAY〉状態でポーズコマンドを発行すると、〈PAUSE〉状態になることを示しています。

表4.4 CDドライブの状態遷移表
    操作
 
状態    
自動
コマンド
初 期 化
ト レ イ
オープン
プ レ イ
シ ー ク
ポ ー ズ
ストップ
スキャン
〈BUSY〉
変化あり
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉  
〈PAUSE〉
〈STANDBY〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈STANDBY〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈PLAY〉
〈PAUSE〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈SEEK〉
〈PAUSE〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈SCAN〉
〈PAUSE〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈OPEN〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈NODISC〉
〈OPEN〉
〈OPEN〉
〈OPEN〉
〈OPEN〉
〈OPEN〉
〈OPEN〉
〈OPEN〉
〈RETRY〉
変化あり
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈ERROR〉
〈PAUSE〉
〈OPEN〉
〈PLAY〉
〈SEEK〉
〈PAUSE〉
〈STANDBY〉
〈SCAN〉
〈FATAL〉
不定
不定
不定
不定
不定
不定※
不定
「−」は変化なし。
〈FATAL〉状態でストップコマンドを発行すると、〈STANDBY〉状態に復帰できる可能性があります。

 (1)〈BUSY〉状態におけるコマンドの発行
 〈BUSY〉状態においてもコマンドは受け付けられますが、即座に実行されるとは限りません。例えば、トレイ開閉中の場合は、その動作が終了するまで実行されません。(ただし、トレイのオープンコマンドは即座に実行されます。)

 (2)トレイの開閉

  1. 原則として、どの状態でもトレイのオープンコマンドは即座に実行されます。

  2. 自動開閉式でない場合のトレイ開閉コマンドは、手動で実行されるまで〈BUSY〉となります。

  3. 〈OPEN〉状態でのコマンド(トレイオープンを除く)は、トレイのクローズ処理後、各状態に遷移します。

  4. トレイが閉まった時、TOCリードできないと〈NODISC〉になります。(ディスクが入っていても)

 (3)状態の経由
  1. コマンドによる場合、全て〈BUSY〉状態を経由します。

  2. 〈PLAY〉,〈SCAN〉状態に遷移するときは、〈SEEK〉状態を経由する場合があります。

 (4)マルチセッションの場合
  1. 最終セッションのTOCをリードします。

  2. TOCリード後、最終セッションの開始位置から2秒0フレーム目で〈PAUSE〉状態になります。

 (5)〈FATAL〉状態の復帰処理
 復帰処理をするには、ストップコマンド発行後、SCDQフラグが2回更新されるまで待ってください。それまでは次のドライブコマンドを発行してはいけません。
 また、トレイの開閉操作でも〈FATAL〉状態から復帰できる可能性があります。

4.2 CDドライブの動作

 (1)〈PLAY〉状態のフレームアドレス
 CD再生中に通知されるフレームアドレス(現在のFAD)は、リード処理中のセクタを指します。
 現在のFADのセクタはCDバッファに格納されておらず、取り出すことはできません。
 ホストは、現在のFADの1つ前のセクタまでアクセスできます。(CD-ROMの場合)

図4.3 現在のFADが指すセクタ

 再生を終了した場合、FAD=再生終了位置+1となります。
 (再生終了位置がディスクエンドの場合にも成り立ち、FADはリードアウトエリアを指します。)

 (2)〈PLAY〉状態からの遷移とセクタの格納
 〈PLAY〉状態から別の状態に遷移する場合、リード処理中のセクタが格納されるかどうかは不定です。〈BUSY〉以外の状態に遷移すれば、格納されるべきセクタが確定します。
 〈PLAY〉状態でポーズコマンドを発行して〈PAUSE〉状態に遷移した場合、(1)と同様に、格納セクタ+1のFADが通知されます。

 (3)CD再生のリピート処理
 次のように、CD再生時に現在位置が再生範囲外へ出るとリピート処理がされます。

 リピートの通知回数(0H〜EH)、最大指定回数(0H〜FH)とも4ビットで表されます。
 リピート処理の手順(リピートあり/なしの判断)を以下に示します。

  1. リピート回数<最大リピート回数ならばリピートする。
    開始位置にシークして、〈PLAY〉状態になる。
    その時、リピート回数<EH(14回)であればリピート回数を1つ増加させる。

  2. リピート回数≧最大リピート回数ならばリピートしない。
    現在位置で〈PAUSE〉状態になり、割り込み要因レジスタのPENDフラグが1になる。

 再生範囲か最大リピート回数が変更されたら、リピート回数は0クリアされます。
リピート回数、再生範囲とも、トレイの開閉や再生途中でのシーク動作などには依存しません。

 (4)再生範囲とフレームアドレス
 ピックアップ位置を変更しない指定でCD再生を実行した場合、現在位置が新しい再生範囲内にあれば〈PLAY〉状態になります。〈PLAY〉中に実行すると、再生状態は中断されません。

図4.4 再生範囲と現在位置の関係

 次のような操作では、FADが再生範囲外(FAD<開始位置、FAD>終了位置)になります。

 再生範囲外での動作は、リピートあり/なしに依存します。
 例えば、リピートなしで再生が終了すると、FAD=終了位置+1で〈PAUSE〉状態になり、PENDフラグが1になります。

表4.5 再生範囲外での動作
操作(コマンド)
リピートなし
リピートあり
状態
PEND
状態
PEND
CD再生が終了
FAD=終了位置+1で〈PAUSE〉
1
開始位置にシークして〈PLAY〉
(リピート動作)
0
CD再生→再生範囲の変更
   →ポーズ解除
現在位置で〈PAUSE〉
シーク
目標位置で〈PAUSE〉
1
目標位置で〈PAUSE〉
0
スキャン再生
不定位置で〈PAUSE〉
1
不定位置で〈PAUSE〉
0
PENDフラグの0は、変化なしを意味します。

 PENDフラグの0は、変化なしを意味します。

 (5)ホーム位置へのシーク(ストップ)
 ホーム位置へシークすることにより、CDブロックは次の状態になります。

  1. ディスクモータは回転を停止し、ピックアップは内周待機位置へ移動する。

  2. CDドライブ状態は〈STANDBY〉に遷移し、レポートは無効値(FFHの並び)になる。

  3. ホーム位置で〈PAUSE〉状態に遷移すると、ピックアップはディスク先頭に移動する。

  4. 保持している再生範囲、最大リピート回数、リピート通知回数は変更されません。

     (6)〈STANDBY〉状態におけるピックアップの位置
    • 〈PAUSE〉状態から遷移した場合:現在位置(レポートもそのまま)

    • ホーム位置にシークした場合:内周待機位置(レポートは無効値)

     (7)CDバッファフルにおけるCDリード動作
     CDバッファが満杯になると〈PAUSE〉状態になり、割り込み要因レジスタのBFULフラグが1になります。CDバッファに空きができると自動的に残りの再生を始めます。

    4.3 サブコード

     (1)サブコードの更新とSCDQフラグ
     サブコードQは1フレーム(1セクタ)ごとに更新されます。SCDQフラグは、サブコードQが更新されるごとに1となります。(定期レスポンスの更新タイミングと同じ)
     サブコードR〜Wは1フレームで4パック(1パケット)が更新され、パックバッファに格納されていきます。CDブロックには、リングバッファ構造を持った24パック(6パケット)分のパックバッファがあります。

    《CD-DA再生時(標準速)の場合》

    図4.5 サブコードの更新とSCDQフラグのタイミング

     (2)サブコードの取り出しタイミング
     ホストはSCDQフラグが1になるタイミングで取得コマンドを発行し、サブコードQとR〜Wのデータを取り出します。(コマンドの連続発行によるポーリングを防ぐため)

     (3)サブコードQの取得(CDC_TgetScdQch)
     取得コマンドは、CDドライブ状態によらず常に実行できます。ただし、〈OPEN〉時など、CDドライブ状態によっては無効な値を返す場合もあります。

     (4)サブコードR〜Wの取得(CDC_TgetScdRwch)
     パックデータは、パックバッファが空になるまで取得コマンドを繰り返し発行して取り出します。ただし、1フレーム時間中(13.3ms)に16パックを越えて取り出してはいけません。
     ホストは取得コマンドを発行したら、1パックのデコード時間(3.2ms)以内にデータ転送を完了する必要があります。
     パックバッファが空になり、パックデータがなくなればWAITを返します。

     (5)サブコードR〜Wのデコード

    1. デコードの開始と終了
      デコードのON/OFFは、CDブロックの初期化コマンドで設定します。
      デコードを開始するには、デコードONを設定してから、CD-DAの再生を実行します。

    2. デコード開始タイミング
      〈PLAY〉時にデコードを開始します。
      実際には、〈PLAY〉状態になる2フレーム前からデータを取り込み始めます。

    3. パックバッファのクリアタイミング
      デコード開始時にクリアされます。
      ポーズ、シークをしてもパックバッファの内容は保持されます。

    4. デコード条件
      CD-DA再生時だけデコードされます。
      他の場合(スキャン再生時やCD-ROM領域の再生時)にはデコードされません。

    注意:
     デコードONの設定だけではパックバッファはクリアされません。そのため、〈PLAY〉状態になる前に取得コマンドを発行すると、前の曲のパックデータが残っている場合があります。
    必ず〈PLAY〉状態になるのを確認してから、取得コマンドを発行してください。

     (6)サブコードR〜Wのエラー

    1. オーバーランエラー
      パックの取得が間に合わないとパックバッファは上書きされ、オーバーランエラーになります。(実際にはパックデータを取得せずに23パックたまった時点で)データ転送終了後、取得ポインタはオーバーランエラーのないパックまで進みます。

    2. パックデータエラー
      CDブロックはパックデータのP系列・Q系列に対してCRCチェックをしており、エラーを検出した場合はデータを訂正します。
      訂正が不可能なときはパックデータエラーになります。


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