READ BUFFER CAPACITY の使い方については、cdrteach や cdm-fix のソースコードなどがこの記事よりもためになります。
READ BUFFER CAPACITY コマンドの CDB は次のとおりです。
| BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
| 0 | Operation Code = 0x5C | ||||||||||
| 1 | 予約 | 予約 | BLOCK | ||||||||
| 2 | 予約 | ||||||||||
| 3 | 予約 | ||||||||||
| 4 | 予約 | ||||||||||
| 5 | 予約 | ||||||||||
| 6 | 予約 | ||||||||||
| 7 |
|
||||||||||
| 8 | |||||||||||
| 9 | Control | ||||||||||
BLOCK が 0 であれば、容量はバイト単位で得られます。 1 ならば、ブロック単位で得られますが、 こちらをサポートしていないドライブもあります。
Allocation Length には用意したデータバッファの容量をセットします。 12 以上であればきちんと結果が返ってきますが、 それ以下(0を含む)でもエラーにはなりません。
READ BUFFER CAPACITY で得られるデータは、BLOCK が 0 と 1 とで異なります。 BLOCK = 0 では次のとおりです。
| BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
| 0 |
|
||||||||||
| 1 | |||||||||||
| 2 | 予約 | ||||||||||
| 3 | 予約 | ||||||||||
| 4 |
|
||||||||||
| 5 | |||||||||||
| 6 | |||||||||||
| 7 | |||||||||||
| 8 |
|
||||||||||
| 9 | |||||||||||
| 10 | |||||||||||
| 11 | |||||||||||
Length of the Buffer がドライブの持つバッファの全容量
Blank Length of Buffer が未使用量=使用可能な量
です。
BLOCK = 1 は使ったことがありませんので、表だけ載せておきます。
| BYTE\bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
| 0 |
|
||||||||||
| 1 | |||||||||||
| 2 | 予約 | ||||||||||
| 3 | 予約 | Block = 1 | |||||||||
| 4 | 予約 | ||||||||||
| 5 | 予約 | ||||||||||
| 6 | 予約 | ||||||||||
| 7 | 予約 | ||||||||||
| 8 |
|
||||||||||
| 9 | |||||||||||
| 10 | |||||||||||
| 11 | |||||||||||

