有几种仿真技术。第一种技术称为低级仿真。在这种情况下,仿真器可以用几乎任何语言编写,但由于大量的二进制数据操作,C和C++非常适合此任务,尽管还有很多其他能够提供此类功能的语言。
使用低级仿真,程序模拟原始系统的确切硬件。例如,原始NES具有明确定义的硬件,包括来自官方文档和反向工程信息。我们确切地知道其基于6502的CPU以及图形、声音芯片等的行为。使用低级仿真,原始游戏的确切二进制数据以与原始硬件解释数据完全相同的方式在软件中解释。这包括为6502指令集编写的原始机器代码、图形数据、IO等。通过调用现代图形和声音API来翻译原始硬件的指令,以模拟图形和声音硬件。
这种技术是最准确和成功的,但同时也是最慢和有时实现复杂机器最困难的。
第二种方法称为静态重编译。分析原始系统的原始机器代码,然后重新编译成现代计算机可用的代码。这种技术产生最快的仿真,但成功率非常低。采用这种技术的仿真器,最多只能支持一些演示和游戏。原因是原始软件期望的运行时环境通常以难以或无法在编译时知道的方式发生变化。
最后一种技术称为动态重编译。在这种技术中,仿真器分析代码并在运行时重新编译它。这使编译器可以根据程序正在运行时可用的信息,使运行时环境适合于原始软件所期望的。
参与大多数重新编译技术的过程中,有一种称为高级模拟的东西。这是观察到大多数代码只是编译成调用操作系统或库C例程的代码。将代码重新编译为主机机器,并原生重新实现对原始操作系统和库的调用(例如用于图形和声音的库),而不是进行模拟。例如,如果有一个要在屏幕上画一个三角形的调用,那么仿真器可以直接执行该操作,而无需模拟将绘图命令传递给原始图形硬件的确切低级实现。这就是几乎所有任天堂64和PlayStation仿真器的工作方式。通过专门设计的ROM转储硬件,游戏卡带中的游戏可以转移到计算机上。在旧型号的机器上,ROM实际上表现出非常简单的行为方式。它们有地址输入线和数据输出线。可以使用微控制器构建设备来转储这些ROM,然后使用串行、USB或其他方法将它们传输到计算机上。某些ROM甚至可以通过计算机的可编程并行端口读取,这在现代PC中大多数缺失,但是存在适配器可以支持USB。
由于大量的动态代码生成,使用重新编译技术的仿真器几乎完全使用C或C++,但是任何能够进行系统编程和运行时低级别代码接口的语言都能够做到这一点。