Why Old Game Consoles Can Be Recreated in Software: The Architecture of Emulation — Interpreters, JIT Dynamic Recompilation, Fastmem, and Cycle Accuracy