This is not about setting your Chronos for 40/90 inc/30 d/5; 20/30 inc/15 d/3; SD/15 inc/10 d/2.
It’s about the difficulty clock manufacturers have in programming their clocks to operate correctly.
Let’s assume we have individual buttons for each side, like the Chronos or Zmart, rather than a rocker arm like the DGTs.
As a start, the main loop in the program might look like this:
-
- Is left button pressed?
-
- If no, go back to step 11 and keep checking.
-
- If yes, add the increment, bump the move count, stop the left clock, start the right clock, and continue with step 21 below.
-
- Is right button pressed?
-
- If no, go back to step 21 and keep checking.
-
- If yes, add the increment, bump the move count, stop the right clock, start the left clock, and loop back to step 11 above.
Of course I’ve left out a few things, including what happens at the start of the game, but I’m simply trying to lay out some main ideas.
The above looks as though it should work, right? When the left clock is running, it should wait for a left button press, then do its thing(s), then repeat the same steps with the right button, etc.
But what happens in a double time scramble? It would not be uncommon for the player on the left side to press his clock, hold it down for a second or two, and then for the player on the right side to move quickly and press his clock, perhaps also holding it down for a second or two. In that case, for a fraction of a second, both buttons are likely to be pressed down at the same time.
What happens during this fraction of a second? Well, the left button is pressed, so (step 13) the left-side increment is added and the move count is bumped, so we go to step 21. The right button is also pressed, so (step 23) the right-side increment is added and the move count is bumped, and we loop back to step 11. We’re in a loop, so all the steps keep being executed, rapidly, even though no further moves have been played. The clock could easily add a dozen increments and a dozen move-bumps, all in that fraction of a second during which both buttons are down.
Holy time scramble, Batman! This clock is crazy.
In fact, that’s what can actually happen, as has been documented in that Official Chess Clock thread.
So what logic can be developed to curb this manic behavior? I propose the following:
-
- Is left button pressed?
-
- If yes, go back to step 31 and keep checking.
-
- If no, proceed with the next step, step 34.
-
- Is left button pressed?
-
- If no, go back to step 34 and keep checking.
-
- If yes, add the increment, bump the move count, stop the left clock, start the right clock, and continue with step 41 below.
-
- Is right button pressed?
-
- If yes, go back to step 41 and keep checking.
-
- If no, proceed with the next step, step 44.
-
- Is right button pressed?
-
- If no, go back to step 44 and keep checking.
-
- If yes, add the increment, bump the move count, stop the right clock, start the left clock, and loop back to step 31 above.
This would seem to fix the problem. Step through it and see if you are convinced. By first waiting until the button is not pressed, and then waiting until it is pressed again, we’re bringing that endless speedy loop to a screeching halt. Now we are testing for the action of the button being pressed, rather than the static state of whether the button is currently pressed.
Any comments?
Of course, another solution would be to use a rocker arm instead of individual buttons, because then it is not possible for both buttons to be in a pressed-down state simultaneously.
Bill Smythe