Inside an emulator
Emulators let you run software designed for one machine on a completely different machine. A popular use is to run classic games on modern PCs and mobile devices, but emulators can also be used in software development to get advanced debugging features or in hardware development to evaluate systems before they are put into silicon.
In this talk I will explain what emulation is and how it compares to virtualization and to virtual machines. The difference between high-level and low-level emulation will be discussed, including the trade-offs involved. I will show a timing model that allows high-accuracy emulation to be implemented efficiently. And there will be some fun and surprising uses of emulation demonstrated, such as tool-assisted speedruns (TAS) and single stepping back in time in a debugger.
Most examples will come from openMSX, an open source emulator for the 80's MSX home computer (Z80 based), which is a project I have been active in for over a decade.