A box of gas, a clock, and a rule that forgets nothing. Run it forward and the block dissolves. Run it backward and the block comes home, cell by cell. Then touch one cell on the way back.
The grid is a cellular automaton called Critters (Margolus, 1987). Time moves in ticks. At each tick the grid is cut into 2 × 2 blocks and every block is replaced by the entry for it in a table of sixteen. On the next tick the cut shifts by one cell, so the blocks overlap the old ones. That is the whole machine.
Here is the table. A block is replaced by the block beneath it.
Count the live cells. Two: leave the block alone. Three: flip every cell and turn the block half a turn. Any other number: flip every cell. The grid is drawn with colours swapped on odd ticks, which is why the empty space stays dark.
Sixteen inputs, sixteen different outputs. That is all reversibility is: no two presents share a past, so the present tells you the past exactly, and running the table backward recovers it. The Run backward button does nothing cleverer than that. Every particle retraces its path, and the block is rebuilt with no error at all.
It doesn't, strictly. Among all the arrangements that look like a spread-out gas, some are on their way back to a block. The backward run visits one of them at every tick. But they are outnumbered beyond counting by arrangements that are not, and the two kinds are indistinguishable to the eye. Nudge a single cell during the return and you have stepped from one kind to the other: the clock keeps running backward, the rule keeps forgetting nothing, and the block never comes.
The arrow of time in this box is not in the rule. It is in where the box started, and in how little it takes to lose the way back. Loschmidt put this objection to Boltzmann in 1876: if the laws are reversible, reverse every velocity and the gas must unmix. Boltzmann's answer, roughly, was yes, and good luck. The box lets you try.