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

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

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


当前回答

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

其他回答

关于模拟真实系统或你自己的东西的建议? 我可以说模拟器通过模拟整个硬件来工作。也许不是电路(像HW那样四处移动比特)。移动字节是最终结果,所以复制字节是好的)。模拟器是很难创建的,因为有很多黑客(如在不寻常的效果),时间问题,等等,你需要模拟。如果一个(输入)部分是错误的,那么整个系统就会崩溃,或者最多出现一个bug/小故障。

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

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

我将如何开始模仿。

1.买一些关于低级编程的书籍,你将需要它来“模拟”任天堂的操作系统……游戏的男孩……

2.专门找一些模拟方面的书,也许还有操作系统开发方面的。(你不会做一个操作系统,但最接近它。

3.看看一些开源仿真器,特别是那些您想为其创建仿真器的系统。

4.将更复杂的代码片段复制到IDE/编译器中。这将节省编写长代码的时间。这就是我为操作系统开发所做的,使用linux的一个区域

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

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

模拟可能看起来令人生畏,但实际上比模拟容易得多。

任何处理器通常都有一个编写良好的描述状态、交互等的规范。

如果您根本不关心性能,那么您可以使用非常优雅的面向对象程序轻松地模拟大多数老式处理器。例如,X86处理器需要一些东西来维护寄存器的状态(简单),需要一些东西来维护内存的状态(简单),还需要一些东西来接收每个传入的命令并将其应用到机器的当前状态。如果您真的需要准确性,您还可以模拟内存转换、缓存等,但这是可行的。

In fact, many microchip and CPU manufacturers test programs against an emulator of the chip and then against the chip itself, which helps them find out if there are issues in the specifications of the chip, or in the actual implementation of the chip in hardware. For example, it is possible to write a chip specification that would result in deadlocks, and when a deadline occurs in the hardware it's important to see if it could be reproduced in the specification since that indicates a greater problem than something in the chip implementation.

当然,电子游戏的模拟器通常关心性能,所以它们不会使用简单的实现,它们还包括与主机系统的操作系统接口的代码,例如使用绘图和声音。

考虑到老式电子游戏(NES/SNES等)非常缓慢的性能,在现代系统上进行仿真相当容易。事实上,更令人惊讶的是,你可以下载一套SNES游戏或Atari 2600游戏,考虑到当这些系统流行时,免费访问每个卡带都是一个梦想。