模拟器是如何工作的?当我看到NES / SNES或C64模拟器时,我感到惊讶。
您是否需要通过解释其特定的汇编指令来模拟这些机器的处理器?还有哪些因素需要考虑?它们通常是如何设计的?
针对有兴趣编写模拟器(尤其是游戏系统)的人,您能给出一些建议吗?
模拟器是如何工作的?当我看到NES / SNES或C64模拟器时,我感到惊讶。
您是否需要通过解释其特定的汇编指令来模拟这些机器的处理器?还有哪些因素需要考虑?它们通常是如何设计的?
针对有兴趣编写模拟器(尤其是游戏系统)的人,您能给出一些建议吗?
我从未做过像模拟游戏控制台这样花哨的事情,但我曾经参加过一门课程,作业是为 Andrew Tanenbaum 的 Structured Computer Organization 中描述的机器编写仿真器。那很有趣,给了我很多灵光乍现的时刻。在开始编写真正的仿真器之前,你可能想先看看那本书。
关于模拟真实系统或自己的东西,我可以说模拟器通过模拟整个硬件来工作。也许不是到电路的级别(因为像硬件一样移动位会有很多变化。移动字节是最终结果,所以复制字节是可以的)。模拟器非常难创建,因为你需要模拟许多黑科技(例如不寻常的效果)、时间问题等。如果一个(输入)部分出错,整个系统可能会崩溃,最好情况下只会有一个错误/故障。
添加@Cody Brocious提供的答案
在虚拟化的背景下,当您模拟一个新系统(CPU,I/O等)到虚拟机中时,我们可以看到以下类别的仿真器。
解释:bochs是解释器的一个例子,它是一个x86 PC仿真器,它从客户系统中获取每个指令并将其翻译成另一组指令(主机ISA的指令),以产生预期的效果。是的,它非常慢,它不缓存任何东西,因此每个指令都要经过相同的周期。
动态仿真器:Qemu是一种动态仿真器。它对客户指令进行即时翻译,并缓存结果。最好的部分是直接在主机系统上执行尽可能多的指令,以使仿真更快。正如Cody所提到的那样,它将代码分成块(1个单独的执行流)。
静态仿真器:据我所知,在虚拟化方面没有静态仿真器可以帮助。