English
INDEXSTN-2 |STN-3 |STN-4 |STN-5 |STN-6 |STN-9 |STN-18

STN-5

セガサターン用CD−ROMでのリードリトライ


発行番号:
STN-5
発 行 日:
94/10/07
メディア:
○共 通●CD-ROM○カートリッジ○その他
関  連:
●プログラム○ハード○マニュアル○ツール○ゲーム○バグ○その他
情報区別:
●新 規○変 更○追 加
重 要 度:
●厳 守○推 奨○参 考○その他
添付資料:
○無●有
件名補足:

内 容

 セガサターン用CD-ROMを作成する場合、データエラーを考慮して、必ずリードリトライを行うこと。

■説明

 CD-ROMは、高いエラー訂正能力をもっていますが、ドライブの劣化・ディスク傷, 偏心・ディスクに付着したほこり等により、訂正不能なエラーが発生する場合があり ます。
 従ってデータエラーを考慮して、「ECCの回数を増やす方法」 (添付資料参照)だけではなく、必ずリードリトライを行うようにしてください。
 但しデバック時等には、リードリトライを行う事により、エラー等の発生原因が解らな くなる恐れがありますのでご注意ください。


添付資料

ECC/リトライ回数の設定方法

■目的

 CD-ROMデータがリード時にエラーが発生した場合、デフォルトの設定値ではリトライせずリードが中止されます。
→[エラー状態を返す]

■設定方法

 リトライ回数は、CDC_CdInit関数で設定します。設定は、目的とするCD再生の手前 で行うと有効になります。実際には一度設定すれば再設定するかソフトリセットする まで設定は有効なので、通常はプログラムの先頭(初期化等)で実行するのが適当です。

 ◆注意
 CDC_CdInit関数を実行すると、CDドライブは,<PAUSE>状態になります。従ってCD再生中にリトライ回数を変更すると、設定は変更されますが<PAUSE>状態になってしまします。

 ◆プログラム例
	#include	"sega_cdc.h"
	#define		ECC	5	/* ECC繰り返し回数:  5回 */
	#define		RETRY	0x0f	/* リトライ回数   :15回 */

	/* ECC/リトライ回数の設定(初期化フラグ,スタンバイタイムはデフォルト値)*/
	CDC_CdInit(0,0,ECC,RETRY);

 ◆参照CDC_CdInit()関数については
  • 「PROGRAMMER'S GUIDE VOL.1」CD通信インタフェースユーザーズマニュアル
  • STN-19:GFS使用時のCDブロックの初期化方法

     ◆ その他
     CDドライブ状態が<ERROR>になった場合、データが正しくリードできたFADまでシークして再度プレイしてください。
     現在のFADを知るには、1度ポーズコマンドを発行してから、CDステータス情報を取得してください。 何度も同じ場所で<ERROR>になる場合は、修復不可能な傷などがあると考えられますので、スキップするしかありません。

    ■サンプルプログラム

    #include	"sega_cdc.h"
    
    #define	STS_MSK	0x0f		/* CDステータスのマスクパターン */
    
    Sint32 recovPlay(Sint32 fad);
    Sint32 waitStat(Sint32 sts);
    
    /* CD再生の復帰処理(指定fadから再生を再開する)*/
    Sint32 recovPlay(Sint32 fad)
    {
    	Sint32	Ret;
    	CdcPos	pos;
    	CdcPly	ply;
    	
    	/* 目的位置へシークする */
    	CDC_POS_PTYPE(&pos) = CDC_PTYPE_FAD;
    	CDC_POS_FAD(&pos) = fad;
    	ret = CDC_CdSeek(&pos);
    	if (ret != CDC_ERR_OK) {
    		return NG;
    	}
    	
    	/* 状態になるまで待つ */
    	ret = waitStat(CDC_ST_PAUSE);
    	if (ret != OK) {
    		return ret;
    	}
    	
    	/* CD再生を再開する */
    	CDC_PLY_STYPE(&ply) = CDC_PTYPE_NOCHG;
    	CDC_PLY_ETYPE(&ply) = CDC_PTYPE_NOCHG;
    	CDC_PLY_PMODE(&ply) = CDC_PM_NOCHG;
    	ret = CDC_CdPlay(&ply);
    	if (ret != CDC_ERR_OK) {
    		return NG;
    	}
    	return OK;
    }
    
    /* 指定ドライブ状態になるまで待つ */
    Sint32 waitStat(Sint32 sts)
    {
    	Sint32	ret;
    	Sint32	stwk;
    	CdcStat	stat;
    	
    	while (TRUE) {	/* 実際にはループ回数の上限が必要 */
    		/* 定期レスポンスの取得 */
    		ret = CDC_GetPeriStat(&stat);
    		if (ret == CDC_ERR_PERI) {
    			continue;
    		}
    		if (ret != CDC_ERR_OK) {
    			return NG;
    		}
    		stwk = (CDC_STAT_STATUS(&stat) & STS_MSK);
    		if (stwk == sts) {
    			brake;
    		}
    	}
    	return OK;
    }
     
    

  • 以上
    INDEXSTN-2 |STN-3 |STN-4 |STN-5 |STN-6 |STN-9 |STN-18
    Copyright SEGA ENTERPRISES, LTD., 1997