アサシンの村が最初の街.
D8> 23:21:08
D9> 24:41:13 repeat
となっている. SUBCHANNEL Q の A-MSF の 24:41:13 は mode2 (catalog) となっており、時刻を取得できない.
repeat の検出は A-MSF の 24:41:13 を検出できてないので再生が続いてしまう.
24:41:13 は track 19 の P-MSF 00:00:00 でここを mode 2 にするのは想定外だった.
現状は MSF 8bit 単位で3度比較して一致したら再生停止としているが、下記の修正を検討する.
- MSF 24bit 単位で >= 演算子を1度比較する (1frame ずれるがここは INDEX 00 なのと精度が求められる場面ではないはず)
- mode2 の場合の P-MSF を算出しておく (MSF の計算はハードでやるのは複雑になりがちでやめたほうがいいかも)
subchannel Q の A-MSF と command 0xd9 の MSF 引数を == 演算子ではなく >= 演算子で比較するようにして、改善を確認.
== 演算子利用時からの実装として、 A-MSF のうち S (0から59)と F (0から74) は bit6:0 を利用し, bit7 は比較対象外. MSF として、または BCD として不正な値も bit7 は無視する.
不正な BCD 値は現状補正をいれていないので >= 演算子に切り替わったところで誤動作が多くなる可能性もわずかながら存在する. command 0xd8 や 0xd9 に関しては不正な BCD 値は現状見つかっていないのでこの実装とする.
(参考までに command 0xde.2 ではなぜか不正な BCD 値の利用が多い)