CAI_Support said:
Thanks for your suggestion. One of our really good customers think we should not let certain operator to change the zero bit, when those operation could result in zero or non-zero, but not for intended setting zero bit purpose. We think that suggestion made sense. For example, you had a test for certain condition, then in the process, you did an addition for two numbers, which wiped out the zerobit state in previous checking. But the condition that caused zerobit set did not change or recheck.
Based on that suggestion and a list of operators that should set zero bit, we made such change in the 3.02.17e release and documented in the user guide. If you have suggestion that other operator should be included in the setting zerobit list, we can discuss and make change. With the bootloader implemented, it is easy to get new firmware updated, if so desired.
I'm not arguing the merit of setting or not setting the zerobit.
I'm arguing the change in established behavior (which is not abberant, and is per the published documentation at the time).
There will be a lot of code out there (I have a lot of lines of code in a bunch of devices "out there" - much of which does specifically use the zerobit test - that code will need audited and changed (some of it is over a year old) - in order for it to be deployed in a "like for like change" of hardware!
True, there is an argument that the later code has many additional features and the code could be made more efficient using them - but that's not the point.
EXISTING CODE on an older board will FAIL TO WORK - and may fail in non-obvious ways - POTENTIALLY in ways that could injure people or damage equipment.
Someone who has an existing board, wishes for (whatever reason) to replace it with another of the same type from the same manufacturer with exactly the same external appearance will undo the screws, swap boards, re-do the screws, drop the same code in it and REASONABLY expect it to work the same, without having to sit and read all the fine print in the manual (which they won't!)
If the original operation was inconsistent or WRONG, then this would be a bugfix and I have no problem with it.
But completely changing the operation of the same instruction is (in my mind) a really bad move. The changed behavior SHOULD have been on the NEW instruction, not the original one, as that would maintain backwards code compatability.