CDでは、汎用の READ (10) コマンドではなく
専用の READ CD (または READ CD MSF) コマンドを使用することで、
CD に記録された内容を、メインデータだけでなく各モードのヘッダや訂正コード、サブチャネル
の情報まで選択して入手できます。
READ CD コマンドの CDB は次のとおりです。
BYTE\bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 | Operation Code = 0xBE |
1 | 予約 | セクタの形式 | 予約 | Zero |
2 |
(MSB) |
読込開始 LBA アドレス |
|
(LSB) |
|
3 |
4 |
5 |
6 |
|
7 |
8 |
9 | SYNC | header codes | User data | EDC & ECC |
C2 Error | 予約 |
10 | 予約 | Sub-channel |
11 | Control |
1バイト目の「セクタの形式」は、読み取るセクタのモードを示します。
セクタの形式 | 内容 |
000B | 全て |
001B | CD-DA |
010B | Mode 1 |
011B | Mode 2 |
100B | Mode 2 form 1 |
101B | Mode 2 form 2 |
110B | 予約 |
111B | 予約 |
ここで設定した形式と、実際に読み取るデータの形式が異なる場合、
SK=5, ASC=64, ASCQ=00, ILLEGAL MODE FOR THIS TRACK エラーが返ってきます。
9〜10バイト目で、読み取る情報の内容を指定します。
9バイト目がメインデータ、10バイト目がサブチャネルのデータです。
各ビットを1に設定すると、そのデータが読み取れます。
このうち C2 Error は使ったことがないので、割愛します。
Header Code | 読み込む内容 |
00B | 読み込まない |
01B | 4バイトのヘッダのみ |
10B | Mode2Form1,2のサブヘッダのみ |
11B | ヘッダ、サブヘッダの両方 |
Sub-channel | 読み込む内容 | バイト数 |
000B | 読み込まない | 0 |
001B | RAW形式。生のP-Wサブチャネルデータ | 96 |
010B | Qサブチャネルデータ | 16 |
011B | 予約 | - |
100B | R-Wサブチャネルデータ (使ったことがない) | ?? |