The timecode after 99:59:74 is (fasten your seatbelt) A0:00:00

OK. Now I’ll explain it.

Bumbers as 99 or 59, as you know it, are called “decimal”. 59 means 5*10+9*1.

Then you might know hexadezimal numbers, such as 2E or the such: That is 2*16+E*1 (with E=14, per definition), which would be 46, in decimal. To avoid misunderstandings, it’s common to put a “0x” before the number if you speak about hexadecimal numbers, such as 46 = 0x2E.

Then, there is “packed BCD”. This one is easy:

46 decimal is 0x46 in packed-BCD (while the decimal value of 0x46 is 4*16+6 = 70 if it is real hexadecimal). You need 4 bits to store one digit, 1 Byte stores 2 digits then.

Q-Subcodes contain timestamps in packed-BCD format, i.e. a timestamp of 23:50:72 would render as

0x23 0x50 0x72. Since one byte can contain only 2 digits, you can’t write a value of 0x100 for the minutes.

The sub file I received contained then an “0xA0” as minute-value: A is hexadecimal for 10…that means that the “first” digit is “10” then, the second is “0”.

This allows of course timestamps of more than 100 min, but it is a funny mixture of hexadecimal and packed-bcd numbers. Seeking beyond 100min should not work at all…