得られるデータは、4バイトのヘッダと、 1トラックが8バイトで表される連続したデータからなります。
BYTE | 内容 |
0 〜 3 | ヘッダ |
4 〜 11 | トラック 1 |
12 〜 19 | トラック 2 |
… | |
4+8×(n-1) 〜 4+8×n-1 | トラック n |
4+8×n 〜 4+8×(n+1)-1 | トラック 0xAA (リードアウト) |
ヘッダは、次のとおりです。
BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
0 |
|
|||||||||
1 | ||||||||||
2 | 開始トラック番号 | |||||||||
3 | 終了トラック番号 |
ヘッダにTOCデータ長や開始トラック番号と終了トラック番号が書かれているので、 実際にデータを入手するときには、メモリを予め大きめ (100+1トラック分=812バイト) に 確保するか、ヘッダ部のみを入手し、必要な量を計算して確保してください。 なお、「TOCデータ長」にはそれ自体のバイト数 (2バイト) が含まれていないことに 注意してください。
各トラックの内容は、次のとおりです。
BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
0 | 予約 | |||||||||||
1 | ADR | CTRL | ||||||||||
2 | トラック番号 | |||||||||||
3 | 予約 | |||||||||||
4 |
|
|||||||||||
5 | ||||||||||||
6 | ||||||||||||
7 |
「トラック番号」が 0xAA のとき、リードアウトトラックを表します。 これがないと、最後のトラックの終了時間がわかりません。
「トラックの開始時間」は、コマンド送信時の「TIME」の 設定で、LBA か MSF になります。
LBA の場合、(MSBとLSBに注意)
BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
4 |
|
|||||||||||
5 | ||||||||||||
6 | ||||||||||||
7 |
MSF の場合
BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
4 | ZERO | |||||||
5 | 分 | |||||||
6 | 秒 | |||||||
7 | フレーム (=1/75秒) |
DVD、HD-DVD、Blu-ray では、このコマンドを実行しないで下さい。 ディスクの内容に関係なく一定の値が帰ってきます。 (MSFでは、255分59秒74フレームが最大ですが、 これを超える長さのDVDもあります。)
余談
「せんべえ焼き、もしくはコースターメーカー」では、 FORMAT=0010B (Full Toc) が失敗したときにこちらを実行します。 これは、Windows95 で試してみたときの名残です。 あと、過去のバージョンでは、 DVDにRead TOC/PMA/ATIPを使って間違っているものがあります。