What can break the timer? in Atari 2600 Programming Posted August 8 Also keep in mind the behaviour of the timer flag when timer reaches zero. It's rather odd. Here is my solution... ldx #0 bit TIMINT bmi .zeroTime ; already overtime! lda INTIM beq .zeroTime ; also time expired bmi .zeroTime ; must have been just overtime and now counting down tax .xOSwait sta WSYNC bit TIMINT ; wait for the timer bpl .xOSwait .zeroTime stx TimeLeftOS ; x holds the "how much time left" rts Essentially, when the timer value reaches zero (INTIM), then the TIMINT flag is set and from that point onwards the timer (INTIM) counts down at 1-clock intervals (i.e., it counts down at your step value until it reaches 0 and then it counts down at 1-clock steps. It doesn't stop at zero.). So the above code is trying to put "how much time left" into a variable (TimeLeftOS). But you can't do that just by reading INTIM, as that clears any flag indicating that time was zero. So the convolutions are to first see if we are overtime - zero left. Otherwise if timer is 0 also zero left, otherwise we store that and then wait for timer to expire, and then store and return.