No, it's more a matter of ZUN not being consistent in how he maps the buttons to the bit flags in the vector. In particular, before th11 it goes (shot, bomb, slow, [empty], up, down, left, right, skip, [empty]). Meanwhile in th11 and on, the 4-bit is reserved and the 8-bit is slow instead (and skip goes from the 256-bit to the 512-bit), so in the program I check both 4 and 8 for slow, and both 256 and 512 for skip. But in th125, he shifts the up button and onward right one bit, so the up button gets read as slow instead (the other mismatches follow similarly).
th06 ~ th10 (except th095):
(shot, bomb, slow, [empty], up, down, left, right, skip, [empty])
th11 ~ th143 (except th125):
(shot, bomb, [reserved], slow, up, down, left, right, [empty], skip)
th095:
(bomb*, shot, slow*, [empty], up, down, left, right, skip, [empty]) *bomb and slow have the same behaviour, so bomb -> 1 and slow -> 4+1
th125:
(shot, bomb, slow, up, down, left, right, skip, [empty], [empty]) <- why zun
The forward-compatibility of this relies on the input being consistent, basically. Since th095 and th125 aren't consistent, it doesn't work as intended. Does this clear things up?