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サブチャネルデータ (使ったことがない) | ?? |