I've been playing around with interpreted machines quite a bit for genetic programming experiments. My current favorite minimal machine has 4 instructions:
0b00: Increment memory pointer (wraps)
0b01: Increment memory value (wraps)
0b10: Jump marker - Jump to next marker if memory value 1, prior if 2 (wraps)
0b11: Output current memory value
It has 2 tapes, instruction & memory. Memory is an array of byte.
This cannot handle any kind of input, but is useful for generating programs that can. Being able to pack 32 instructions into each interpreter machine word opens up some interesting possibilities for how we search the space.