MSFでは、1分=60秒、1秒=75フレームです。
このLBAとMSFの変換がややこしいです。LBAの基点は最初のトラックの INDEX 1 が始まる位置であり、データCDおよびCD-Rへの書き込み時では 00:02:00 (=75*2) です。そしてその変換式は、次のようになります。
BYTE M; //分
BYTE S; //秒
BYTE F; //フレーム
long LBA; //論理ブロックアドレス
条件 | 変換式 |
-150≦LBA≦404849 |
M = (LBA + 150)/75/60 S = ((LBA + 150)/75)%60 F = (LBA + 150)%75 |
-45150≦LBA≦-151 |
M = (LBA + 450150)/75/60 S = ((LBA + 450150)/75)%60 F = (LBA + 450150)%75 |
00:00:00≦LBA≦89:59:74 | LBA = M*60*75 + S*60 + F - 150 |
90:00:00≦LBA≦99:59:74 | LBA = M*60*75 + S*60 + F - 450150 |
LBA MSF -45150 ┬ 90:00:00 │ │ -151 ┼ 99:59:74 -150 ┼ 00:00:00 │ 0 ┼ 00:02:00 │ │ │ 404849 ┼ 89:59:74 -45150 ┼ 90:00:00 │ │ -151 ┴ 99:59:74先頭のリードインでは、なんと 100:00:00 からのマイナスになります。
蛇足
「せんべえ焼き」では、
MSF 00:00:00 = 0 LBA
とする表現を主に使用しており、
コマンドを送る直前に -150 しています。
このため、ソースコードがよけいややこしくなっています。