[Question]
  [
[Related](https://codegolf.stackexchange.com/questions/204969/write-a-microwave-timer)
Sometimes when I use my microwave, I do a little trolling and enter times such as `2:90` instead of `3:30` because they end up being the same time anyway. The microwave happily accepts this and starts counting down from `2:90`, displaying times like `2:86` and `2:69` until it gets back to a stage where it can count down like a normal timer. Y'all's task today is to simulate this behaviour by returning a list of all times displayed by the microwave when given a starting time.
## An Example
Say I input `2:90` into the microwave. It starts at `2:90` and then shows `2:89`, `2:88`, `2:87`, `2:86`, ..., `2:60`, `2:59`, `2:58`, `2:57`, ..., `2:00`, `1:59`, `1:58`, `1:57`, ..., `0:05`, `0:04`, `0:03`, `0:02`, `0:01`, `END`. As you can see, where the seconds are less than `60`, it acts as normal. But where the seconds are greater than `60`, it decrements the seconds without impacting the minute count.
## Rules
* Input can be taken in any convienient and reasonable format, including, but not limited to:
	+ `[minutes, seconds]`
	+ `[seconds, minutes]`
	+ `minutes` on one line, `seconds` on the next
	+ `seconds` on one line, `minutes` on the next
	+ a single integer which is a [minutes, seconds] pair divmod 100 (e.g `130` represents `1:30`).
* Output can be given in any convienient and reasonable format, including, but not limited to:
	+ `[[minute, second], [minute, second], [minute, second], ...]`
	+ `["minute second", "minute second", "minute second", ...]`
	+ `minute second\n minute second\n ...`
	+ `[[second, minute], [second, minute], [second, minute], ...]`
* The outputted times can be returned in any order - they don't need to be sorted.
* The seconds will never be greater than `99`.
* Including `[0, 0]` or `0:00` is optional.
Make sure to include how you're outputting the times in your answer.
## Sample IO
Input here is given as `[minutes, seconds]`. Output is given as a list of `[minute, seconds]`
```
[0, 90] => [[0, 90], [0, 89], [0, 88], [0, 87], [0, 86], [0, 85], [0, 84], [0, 83], [0, 82], [0, 81], [0, 80], [0, 79], [0, 78], [0, 77], [0, 76], [0, 75], [0, 74], [0, 73], [0, 72], [0, 71], [0, 70], [0, 69], [0, 68], [0, 67], [0, 66], [0, 65], [0, 64], [0, 63], [0, 62], [0, 61], [0, 60], [0, 59], [0, 58], [0, 57], [0, 56], [0, 55], [0, 54], [0, 53], [0, 52], [0, 51], [0, 50], [0, 49], [0, 48], [0, 47], [0, 46], [0, 45], [0, 44], [0, 43], [0, 42], [0, 41], [0, 40], [0, 39], [0, 38], [0, 37], [0, 36], [0, 35], [0, 34], [0, 33], [0, 32], [0, 31], [0, 30], [0, 29], [0, 28], [0, 27], [0, 26], [0, 25], [0, 24], [0, 23], [0, 22], [0, 21], [0, 20], [0, 19], [0, 18], [0, 17], [0, 16], [0, 15], [0, 14], [0, 13], [0, 12], [0, 11], [0, 10], [0, 9], [0, 8], [0, 7], [0, 6], [0, 5], [0, 4], [0, 3], [0, 2], [0, 1], [0, 0]]
[1, 20] => [[1, 20], [1, 19], [1, 18], [1, 17], [1, 16], [1, 15], [1, 14], [1, 13], [1, 12], [1, 11], [1, 10], [1, 9], [1, 8], [1, 7], [1, 6], [1, 5], [1, 4], [1, 3], [1, 2], [1, 1], [1, 0], [0, 59], [0, 58], [0, 57], [0, 56], [0, 55], [0, 54], [0, 53], [0, 52], [0, 51], [0, 50], [0, 49], [0, 48], [0, 47], [0, 46], [0, 45], [0, 44], [0, 43], [0, 42], [0, 41], [0, 40], [0, 39], [0, 38], [0, 37], [0, 36], [0, 35], [0, 34], [0, 33], [0, 32], [0, 31], [0, 30], [0, 29], [0, 28], [0, 27], [0, 26], [0, 25], [0, 24], [0, 23], [0, 22], [0, 21], [0, 20], [0, 19], [0, 18], [0, 17], [0, 16], [0, 15], [0, 14], [0, 13], [0, 12], [0, 11], [0, 10], [0, 9], [0, 8], [0, 7], [0, 6], [0, 5], [0, 4], [0, 3], [0, 2], [0, 1], [0, 0]]
[2, 90] => [[2, 90], [2, 89], [2, 88], [2, 87], [2, 86], [2, 85], [2, 84], [2, 83], [2, 82], [2, 81], [2, 80], [2, 79], [2, 78], [2, 77], [2, 76], [2, 75], [2, 74], [2, 73], [2, 72], [2, 71], [2, 70], [2, 69], [2, 68], [2, 67], [2, 66], [2, 65], [2, 64], [2, 63], [2, 62], [2, 61], [2, 60], [2, 59], [2, 58], [2, 57], [2, 56], [2, 55], [2, 54], [2, 53], [2, 52], [2, 51], [2, 50], [2, 49], [2, 48], [2, 47], [2, 46], [2, 45], [2, 44], [2, 43], [2, 42], [2, 41], [2, 40], [2, 39], [2, 38], [2, 37], [2, 36], [2, 35], [2, 34], [2, 33], [2, 32], [2, 31], [2, 30], [2, 29], [2, 28], [2, 27], [2, 26], [2, 25], [2, 24], [2, 23], [2, 22], [2, 21], [2, 20], [2, 19], [2, 18], [2, 17], [2, 16], [2, 15], [2, 14], [2, 13], [2, 12], [2, 11], [2, 10], [2, 9], [2, 8], [2, 7], [2, 6], [2, 5], [2, 4], [2, 3], [2, 2], [2, 1], [2, 0], [1, 59], [1, 58], [1, 57], [1, 56], [1, 55], [1, 54], [1, 53], [1, 52], [1, 51], [1, 50], [1, 49], [1, 48], [1, 47], [1, 46], [1, 45], [1, 44], [1, 43], [1, 42], [1, 41], [1, 40], [1, 39], [1, 38], [1, 37], [1, 36], [1, 35], [1, 34], [1, 33], [1, 32], [1, 31], [1, 30], [1, 29], [1, 28], [1, 27], [1, 26], [1, 25], [1, 24], [1, 23], [1, 22], [1, 21], [1, 20], [1, 19], [1, 18], [1, 17], [1, 16], [1, 15], [1, 14], [1, 13], [1, 12], [1, 11], [1, 10], [1, 9], [1, 8], [1, 7], [1, 6], [1, 5], [1, 4], [1, 3], [1, 2], [1, 1], [1, 0], [0, 59], [0, 58], [0, 57], [0, 56], [0, 55], [0, 54], [0, 53], [0, 52], [0, 51], [0, 50], [0, 49], [0, 48], [0, 47], [0, 46], [0, 45], [0, 44], [0, 43], [0, 42], [0, 41], [0, 40], [0, 39], [0, 38], [0, 37], [0, 36], [0, 35], [0, 34], [0, 33], [0, 32], [0, 31], [0, 30], [0, 29], [0, 28], [0, 27], [0, 26], [0, 25], [0, 24], [0, 23], [0, 22], [0, 21], [0, 20], [0, 19], [0, 18], [0, 17], [0, 16], [0, 15], [0, 14], [0, 13], [0, 12], [0, 11], [0, 10], [0, 9], [0, 8], [0, 7], [0, 6], [0, 5], [0, 4], [0, 3], [0, 2], [0, 1], [0, 0]]
```
As this is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'"), the aim of the game is to get your byte count as low as possible
  
[Answer]
# [Haskell](https://www.haskell.org/), 43 bytes
*Doesn't output `0:0`*
```
0?0=[]
n?0=(n,0):(n-1)?59
n?m=(n,m):n?(m-1)
```
[Try it online!](https://tio.run/##y0gszk7Nyfn/38DewDY6lisPSGnk6RhoWmnk6Rpq2ptaAoVyQUK5mlZ59hq5QMH/uYmZeQq2CrmJBb7xCgVFmXklCioKhgr2CmZG/wE "Haskell – Try It Online")
This is very simple. Decrements the second hand unless it's zero, in which case it decrements the minute unless it's zero in which case it ends.
# [Haskell](https://www.haskell.org/), 46 bytes
*Outputs `0:0`*
```
n?m=(n,m):[n?(m-1),[(n-1)?59|n>0]>>=id]!!(0^m)
```
[Try it online!](https://tio.run/##y0gszk7Nyfn/P88@11YjTydX0yo6z14jV9dQUydaIw9I2Zta1uTZGcTa2dlmpsQqKmoYxOVq/s9NzMxTsFXITSzwjVcoKMrMK1FQUTBUsFcwM/oPAA "Haskell – Try It Online")
This one is a bit more complicated than the last. It employs two special tricks for cheaper branching.
To check the second hand `m`. We do `0^m` which gives \$1\$ when `m` is \$0\$ and \$0\$ otherwise. We can use this to index a list to switch between the two options.
To check the minute hand `n`. We use a list comprehension trick. `[(n-1)?59|n>0]` is empty when `n` is zero and `[(n-1)?59]` otherwise. We use `>>=id` to concat away the wrapping list and then we get `(n-1)?59` when `n>0` and `[]` otherwise.
[Answer]
# [R](https://www.r-project.org), 41 bytes
```
f=\(m,s,`~`=rbind)t(m~s:0)~if(m)f(m-1,59)
```
[Attempt This Online!](https://ato.pxeger.com/run?1=m72waMGykszc1CLbpaUlaboWNzXTbGM0cnWKdRLqEmyLkjLzUjRLNHLriq0MNOsy0zRyNYFY11DH1FITomE1WLeGkY6lAVRkwQIIDQA)
Makes a 2-column matrix of the minutes and seconds...zero. Then, if the minutes are non-zero, appends the matrix from a recursive call to itself with `m-1` minutes and 59 seconds.
[Answer]
# [C (gcc)](https://gcc.gnu.org/), 43 bytes
```
f(n){printf("%d ",n);n&&f(n%100?n-1:n-41);}
```
[Try it online!](https://tio.run/##LYxBCoMwFETXzSk@ASUflSbSjU2lBxEXJW1KFn5F001Dzp4m0M0wvDeM6d7GpGQFYdh2R94KXj2Bt4Sa6jrzSkl5p05dqbso1DEtD0cCIbC8Bm@mGUYIg2xB9Tn6QUbN7LqDKN6NUoODGxzu@1qt8AbP/5o1Ztc05etU1OTmTLaPPwTnqFlkMf0A "C (gcc) – Try It Online")
[Answer]
# [Jelly](https://github.com/DennisMitchell/jelly), ~~13~~ ~~12~~ 11 bytes
```
ȷ2ḍ41*ạµ¹Ð¿
```
[Try it online!](https://tio.run/##y0rNyan8///EdqOHO3pNDLUe7lp4aOuhnYcnHNr/X@fhjlagxOH2FCCZ9ahpzaOGuVZch5fre2tG/v8fbaCjYGkQq6MQbaijYARmGIFFAA "Jelly – Try It Online")
*-1 thanks to Zion mycelia adamancy, and another -1 with inspiration from their suggestion*
Uses flat integer I/O.
Could almost be 10 (`ạ41$’ọ?Ƭȷ2`), but that fails for inputs under 41.
```
       µ¹Ð¿    Collect results to (and through) 0 from:
   41*         raise 41 to the power of
ȷ2ḍ            if the number is divisible by 100,
      ạ        and take its absolute difference with that.
```
[Answer]
# [Python 3](https://docs.python.org/3/), 52 bytes
```
f=lambda m,s:m+1and[[m,s]]+f(m-0**s,(s or 60)-1)or[]
```
[Try it online!](https://tio.run/##K6gsycjPM/7/P802JzE3KSVRIVen2CpX2zAxLyU6GsiOjdVO08jVNdDSKtbRKFbIL1IwM9DUNdTML4qO/V9QlJlXopGmYaSjYGmgqfkfAA "Python 3 – Try It Online")
[Answer]
# [K (ngn/k)](https://codeberg.org/ngn/k), 24 bytes
```
(|/){x-$[*|x;!2;1 -59]}\
```
[Try it online!](https://ngn.codeberg.page/k#eJxLs9Ko0desrtBVidaqqbBWNLI2VNA1tYytjeHiSlMwULA0AFKGCkYgygjIAwAuVwsm)
-1 byte thanks to @dzaima! -3 bytes thanks to @coltim!
## Explanation
Input is *l*.
* `(|/){...}\` while *l* is not `0 0` (keeping intermediate results)...
	+ `x-...` decrement the timer by...
		- `$[*|x;...;...]` if seconds > 0...
			* `!2` equivalent to `0 1`, so `[x[0]-0, x[1]-1]`
			* `1 -59` otherwise reset seconds, so `[x[0]-1, x[1]-(-59)]`
[Answer]
# [Vyxal](https://github.com/Vyxal/Vyxal), 12 bytes
```
⁽⌊λ₁Ḋ40*›-;ŀ
```
[Try it Online!](https://vyxal.pythonanywhere.com/#WyIiLCIiLCLigb3ijIrOu+KCgeG4ijQwKuKAui07xYAiLCIiLCIxMjAiXQ==)
Port of Jelly answer. Takes single integer and outputs list of ints.
[16 bytes taking second and minute](https://vyxal.pythonanywhere.com/#WyIiLCIiLCLKgHZcIuKBsOKAucqAxps2MMqBdlwiO8OeZkoiLCIiLCI5MFxuMiJd).
[Answer]
# [C (GCC)](https://gcc.gnu.org), 78 bytes
```
main(h,m){for(scanf("%d%d",&h,&m);h+m;m?--m:--h&(m=59))printf("%d %d\n",h,m);}
```
[Attempt This Online!](https://ato.pxeger.com/run?1=m700OT49OXnBgqWlJWm6Fjf9chMz8zQydHI1q9PyizSKkxPz0jSUVFNUU5R01DJ01HI1rTO0c61z7XV1c610dTPUNHJtTS01NQuKMvNKwCoVVFNi8pR0QEZY10JMhRq-YImRgqUBhA0A)
[Answer]
# Rust, ~~113~~ 100 bytes
```
|t:(u8,u8)|(0..t.0*60+t.1).scan(t,|t,_|Some((*t,*t=match t{(n,0)=>(*n-1,59),(m,s)=>(*m,*s-1)}).0));
```
Had to increase it to follow rules more strictly. Skips the (0,0) at the end.
[Playground link](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9d972ee65f42024a93f290b27fce2a6a)
[Answer]
# [Brainfuck](https://github.com/TryItOnline/brainfuck), 36 bytes
```
,+>,+<[->[-<.>.]>----[<+>----]<---<]
```
[Try it online!](https://tio.run/##SypKzMxLK03O/v9fR9tOR9smWtcuWtdGz04v1k4XCKJttMF0rA2QsIn9/z8pEQA "brainfuck – Try It Online")
There are no separators and output is just `hours minutes hours minutes ...` in form of bytes.
Separator `-1` can be added at the cost of 7 bytes (totaling 43 bytes):
```
->,+>,+<[->[-<.>.<<.>>]>----[<+>----]<---<]
```
Explanation:
```
,+                    load hours
>,+                   load minutes
<[-                   loop through all hours
  >[-                 loop through all minutes
    <.>.              print hours and minutes
  ]
  >----[<+>----]<---< set minutes to 60; constant is take from esolangs wiki
]
```
[Answer]
# [HBL](https://github.com/dloscutoff/hbl), 15.5 [bytes](https://github.com/dloscutoff/hbl/blob/main/docs/codepage.md)
```
1'.(?,('?.(-,)).('?(-.)(-'-*))?
```
Takes the minutes and seconds as separate arguments to the main program; outputs a list of two-number lists. [Try it here!](https://dloscutoff.github.io/hbl/?f=0&p=MScuKD8sKCc/LigtLCkpLignPygtLikoLSctKikpPw__&a=MQo3MA__)
### Explanation
```
1'.(?,('?.(-,)).('?(-.)(-'-*))?
1                                Cons
 '.                              the argument list
                                 to:
   (?                             If
     ,                            the second argument (is nonzero):
      ('?     )                    Recursive call
         .                         with the same first argument
          (-,)                     and a decremented second argument
                                  Else if
               .                  the first argument (is nonzero):
                ('?          )     Recursive call
                   (-.)            with a decremented first argument
                                   and a second argument of
                       (-   )      the difference between
                         '-        64
                           *       and 5
                                  Else:
                              ?    Empty list
```
[Answer]
# JavaScript (ES6), ~~42~~ 41 bytes
Expects `(m)(s)`. Returns a list of `[minutes, seconds]` pairs.
```
m=>g=s=>~m?[[m,s],...g(s?s-1:m--&&59)]:[]
```
[Try it online!](https://tio.run/##y0osSyxOLsosKNHNy09J/Z9m@z/X1i7dttjWri7XPjo6V6c4VkdPTy9do9i@WNfQKldXV03N1FIz1io69n9yfl5xfk6qXk5@uoZXsL@fXnFJUWZeemZapUaahoGmhqWBpqaCtoJ6TJ66JhdexYaaGkZEKzaCmKz5HwA "JavaScript (Node.js) – Try It Online")
[Answer]
# Javascript, 49 bytes
```
let g=a=>([b,c]=a,(b+c)?[g([b-!c,c?c-1:59]),a]:a)
```
A recursive function that takes in an array like `[minutes, seconds]`, and repeatedly appends it to the array that contains the next values.
[Answer]
# [Curry (PAKCS)](https://www.informatik.uni-kiel.de/%7Epakcs/), 40 bytes
```
n#m=(n,r m)?(r$n-1,r 59)
r n=anyOf[0..n]
```
[Try it online!](https://tio.run/##Sy4tKqrULUjMTi7@/z9POddWI0@nSCFX016jSCVP1xDINrXU5CpSyLNNzKv0T4s20NPLi/2fm5iZp2CrYKSgrGBp8B8A "Curry (PAKCS) – Try It Online")
This is a non-deterministic function whose return values are the all the ouputs.
[Answer]
# [05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), 12 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage)
```
[=Ð_#тÖ40*>-
```
I/O as integers. Outputs everything on a separated line to save bytes.
[Try it online](https://tio.run/##yy9OTMpM/f8/@vAEZZeLTYenmRho2enW2mj@/29kafBfVzcvXzcnsaoSAA) or [verify all test cases](https://tio.run/##yy9OTMpM/f8/2vbwhHjli02Hp5kYaNnp/v9vZGnwX1c3L183J7GqEgA).
**Explanation:**
```
[          # Loop indefinitely:
 =         #  Print the current number with newline (without popping)
           #  (which will be the implicit input-integer in the first iteration)
  Ð        #  Triplicate the value
   _       #  Pop one, and if it's 0:
    #      #   Stop the infinite loop
   тÖ      #  (Else) Pop another, and check if it's divisible by 100
     40*   #  Multiply that by 40
        >  #  Increase that by 1
         - #  Decrease the value by this
```
[Answer]
# [K (ngn/k)](https://codeberg.org/ngn/k), 18 bytes
```
{(x,'!y+1),+!x,60}
```
[Try it online!](https://ngn.codeberg.page/k#eJxLs6rWqNBRV6zUNtTU0Vas0DEzqOXiSos2sLY0iAXShtZGYNoIxAcAA50LJw==)
Uses the fact that *outputted times can be returned in any order*. Using the descending order would costs 2 bytes: [`{(x,'|!y+1),|+!x,60}`](https://ngn.codeberg.page/k#eJxLs6rWqNBRr1Gs1DbU1KnRVqzQMTOo5eJKizawtjSIBdKG1kZg2gjEBwAsYgwf).
[Answer]
# [\*><>](https://github.com/redstarcoder/go-starfish), 64 bytes
```
c5*&       1+\
/!?)0:C31-1  <
\r:?!;1-r~&:&/
>r:r:{ao\
R no" "n/
```
[Try it online!](https://tio.run/##Ky5JLErLLM74/z/ZVEtNAQIMtWO49BXtNQ2snI0NdQ0VFGy4Yoqs7BWtDXWL6tSs1PS57IqsiqyqE/NjuIIU8vKVFJTy9P///5dfUJKZn1f8XzfT1kjB0gAA "*><> – Try It Online")
I'd like to believe this could be golfed more, mostly in the output section, but this is as good as I could get it.
Using the `-i` flag, the stack is initialize with `[<minutes>, <seconds>]`. Throughout the program, the "canon" seconds can be considered to be at the top of the stack, and minutes right below that.
```
Main loop:
c5*&            Push 60 onto the stack, and then pop it into a register
           1+   Add 1 to the seconds, this way our starting time is printed correctly
             \  Mirror the IP down
             <  Change IP direction to the left
         -1     Subtract one from our seconds
      C31       Go to the print function
     :          Duplicate our seconds
    0           Push 0 onto the stack
   )            Check if the seconds is greater than 0
 !?             If it is, IP continues left, wrapping back to our < instruction
/               Else, mirror the IP down
\               Mirror the IP to the right
 r:             Put the minutes on top of the stack and duplicate it
   ?!;          If the minutes and the seconds are 0, end execution
      1-        Else, subtract one from the minutes
        r       Put the seconds back on top of the stack
         ~      Remove the seconds
         &:&    Take 60 out of the register, duplicate it, and pop that duplicate back into the register
            /   Mirror the IP up into the < on line 2
Print function:
>               Change the IP direction to the right
 r:             Reverse the stack, and duplicate the top value
   r:           Repeat
     {          Shift the stack to the left. Stack should look like [m, s, s, m]
      ao        Print a newline
        \       mirror the IP down
        /       Mirror the IP to the left
       n        Pop the top of the stack, print it as a number
   o" "         Print a space
  n             Pop the top of the stack, print it as a number
R               Return the IP to where it was, maintaining current direction
```
[Answer]
# [Husk](https://github.com/barbuz/Husk), 12 bytes
```
↑Σ¡?-41←¦100
```
[Try it online!](https://tio.run/##AR8A4P9odXNr///ihpHOo8KhPy00MeKGkMKmMTAw////Mjkw "Husk – Try It Online")
Port of [unrelated string's answer](https://codegolf.stackexchange.com/a/249147/95126): upvote that.
Inputs & outputs as simple integers (so, no separator between minutes & seconds).
```
↑Σ¡?-41←¦100        
  ¡                 # apply function repeatedly, collect values in infinite list:
   ?                #  if:
        ¦100        #   it's divisible by 100
    -41             #  then: subtract 41
       ←            #  else: decrement
↑                   # finally, get longest prefix where function gives truthy result:
 Σ                  #  sum (of secs, mins)
```
---
Previous approach:
# [Husk](https://github.com/barbuz/Husk), 15 bytes
```
↑Σ¡?ż-ḋ2ȯe59←→←
```
[Try it online!](https://tio.run/##yygtzv7//1HbxHOLDy20P7pH9@GObqMT61NNLR@1TXjUNglI/v//P9rSQMcoFgA "Husk – Try It Online")
Outputs as [[secs,mins]...], omitting [0,0] at the end.
```
  ¡                 # apply function repeatedly, collect values in infinite list:
   ?                #  if:
              ←     #   the first element is nonzero
    ż-ḋ2            #  then: zip-subtract 1,0 (binary digits of 2)
        ȯe59        #  else: make a 2-element list of 59 and 
            ←→      #   the last element, decremented
↑                   # finally, get longest prefix where function gives truthy result:
 Σ                  #  sum (of secs, mins)
```
[Answer]
# [J](http://jsoftware.com/), 25 24 bytes
```
(,.i.,])(,,/)60,"0/&i.~[
```
[Try it online!](https://tio.run/##y/qvpKeepmBrpaCuoKNgoGAFxLp6Cs5BPm7/NXT0MvV0YjU1dHT0Nc0MdJQM9NUy9eqi/2ty@TnpKYClHeysNHXqTO0cdByqHazB0lypyRn5ChoGCmkKlgaa1hqGQIYRiGEEEfkPAA "J – Try It Online")
[Answer]
# [Retina 0.8.2](https://github.com/m-ender/retina/wiki/The-Language/a950ad7d925ec9316e3e2fb2cf5d49fd15d23e3d), ~~79~~ 74 bytes
```
\d+
$*
\G1
1$'¶
1>`:.*
:59$*
%(r`1\G
¶$`1
O^`
(1*):(1{10})*(1*)
$.1:$#2$.3
```
[Try it online!](https://tio.run/##K0otycxL/P8/JkWbS0WLK8bdkMtQRf3QNi5DuwQrPS0uK1NLoLCqRlGCYYw716FtKgmGXP5xCVwahlqaVhqG1YYGtZpaIA6Xip6hlYqykYqe8f//xlZmlgA "Retina 0.8.2 – Try It Online") Takes input in `m:ss` format. Output includes both start and end times. Explanation:
```
\d+
$*
```
Convert to unary.
```
\G1
1$'¶
```
Count down to `0` minutes.
```
1>`:.*
:59$*
```
Subsequent minutes count down from `59`.
```
%(`
```
Apply the rest of the script to each minute individually.
```
r`1\G
¶$`1
O^`
```
Count down to `0` seconds.
```
(1*):(1{10})*(1*)
$.1:$#2$.3
```
Convert to decimal.
[Answer]
# Rust, 67 bytes
```
|mut h,mut m,f:fn(u8,u8)|while h+m>0{f(h,m);if m<1{h-=1;m=60};m-=1}
```
This one takes a function pointer, and outputs by calling that function.
[Playground link](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=da13f6662148b9c4400a82e6aeabd68f) ([without gist](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn%20main()%20%7B%0A%20%20%20%20let%20f%20%3D%20%7Cmut%20h%2Cmut%20m%2Cf%3Afn(u8%2Cu8)%7Cwhile%20h%2Bm%3E0%7Bf(h%2Cm)%3Bif%20m%3C1%7Bh-%3D1%3Bm%3D60%7D%3Bm-%3D1%7D%3B%0A%0A%20%20%20%20for%20((h%2C%20m)%2C%20expected_result)%20in%20%5B%0A%20%20%20%20%20%20%20%20((0%2C%2090)%2C%20vec!%5B(0%2C90)%2C%20(0%2C%2089)%2C%20(0%2C%2088)%2C%20(0%2C%2087)%2C%20(0%2C%2086)%2C%20(0%2C%2085)%2C%20(0%2C%2084)%2C%20(0%2C%2083)%2C%20(0%2C%2082)%2C%20(0%2C%2081)%2C%20(0%2C%2080)%2C%20(0%2C%2079)%2C%20(0%2C%2078)%2C%20(0%2C%2077)%2C%20(0%2C%2076)%2C%20(0%2C%2075)%2C%20(0%2C%2074)%2C%20(0%2C%2073)%2C%20(0%2C%2072)%2C%20(0%2C%2071)%2C%20(0%2C%2070)%2C%20(0%2C%2069)%2C%20(0%2C%2068)%2C%20(0%2C%2067)%2C%20(0%2C%2066)%2C%20(0%2C%2065)%2C%20(0%2C%2064)%2C%20(0%2C%2063)%2C%20(0%2C%2062)%2C%20(0%2C%2061)%2C%20(0%2C%2060)%2C%20(0%2C%2059)%2C%20(0%2C%2058)%2C%20(0%2C%2057)%2C%20(0%2C%2056)%2C%20(0%2C%2055)%2C%20(0%2C%2054)%2C%20(0%2C%2053)%2C%20(0%2C%2052)%2C%20(0%2C%2051)%2C%20(0%2C%2050)%2C%20(0%2C%2049)%2C%20(0%2C%2048)%2C%20(0%2C%2047)%2C%20(0%2C%2046)%2C%20(0%2C%2045)%2C%20(0%2C%2044)%2C%20(0%2C%2043)%2C%20(0%2C%2042)%2C%20(0%2C%2041)%2C%20(0%2C%2040)%2C%20(0%2C%2039)%2C%20(0%2C%2038)%2C%20(0%2C%2037)%2C%20(0%2C%2036)%2C%20(0%2C%2035)%2C%20(0%2C%2034)%2C%20(0%2C%2033)%2C%20(0%2C%2032)%2C%20(0%2C%2031)%2C%20(0%2C%2030)%2C%20(0%2C%2029)%2C%20(0%2C%2028)%2C%20(0%2C%2027)%2C%20(0%2C%2026)%2C%20(0%2C%2025)%2C%20(0%2C%2024)%2C%20(0%2C%2023)%2C%20(0%2C%2022)%2C%20(0%2C%2021)%2C%20(0%2C%2020)%2C%20(0%2C%2019)%2C%20(0%2C%2018)%2C%20(0%2C%2017)%2C%20(0%2C%2016)%2C%20(0%2C%2015)%2C%20(0%2C%2014)%2C%20(0%2C%2013)%2C%20(0%2C%2012)%2C%20(0%2C%2011)%2C%20(0%2C%2010)%2C%20(0%2C%209)%2C%20(0%2C%208)%2C%20(0%2C%207)%2C%20(0%2C%206)%2C%20(0%2C%205)%2C%20(0%2C%204)%2C%20(0%2C%203)%2C%20(0%2C%202)%2C%20(0%2C%201)%2C%20(0%2C%200)%5D)%2C%0A%20%20%20%20%20%20%20%20((1%2C%2020)%2C%20vec!%5B(1%2C%2020)%2C%20(1%2C%2019)%2C%20(1%2C%2018)%2C%20(1%2C%2017)%2C%20(1%2C%2016)%2C%20(1%2C%2015)%2C%20(1%2C%2014)%2C%20(1%2C%2013)%2C%20(1%2C%2012)%2C%20(1%2C%2011)%2C%20(1%2C%2010)%2C%20(1%2C%209)%2C%20(1%2C%208)%2C%20(1%2C%207)%2C%20(1%2C%206)%2C%20(1%2C%205)%2C%20(1%2C%204)%2C%20(1%2C%203)%2C%20(1%2C%202)%2C%20(1%2C%201)%2C%20(1%2C%200)%2C%20(0%2C%2059)%2C%20(0%2C%2058)%2C%20(0%2C%2057)%2C%20(0%2C%2056)%2C%20(0%2C%2055)%2C%20(0%2C%2054)%2C%20(0%2C%2053)%2C%20(0%2C%2052)%2C%20(0%2C%2051)%2C%20(0%2C%2050)%2C%20(0%2C%2049)%2C%20(0%2C%2048)%2C%20(0%2C%2047)%2C%20(0%2C%2046)%2C%20(0%2C%2045)%2C%20(0%2C%2044)%2C%20(0%2C%2043)%2C%20(0%2C%2042)%2C%20(0%2C%2041)%2C%20(0%2C%2040)%2C%20(0%2C%2039)%2C%20(0%2C%2038)%2C%20(0%2C%2037)%2C%20(0%2C%2036)%2C%20(0%2C%2035)%2C%20(0%2C%2034)%2C%20(0%2C%2033)%2C%20(0%2C%2032)%2C%20(0%2C%2031)%2C%20(0%2C%2030)%2C%20(0%2C%2029)%2C%20(0%2C%2028)%2C%20(0%2C%2027)%2C%20(0%2C%2026)%2C%20(0%2C%2025)%2C%20(0%2C%2024)%2C%20(0%2C%2023)%2C%20(0%2C%2022)%2C%20(0%2C%2021)%2C%20(0%2C%2020)%2C%20(0%2C%2019)%2C%20(0%2C%2018)%2C%20(0%2C%2017)%2C%20(0%2C%2016)%2C%20(0%2C%2015)%2C%20(0%2C%2014)%2C%20(0%2C%2013)%2C%20(0%2C%2012)%2C%20(0%2C%2011)%2C%20(0%2C%2010)%2C%20(0%2C%209)%2C%20(0%2C%208)%2C%20(0%2C%207)%2C%20(0%2C%206)%2C%20(0%2C%205)%2C%20(0%2C%204)%2C%20(0%2C%203)%2C%20(0%2C%202)%2C%20(0%2C%201)%2C%20(0%2C%200)%5D)%2C%0A%20%20%20%20%20%20%20%20((2%2C%2090)%2C%20vec!%5B(2%2C%2090)%2C%20(2%2C%2089)%2C%20(2%2C%2088)%2C%20(2%2C%2087)%2C%20(2%2C%2086)%2C%20(2%2C%2085)%2C%20(2%2C%2084)%2C%20(2%2C%2083)%2C%20(2%2C%2082)%2C%20(2%2C%2081)%2C%20(2%2C%2080)%2C%20(2%2C%2079)%2C%20(2%2C%2078)%2C%20(2%2C%2077)%2C%20(2%2C%2076)%2C%20(2%2C%2075)%2C%20(2%2C%2074)%2C%20(2%2C%2073)%2C%20(2%2C%2072)%2C%20(2%2C%2071)%2C%20(2%2C%2070)%2C%20(2%2C%2069)%2C%20(2%2C%2068)%2C%20(2%2C%2067)%2C%20(2%2C%2066)%2C%20(2%2C%2065)%2C%20(2%2C%2064)%2C%20(2%2C%2063)%2C%20(2%2C%2062)%2C%20(2%2C%2061)%2C%20(2%2C%2060)%2C%20(2%2C%2059)%2C%20(2%2C%2058)%2C%20(2%2C%2057)%2C%20(2%2C%2056)%2C%20(2%2C%2055)%2C%20(2%2C%2054)%2C%20(2%2C%2053)%2C%20(2%2C%2052)%2C%20(2%2C%2051)%2C%20(2%2C%2050)%2C%20(2%2C%2049)%2C%20(2%2C%2048)%2C%20(2%2C%2047)%2C%20(2%2C%2046)%2C%20(2%2C%2045)%2C%20(2%2C%2044)%2C%20(2%2C%2043)%2C%20(2%2C%2042)%2C%20(2%2C%2041)%2C%20(2%2C%2040)%2C%20(2%2C%2039)%2C%20(2%2C%2038)%2C%20(2%2C%2037)%2C%20(2%2C%2036)%2C%20(2%2C%2035)%2C%20(2%2C%2034)%2C%20(2%2C%2033)%2C%20(2%2C%2032)%2C%20(2%2C%2031)%2C%20(2%2C%2030)%2C%20(2%2C%2029)%2C%20(2%2C%2028)%2C%20(2%2C%2027)%2C%20(2%2C%2026)%2C%20(2%2C%2025)%2C%20(2%2C%2024)%2C%20(2%2C%2023)%2C%20(2%2C%2022)%2C%20(2%2C%2021)%2C%20(2%2C%2020)%2C%20(2%2C%2019)%2C%20(2%2C%2018)%2C%20(2%2C%2017)%2C%20(2%2C%2016)%2C%20(2%2C%2015)%2C%20(2%2C%2014)%2C%20(2%2C%2013)%2C%20(2%2C%2012)%2C%20(2%2C%2011)%2C%20(2%2C%2010)%2C%20(2%2C%209)%2C%20(2%2C%208)%2C%20(2%2C%207)%2C%20(2%2C%206)%2C%20(2%2C%205)%2C%20(2%2C%204)%2C%20(2%2C%203)%2C%20(2%2C%202)%2C%20(2%2C%201)%2C%20(2%2C%200)%2C%20(1%2C%2059)%2C%20(1%2C%2058)%2C%20(1%2C%2057)%2C%20(1%2C%2056)%2C%20(1%2C%2055)%2C%20(1%2C%2054)%2C%20(1%2C%2053)%2C%20(1%2C%2052)%2C%20(1%2C%2051)%2C%20(1%2C%2050)%2C%20(1%2C%2049)%2C%20(1%2C%2048)%2C%20(1%2C%2047)%2C%20(1%2C%2046)%2C%20(1%2C%2045)%2C%20(1%2C%2044)%2C%20(1%2C%2043)%2C%20(1%2C%2042)%2C%20(1%2C%2041)%2C%20(1%2C%2040)%2C%20(1%2C%2039)%2C%20(1%2C%2038)%2C%20(1%2C%2037)%2C%20(1%2C%2036)%2C%20(1%2C%2035)%2C%20(1%2C%2034)%2C%20(1%2C%2033)%2C%20(1%2C%2032)%2C%20(1%2C%2031)%2C%20(1%2C%2030)%2C%20(1%2C%2029)%2C%20(1%2C%2028)%2C%20(1%2C%2027)%2C%20(1%2C%2026)%2C%20(1%2C%2025)%2C%20(1%2C%2024)%2C%20(1%2C%2023)%2C%20(1%2C%2022)%2C%20(1%2C%2021)%2C%20(1%2C%2020)%2C%20(1%2C%2019)%2C%20(1%2C%2018)%2C%20(1%2C%2017)%2C%20(1%2C%2016)%2C%20(1%2C%2015)%2C%20(1%2C%2014)%2C%20(1%2C%2013)%2C%20(1%2C%2012)%2C%20(1%2C%2011)%2C%20(1%2C%2010)%2C%20(1%2C%209)%2C%20(1%2C%208)%2C%20(1%2C%207)%2C%20(1%2C%206)%2C%20(1%2C%205)%2C%20(1%2C%204)%2C%20(1%2C%203)%2C%20(1%2C%202)%2C%20(1%2C%201)%2C%20(1%2C%200)%2C%20(0%2C%2059)%2C%20(0%2C%2058)%2C%20(0%2C%2057)%2C%20(0%2C%2056)%2C%20(0%2C%2055)%2C%20(0%2C%2054)%2C%20(0%2C%2053)%2C%20(0%2C%2052)%2C%20(0%2C%2051)%2C%20(0%2C%2050)%2C%20(0%2C%2049)%2C%20(0%2C%2048)%2C%20(0%2C%2047)%2C%20(0%2C%2046)%2C%20(0%2C%2045)%2C%20(0%2C%2044)%2C%20(0%2C%2043)%2C%20(0%2C%2042)%2C%20(0%2C%2041)%2C%20(0%2C%2040)%2C%20(0%2C%2039)%2C%20(0%2C%2038)%2C%20(0%2C%2037)%2C%20(0%2C%2036)%2C%20(0%2C%2035)%2C%20(0%2C%2034)%2C%20(0%2C%2033)%2C%20(0%2C%2032)%2C%20(0%2C%2031)%2C%20(0%2C%2030)%2C%20(0%2C%2029)%2C%20(0%2C%2028)%2C%20(0%2C%2027)%2C%20(0%2C%2026)%2C%20(0%2C%2025)%2C%20(0%2C%2024)%2C%20(0%2C%2023)%2C%20(0%2C%2022)%2C%20(0%2C%2021)%2C%20(0%2C%2020)%2C%20(0%2C%2019)%2C%20(0%2C%2018)%2C%20(0%2C%2017)%2C%20(0%2C%2016)%2C%20(0%2C%2015)%2C%20(0%2C%2014)%2C%20(0%2C%2013)%2C%20(0%2C%2012)%2C%20(0%2C%2011)%2C%20(0%2C%2010)%2C%20(0%2C%209)%2C%20(0%2C%208)%2C%20(0%2C%207)%2C%20(0%2C%206)%2C%20(0%2C%205)%2C%20(0%2C%204)%2C%20(0%2C%203)%2C%20(0%2C%202)%2C%20(0%2C%201)%2C%20(0%2C%200)%5D)%2C%0A%20%20%20%20%5D%20%7B%0A%20%20%20%20%20%20%20%20f(h%2C%20m%2C%20print)%3B%0A%20%20%20%20%20%20%20%20let%20answer%20%3D%20unsafe%20%7B%20%26mut%20ANSWER%20%7D%3B%0A%20%20%20%20%20%20%20%20println!(%22%7B%3A%3F%7D%22%2C%20answer)%3B%0A%20%20%20%20%20%20%20%20answer.push((0%2C%200))%3B%20%20%2F%2F%20(0%2C%200)%20at%20the%20end%20is%20optional%0A%20%20%20%20%20%20%20%20assert_eq!(answer%2C%20%26expected_result)%3B%0A%20%20%20%20%20%20%20%20answer.clear()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Astatic%20mut%20ANSWER%3A%20Vec%3C(u8%2C%20u8)%3E%20%3D%20Vec%3A%3Anew()%3B%0Afn%20print(h%3A%20u8%2C%20m%3A%20u8)%20%7B%0A%20%20%20%20unsafe%20%7B%20%26mut%20ANSWER%20%7D.push((h%2C%20m))%3B%0A%7D%0A)), for which I ruthlessly plagiarised [mousetale's test harness](https://codegolf.stackexchange.com/a/249148/43394). Without that, I probably wouldn't've written this answer.
There's a shorter (60 byte) version, if you replace the `while h+m>0` with `loop`. That only works in debug mode, though – in which it exits the loop by panicking – so I don't know that it counts.
[Answer]
# [Zsh](https://www.zsh.org/), 46 bytes
```
m=({$1..0})
echo $m[1]:{$2..0} ${^m:1}:{59..0}
```
[Try it online!](https://tio.run/##qyrO@J@moanxP9dWo1rFUE/PoFaTKzU5I19BJTfaMNaqWsUIJKagUh2Xa2VYa1Vtagni/9fk4uJKUzBQMDQAUoYKlpb/AQ "Zsh – Try It Online")
The `^` flag sets the `RC_EXPAND_PARAM` flag for that expansion.
The list is needed because `{a..b}` never expands to zero arguments, while `${^foo}` does.
[Answer]
# [Factor](https://factorcode.org/) + `math.unicode pair-rocket`, 60 bytes
```
[ [ .s dup last 0 = 1 => -59 "\0"? v- dup Σ 0 > ] loop . ]
```
[Try it online!](https://tio.run/##JcuxCsIwFEZhXPsUP91T6iCi0jqKi4s41Q4hvWJpTGJyWxDxaXwfXynWOh4@zkUqtj6ejvvDbg3nifnhfGsYHXlDGoHuPRlFAU62XnirOmLcJF@zgX5v@EdvWmUbmgKbJHlijmWOV6xQIQtoegctAyNHMVJRQixWSM/5LN1iEJN/3qOWqKGtdchQRyW1jl8 "Factor – Try It Online")
Outputs times to standard output in the format `{ minutes seconds }`, one per line, in the order they would be seen on the microwave display.
[Answer]
# [Charcoal](https://github.com/somebody1234/Charcoal), 17 bytes
```
ＩＥ⊕θＥ⎇‹ιＩθ⁶⁰⊕η⟦ιλ
```
[Try it online!](https://tio.run/##S85ILErOT8z5/z@gKDOvRMM5sbhEwzexQMMzL7koNTc1ryQ1RaNQU0cBJBaSWpSXWFSp4ZNaXKyRqaMAVlyoCZQ1M9BRQNaRARKMBirJidUEAuv//40VzCz/65blAAA "Charcoal – Try It Online") Link is to verbose version of code. Takes minutes and seconds as separate input and outputs a list of lists of lists of minute and second pairs in ascending order. Explanation:
```
   θ                First input
  ⊕                 Incremented
 Ｅ                  Map minutes over implicit range
       ι            Current minute
      ‹             Is less than
         θ          First input
        Ｉ           Cast to integer
     ⎇              If true then
          ⁶⁰        Literal integer `60` else
             η      Second input
            ⊕       Incremented
    Ｅ               Map seconds over implicit range
              ⟦ιλ   Minute and second as a list
Ｉ                   Cast to string
                    Implicitly print
```
[Answer]
# [Perl 5](https://www.perl.org/) `-a`, 43 bytes
```
do{say"@F";@F=(--$_,59)if!$F[1]--}until$_<0
```
[Try it online!](https://tio.run/##K0gtyjH9/z8lv7o4sVLJwU3J2sHNVkNXVyVex9RSMzNNUcUt2jBWV7e2NK8kM0cl3sbg/38jBUuDf/kFJZn5ecX/dRP/6/qa6hkYGgAA "Perl 5 – Try It Online")
Minutes and seconds are space separated in both input and output.
[Answer]
# [Julia](http://julialang.org/), 39 bytes
```
m>s=show((m,s))~s<1 ? -1<m-1>60 : m>s-1
```
[Try it online!](https://tio.run/##yyrNyUw0rPj/P9eu2LY4I79cQyNXp1hTs67YxlDBXkHX0CZX19DOzEDBSgGoQtfwv6GdpeV/AA "Julia 1.0 – Try It Online")
Takes input as two arguments (`1>90`), prints the values as tuples and ends with an error
[Answer]
# [Pyth](https://github.com/isaacg1/pyth), 18 bytes
```
WsQQ=?eAQ,GtH,tG59
```
[Try it online!](https://tio.run/##K6gsyfj/P7w4MNDWPtUxUMe9xEOnxN3U8v//aEMdS4NYAA "Pyth – Try It Online")
Doesn't include [0,0]
```
WsQQ=?eAQ,GtH,tG59
                    (Q implicitly initialized as the input)
WsQ                 While sum(Q) > 0:
   Q                 Output Q
       AQ            Set [G,H] = Q (minutes and seconds, respectively)
    =                Update Q to the following:
     ?e Q             If (seconds) > 0:
         ,GtH          [(minutes), (seconds) - 1]
                      Else:
             ,tG59     [(minutes) - 1, 59]
```
---
If single-integer output is allowed:
### Pyth, 15 bytes
```
WQQ=-Q^41!%Q100
```
[Try it online!](https://tio.run/##K6gsyfj/Pzww0FY3MM7EUFE10NDA4P9/Q0sDAA "Pyth – Try It Online")
]