模拟器是如何工作的?当我看到NES/SNES或C64模拟器时,我很震惊。

您是否必须通过解释特定的组装指令来模拟这些机器的处理器?还有什么?它们通常是如何设计的?

你能给那些对编写模拟器(特别是游戏系统)感兴趣的人一些建议吗?


当前回答

当你开发一个模拟器时,你是在解释系统正在运行的处理器组件(Z80、8080、PS CPU等)。

您还需要模拟系统拥有的所有外设(视频输出、控制器)。

你应该开始为简单的系统编写模拟器,比如旧的Game Boy(使用Z80处理器,我是不是没有弄错)或C64。

其他回答

添加@Cody Brocious提供的答案 在虚拟化环境中,您正在向虚拟机模拟一个新系统(CPU、I/O等),我们可以看到以下类别的模拟器。

解释:bochs是解释器的一个例子,它是一个x86 PC模拟器,它把来自客户系统的每条指令翻译成另一组指令(主机ISA的指令)来产生预期的效果。是的,它非常慢,它不缓存任何东西,所以每条指令都经过相同的周期。

动态仿真器:Qemu是一个动态仿真器。它可以实时翻译客户指令,也可以缓存结果。最好的部分是直接在主机系统上执行尽可能多的指令,这样模拟就更快了。正如Cody所提到的,它将代码划分为块(一个单独的执行流)。

静态模拟器:据我所知,没有静态模拟器可以帮助虚拟化。

一个叫维克多·莫亚·德尔·巴里奥的人写了一篇关于这个主题的论文。152页里有很多有用的信息。你可以在这里下载PDF文件。

如果您不想注册scribd,您可以谷歌获取PDF标题,“模拟编程技术的研究”。PDF文档有几个不同的来源。

值得一看的是Imran Nazar尝试用JavaScript编写Gameboy模拟器。

共享源设备模拟器包含PocketPC/智能手机模拟器的可构建源代码(需要Visual Studio,在Windows上运行)。我参与了二进制版本的V1和V2。

它解决了许多仿真问题: -从虚拟客户端到物理客户端再到虚拟主机的高效地址转换 - JIT编译客户代码 -模拟周边设备,如网络适配器、触摸屏和音频 - UI集成,主机键盘和鼠标 -保存/恢复状态,用于模拟从低功耗模式恢复

当你开发一个模拟器时,你是在解释系统正在运行的处理器组件(Z80、8080、PS CPU等)。

您还需要模拟系统拥有的所有外设(视频输出、控制器)。

你应该开始为简单的系统编写模拟器,比如旧的Game Boy(使用Z80处理器,我是不是没有弄错)或C64。